分享

算法复杂度分析

 梦幻水书屋 2021-07-12

1.时间复杂度:

什么是Big O:O(f(n))表示运行算法所需要执行的指令数,和f(n)成正比。n表示数据规模

例:

随着输入规模n的增大,时间复杂度的增长模式




2.数据规模概念:

该时间针对的是简单的求和运算,针对算法在该基础上大约除10即可


3.空间复杂度:


递归的深度是多少,空间复杂度就是多少


4.常见的复杂度分析

O(1)

O(n):一般存在一个for循环且与n有关


O(n^2):一般是双重循环且都与n有关,注意增量


O(logn):

二分查找法:



整形转成字符串:


其他:

O(nlogn):虽然是双循环,但是外循环增量是logn级别


O(sqrt(n)):


5.递归算法的复杂度分析

不是有递归的函数就一定是O(nlogn)

如果递归函数中,

只进行一次递归调用,递归深度为depth,在每个递归函数中,时间复杂度为T,则总体时间复杂度为O(T*depth)


进行多次递归调用,建立一棵递归树

该函数的递归,在n=3时,有1次f(3),有2次f(2)递归,4次f(1)递归,8次f(0)递归,调用次数就是递归树的节点数(即调用深度)


归并排序算法属于分而治之,其两次递归,排序时间复杂度是logn级别,每一层递归其节点总数n=8没有改变,所以其时间复杂度是nlogn


6.均摊复杂度分析(动态数组、动态栈、动态队列)

动态数组:每一次push耗费O(1),当达到容量n时,resize数组(扩充或缩减)容量耗费O(n),这些n+1次操作耗费O(2n)的时间,均摊下来就是O(2)即O(1)级别。缩减时为了避免复杂度震荡(在数组元素个数为n时,重复着添加元素删除元素,反复扩充或缩减,使复杂度变为O(n)),因此需要当元素个数缩减至1/4时才resize,给添加元素留出余地



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多