数据结构中时间复杂度和空间复杂度的理解

      刚开始学习数据结构,由于感觉计算时间和空间复杂度好多复杂的公司,看的头都大了,所以就没有仔细理解大概浏览了一遍,谁知后面感觉好多题目都是问时间和空间复杂度的,所以就感觉很迷茫,要重新开始学习这个啦,考试题目一般涉及时间复杂度的比较多,空间复杂度的比较少,所以着重学习时间复杂度,当然时间是没有一个准备的度量标准,因为每个机子都不一样,这里就从普遍意义上面的计算开始:

     一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示。若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。即是要有一个f(n)满足频率/f(n)在n很大时是一个不为0的常数。最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。

       按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n), k次(k>=2)方阶O(nk),指数阶O(2n)。

                                                                   简化式: 1<log2n<n<nlog2n<nk<2n

最主要的问题是怎么求取时间复杂度呢?

    (1)如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。(2)当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。(3)算法的时间复杂度不仅仅依赖于问题的规模,还与输入实例的初始状态有关


你可能感兴趣的:(数据结构和算法)