困惑的点——log,如何计算得出?

① 上限:用来表示该算法可能有的最高增长率。

② 大O表示法:如果某种算法的增长率上限(最差情况下)是f(n),那么说这种算法“在O(f(n))中”。n为输入规模。

上限的精确定义:对非负函数T(n),若存在两个正常数c和n0,对任意n>n0,有T(n)<cf(n),则称T(n)在集合O(f(n))中。

——T(n)表示算法的实际运行时间;

——f(n)是上限函数的一个表达式。

我们总是试图给算法的时间代价找到一个最“紧”(即最小)的上限,因此一般说顺序搜索法在O(n)中,而不是等于,因为也可以说它在O(n2)中。可以理解为O为上限的集合?

几个例子:

sum=0;

for(i=1;i<=n;i++)

sum+=n;

for循环执行,时间代价为O(n)。

sum=0;

for(i=1;i<=n;i++)

for(j=1;j<=i;j++)

sum+=n;

内层循环执行i次,外层执行n次,但是每一次内层循环的时间代价都因i的变化而不同。可以看到,第一次执行外层循环时i=1,第二次执行时i=2。每执行一次外层循环,i就以1的步长递增,直至最后一次i=n。因此,总的时间代价是从1累加到n,即 ,总运行时间为O(c3n2+c2n+c1),可化简为O(n2)。

③ 双重循环如排序,时间代价也为O(n2),只不过运行时间为第二个程序的两倍。上例中c3为1/2。

sum=0;

for (k=1;k<=n;k=k*2)    //Do log n times;

for (j=1;j<=n;j++)       // Do n times;

{

sum++;

}

内层循环执行次数恒为n。设外层循环执行次数为i,则循环结束时2i-1=n,i为logn,所以总时间代价为nlogn。

sum=0;

for (k=1;k<=n;k=k*2)    //Do log n times;

for (j=1;j<=k;j++)       // Do k times;

{

sum++;

}

外层循环同上,依旧是logn次,但内层循环次数为k,每次都随着外层循环变量k值的变化而变化。设外层循环执行第i次,则k=2i-1,即内层执行2i-1次。外层执行一次内层执行20次,外层执行两次内层21,一共执行20+21次,以此类推总的执行次数为 ,最终可化简为O(n)。

关于大O法可参考:https://blog.csdn.net/yuhk231/article/details/60099774

大O法时间复杂度计算的更多相关文章

  1. 大M法(Big M Method)

    前面一篇讲的单纯形方法的实现,但程序输入的必须是已经有初始基本可行解的单纯形表. 但实际问题中很少有现成的基本可行解,比如以下这个问题: min f(x) = –3x1 +x2 + x3 s.t. x ...

  2. 自适应阈值二值化之最大类间方差法(大津法,OTSU)

    最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间 ...

  3. 大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  4. 自适应阈值分割—大津法(OTSU算法)C++实现

    大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命名的.大津法按照图像上灰度值的分布,将图像分成背景和前景两部分看待,前景就是我们要按照阈值分割出来的部分.背景和 ...

  5. OSTU大津法图像分割

    OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...

  6. 服务端、实时、大数据、AI计算

    服务端.实时.大数据.AI计算,各种各样的计算,计算机本质是什么,计算机的本质是 利用compute的计算速度为人提供更优的计算结果. 所以实时也好,准实时.离线.AI本质上是两个维度,实时准实时强调 ...

  7. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...

  8. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  9. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

随机推荐

  1. HTML_标签

    <!--HTML:1.概念:最基础的网页开发语言Hyper Text Markup Language 超文本标记语言超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. ...

  2. 简单的GridView分业,后台不需要写

    1前台代码: <asp:GridView ID="GridView1" runat="server" AllowPaging="True&quo ...

  3. lvs负载均衡连接

    http://blog.csdn.net/zwz1984/article/details/45194377 http://blog.csdn.net/zwz1984/article/details/4 ...

  4. 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间(转)

    原文:https://blog.csdn.net/sxf_123456/article/details/81582964 from datetime import datetime,timedelta ...

  5. Android开发 自定义View_白色圆型涟漪动画View

    代码: import android.animation.ValueAnimator; import android.content.Context; import android.graphics. ...

  6. thinkphp 用户注册功能

    UserActiion.class.php页面: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  7. 【JZOJ6350】考试(test)

    description analysis 对于\(n=0\)的点,直接模拟就好了 状压\(DP\),设\(f[i][j][S]\)表示到第\(i\)题.连续\(GG\)了\(j\)题.喝的饮料集合为\ ...

  8. day20 装饰器补充

    Python之路,Day8 = Python基础8 装饰器from functools imoort wraps # 保留原函数所有信息,比如:用__doc__查看注释的时候,显示原来的注释def f ...

  9. 「题解」:$Game$

    问题 B: $Game$ 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 对于最初加入的每一个元素开桶记录出现次数. 然后记录一个前p个元素最大值. 先由先手玩家取走一 ...

  10. 修改sql server表字段的字符串

    网站标题被注入黑链接,使用sql脚本update修改字段内的字符串截取UPDATE [qds0460132_db].[dbo].[Blood_News]   SET [Blood_Name] = SU ...