首页 > 编程知识 正文

单纯形法解题算法,顺序查找的时间复杂度

时间:2023-05-03 11:06:27 阅读:32162 作者:3726

一、时间复杂度的概念价值:对算法进行特别具体的精细分析是好的,但在实践中的实际价值有限。 关于算法的时间性质和空间性质,最重要的是其数量级和趋势,因此一般用“完成基本运算的时间总和的数量级”来记述算法的时间复杂度即可。

要获得算法的时间复杂度,最直观的想法是运行一次算法程序,就能自然获得。 但实践中往往受限于测试环境、数据规模等因素,直接测试算法难以实现或误差较大。 另外,理论上不需要对每个算法进行测试,只需要找到评价指标,得到执行算法所需时间的基本趋势即可。

二.时间复杂度趋势对比图:

三、如何计算时间复杂度:

1、分析算法时,有几种想法。

算法完成工作所需的基本操作,也就是最佳时间的复杂性是多少

算法完成工作所需的基本操作,也就是最坏的时间复杂度是多少

算法完成工作平均需要多少基本操作,即平均时间的复杂性

2、时间复杂度的几个基本计算规则:

求解算法的复杂性一般有以下几个步骤。

找出算法中的基本语句,算法中执行次数最多的语句是基本语句,通常是最内层循环的循环体; 只要计算基本语句的执行次数顺序,计算基本语句的执行次数顺序,就可以简化算法分析,将注意力集中在最重要的点——增长率上。 用大表示算法的时间性能:将基本语句的执行次数的命令放入大符号中。 其中,大O表示法通常有三条规则。

用常数1替换执行时间中的所有加法常数。 也就是说,一般来说,只要算法中不存在循环语句、递归语句,即使有几千行代码,其时间复杂度也是(1); 只保持时间函数的最高一项; 在存在最高位项情况下,省略最高位项之前的系数; 3、一般情况下,一个算法需要的时间与代码语句的执行次数成正比,算法的执行语句越多,消耗的时间也越多。 一个程序的时间复杂度最后计算应该是多项式,此时在判断一个算法的效率时,只关注操作数的最高次项即可,其他次项和常数项可以忽略; 另外,最高次项的系数也可以忽略。 因为系数只会改变函数的陡峭度,不会改变函数的整体倾向。

4、在没有特别说明的情况下,我们分析的算法的时间复杂度都是指最坏的时间复杂度

四、各订单时间复杂度实例:常数订单o(1) int i=1; int j=2; int k=1 2;

算法的时间复杂度是常数级,而不随问题的规模n而变化。

对数阶数o(logn )常见的有 二分查找算法

int i=1,n=100; while(I=n ) { i=i * 2; }循环以2的倍数接近n。 也就是说,当2^x=n小于等于n时,执行整个循环,即x次,获得x=logn。 也就是说,由于上述循环在执行logn次之后结束,所以上述代码的时间复杂度为o[logn]。

线性阶数o(n ) : int j=0; for(intI=0; i n; I () j=I; j; )线性对数阶数o(nlogn ):for ) intm=1; 米n; m(intI=1; while(I=n ) { i=i * 2; }在线性循环中加入对数级循环。

平方阶数o(n ):int k=0; for(intI=0; i n; I ) for(intj=0; j n; j () k; }指数阶o(2^n ):intfib(intn ) if ) n==0) return 0; ELSEif(n==1) return 1; 返回(fib (n-1 ) fib (n-2 ) ) 00000007; )斐波那契数列是典型的例子:

五.根据时间复杂度推测算法

一般在leetcode上,10^4、10^5次方的数据规模应该对应线性时间复杂度的算法。

参考:

原文链接: 3359 blog.csdn.net/weixin _ 43716712/article/details/119923514

(4条消息) LeetCode0)学习算法所需的知识:时间复杂性和空间复杂性计算_程序新视野-CSDN博客

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。