如何评估算法性能-大O表示法

一、请问如何评估一个算法的性能?什么是大O表示法?

答:评估算法性能,主要评估问题的输入规模n与元素访问次数f(n)的次数。

大O符号,忽略非主体部分,如常数项、低阶项。O(g(n)),g(n)表示渐进上界。

二、请说出以下程序的时间复杂度?

for(int i=1;i<=n;i++){k=k+5;}      O(n)线性复杂度

for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)  k=k+i+j;}      O(n^2)平方复杂度

for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++)  k=k+i+j;}      1+2+3+..+n= n(n+1)/2    O(n^2)   平方复杂度

for(int i=1;i<=n;i++){ for(int k=1;k<=n;k++)  { for(int k=1;k<=n;k++)  k=k+i+j;}  }      O(n^3)   立方复杂度

int count=1; while(count<n){count=count*2;}    2^x=N=O(lg2N)   对数复杂度

三、这世界存在常数阶的算法吗?

答:常数阶的算法就是无论n怎么增长,消耗的时间都相同。即O(1),比如数学小王子对1到100的计算?

1+2+3+4+...+100=(1+100)*50

三、请说一下常见函数的复杂度计算?

答:算法复杂度/1s可处理的数据

lgn/2^10的八次方; n/100000000;n^2/10000;n^3/500;2^n/27;

假设n的规模为10的八次方,复杂度/所花时间

lgn/27/10^8s; n/1s;n^2/100000000s;n^3/10^16s;2^n/巨大的数字s;

四、请你根据大O表示法,对算法性能进行排序?

答:O(1)常量算法>O(sqrt(n))>O(n)线性算法>O(lg(n))二分查找>O(nlg(n))二分查找,归并,快排>O(n^2)冒泡排序,直接插入排序,选择排序>O(n^3)>O(2^n)

发布了74 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41629684/article/details/104159125
今日推荐