数据结构与算法.NO1

数据结构与算法第一篇_认识一些基本概念

概念这种东西,一些参考资料上边定义很规范,但比较抽象;我们如果只是拿来用的话,应该把概念进行具象,如果我们是要对这些东西要深入研究的时候,我们应该对这些概念进行抽象,覆盖到方方面面.以我现在水平来说,能具象理解这些概念已经就很不错了.下边就是我看到或是我自己总结的一些数据结构和算法的入门概念.

概念:

1.算法(algorithms):就是解决问题的方法;同一问题的不同解决方法。

2.数据结构(DataStructure):存储数据的不同方式。

二者之间的关系:为什么数据结构和算法一直都在一起?因为这两个小可爱,是相辅相成的。数据结构是为了算法服务的,而算法是针对特定的数据结构上。

了解这两个基础的概念之后,下边我们就探讨一下我曾经独自看书时,让我懵逼的一个概念——算法复杂度分析;就是这个小东西,它还有一个可爱的名字,叫big O(大O)标记法。想一想我曾经认识的big O

我以前认识“大O”;奥斯卡罗伯特森nba巨星;曾经一个赛季平均得分,篮板,助攻都达到两位数。

扯远了。。。现在回来再说一说这个大O标记法;大O标记法是算法学习精髓所在,因为要给一个算法做理论分析,需要依靠大O标记法;大O标记法表示算法的时间随着问题规模的变化的规律

大O标记法的计算:

  1.不考虑不必要的操作;

    例如:程序的初始化;初始变量的赋值;

  2.不考虑常数项;(这个肯定不需要解释了)

  3.不考虑低次项;例如:O(n^2+n)直接就记为O(n^2)了,不会去考虑低次项。

 

大O标记的两条法则:

  只关注循环次数最多的一行代码(重点)。

  加法法则:总复杂度等于量级最大的那段代码的复杂度;

  乘法法则:嵌套的代码的复杂度等于嵌套内外代码复杂度的乘积;(看看入门级别的排序就懂的了)

常见的时间复杂度:

O(1):常数级别,时间不会随着数据量变化;代码中没有循环,没有递归操作。

O(n):线性级别,时间随着数据量变化呈线性相关。

O(n^2):常见排序。

O(logn):

例如:

     i=1;
     while (i <= n)  {
       i = i * 2;
     }

 

O(nlogn):懒得写。。。

 

猜你喜欢

转载自blog.csdn.net/Bruce_Zhang0828/article/details/88836037