0
点赞
收藏
分享

微信扫一扫

数据结构—1.时间复杂度

一枚路过的程序猿 2022-03-30 阅读 74
算法

目录

前言

一、时间复杂度

二、大O表示法

三,实例介绍

例1:O(N^2)

例2:O(1)

例3:O(M +N)

(重点)例4:O(N)

例5:冒泡排序( O(N^2) )

例6:二分法查找(O(log2N))

例7:

(1)递归法(阶乘)O(N) | O(1)

(2)递归法(斐波那契数列)( O(2^N))

总结



前言

     本文介绍数据结构的入门——时间复杂度。将会对时间复杂度进行剖析,通过例题讲解时间复杂度的应用范围和注意事项。


一、时间复杂度


概念:算法的时间复杂度是一个函数:(是数学含义上的函数)数据里面带未知数的函数式。

含义:算法在机器中运行所消耗的时间。

实际意义:算法中基本操作的执行次数。

作用和理解:降低占用内存和减少运行时间,提高效率。

好的算法相当于拿着筷子吃饭,差的算法相当于拿着竹竿吃饭,又长又麻烦。


二、大O表示法

大O符号(Big O notation):用于描述函数渐进行为的数学符号(描述时间复杂度)

推导大O阶方法:

1,用常数1取代运行次数中的所有加法常数;

2,在修改后的运行次数函数中,只保留最高阶项;

3,如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶;

含义:(保留最高阶的未知数,不保留常系数)。


三,实例介绍

例1:O(N^2)

找到某条基本语句与问题规模N之间的数学表达式,就是算出了算法的时间复杂度。

例2:O(1)

例3:O(M +N)

(重点)例4:O(N)

const char* strchr(const char *str,int character);
whlie(*str)
{
      if(*str==chaeacter)
       return str;
       else
         ++str;
}
return NULL;

例5:冒泡排序( O(N^2) )

例6:二分法查找(O(log2N))


例7:

(1)递归法(阶乘)O(N) | O(1)

(2)递归法(斐波那契数列)( O(2^N))

总结

1.本次讲了时间复杂度的基本认识。

通过对7例不同的时间复杂度的分析,我们可以得出以下结论:

(1)时间复杂度不局限与循环有关,核心是与算法思想有关。

(2)时间复杂度主要取其最坏循环次数。

(3)通过对时间复杂度的认识,能更好的对我们的程序进行优化。

举报

相关推荐

0 条评论