大O法时间复杂度计算
困惑的点——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法时间复杂度计算的更多相关文章
- 大M法(Big M Method)
前面一篇讲的单纯形方法的实现,但程序输入的必须是已经有初始基本可行解的单纯形表. 但实际问题中很少有现成的基本可行解,比如以下这个问题: min f(x) = –3x1 +x2 + x3 s.t. x ...
- 自适应阈值二值化之最大类间方差法(大津法,OTSU)
最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间 ...
- 大津法---OTSU算法
简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...
- 自适应阈值分割—大津法(OTSU算法)C++实现
大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命名的.大津法按照图像上灰度值的分布,将图像分成背景和前景两部分看待,前景就是我们要按照阈值分割出来的部分.背景和 ...
- OSTU大津法图像分割
OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...
- 服务端、实时、大数据、AI计算
服务端.实时.大数据.AI计算,各种各样的计算,计算机本质是什么,计算机的本质是 利用compute的计算速度为人提供更优的计算结果. 所以实时也好,准实时.离线.AI本质上是两个维度,实时准实时强调 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...
- Java基础-时间复杂度计算方式
Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...
- python学习--大数据与科学计算第三方库简介
大数据与科学计算 库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...
随机推荐
- js用document.getElementById时要注意!
<!DOCTYPE html> <html lang="en"> <head> <script src="http://code ...
- 《转》python数据类型
转自 http://www.cnblogs.com/BeginMan/archive/2013/06/08/3125876.html 一.标准类型函数 cmp():比较大小 str():转换为字符串 ...
- iOS开发之系统通讯录
@iOS调用操作通讯录所用的库文件 AddressBook.framewor ...
- Lucene TFIDFSimilarity评分公式详解
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zteny/article/details/ ...
- 网页设计师神器,快速生成网站配色、字型等风格的工具——Stylify Me
在设计网页时,最重要的一项便是网页的配色,颜色的使用在网页制作中起着非常关键的作用,不同的网站有着自己不同的风格,也有着自己不同的颜色.今天给大家介绍一个在线生成网站配色的工具——Stylify Me ...
- TCP/IP协议,,OSI的七层参考模型,HTTP请求响应机制
一.TCP/IP协议 TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是In ...
- vc枚举本机端口信息
关于查看本机端口信息,可能大多数人都知道在cmd下的netstat 命令,殊不知该命令在底层也是调用相关api来实现的,相关函数有:GetTcpTableGetExtendedTcpTableGetU ...
- Android开发 LiveData与MutableLiveData详解
前言 LiveData与ViewMode是经常搭配在一起使用的,但是为了不太混乱,我还是拆分开来说明,此篇博客只讲解 LiveData 与 MutableLiveData的概念与使用方式(但是会涉及到 ...
- [JZOJ3233] 照片
题目 题目大意 有一个\(01\)序列.给你一堆区间,每个区间中有且仅有一个\(1\)点. 问最多的\(1\)点个数. 思考历程 感觉这题特别经典,似乎在哪里见过,又好像没有见过. 一开始朝贪心方面想 ...
- C++如何判断某一文件是否存在
函数名: access 功 能: 确定文件的访问权限 用 法: int access(const char *filename, int amode); 程序例: #include <stdio ...