请教一道搜狗笔试题——计算算法的复杂度
时间:2011-09-18
来源:互联网
有一道分析算法复杂度的问题,我一直都不咋会分析算法复杂度,看到就懵了,没做。
回来求教一下版上的大虾,求指教算法复杂度的计算方式,尤其是递归算法!!!
题目:
分析给定代码的时间复杂度。
C/C++ code
void foo(); void bar(int k){ if(k>0){ do{ k=k/2; bar(k); }while(k) }else{ foo(); } } void xxx(int n){ for(int i=1;i<n;i+=i){ bar(i); } }
分析xxx函数的复杂度是多少。
作者: qianshe223 发布时间: 2011-09-18
作者: JayYounger 发布时间: 2011-09-18
xxx 的执行的次数就是每个 bar 的次数相加,即:
1 + lg(2) + lg(3) + lg(4) + ... + lg(N)
= 1 + lg(2 * 3 * 4 * .. * N)
= 1 + lg(N!)
因此 xxx 的复杂度(忽略常数项)是 lg(N!)
没学过《算法》,不知道是不是这样分析是否正确?
作者: bao110908 发布时间: 2011-09-18
作者: yexiongMYBH 发布时间: 2011-09-18
bar 的循环次数是 lgN(lg 表示以 2 为底的对数)
xxx 的执行的次数就是每个 bar 的次数相加,即:
1 + lg(2) + lg(3) + lg(4) + ... + lg(N)
= 1 + lg(2 * 3 * 4 * .. * N)
= 1 + lg(N!)
因此 xxx 的复杂度(忽略常数项)是 lg(N!)
没学过《算法》,不知道是不是这样分……
谢谢火龙果的解析,照这样的话,那这个小算法的复杂度十分高啊。
作者: qianshe223 发布时间: 2011-09-18
楼主可以参考下面的研究下:
http://blog.csdn.net/popkiler/article/details/2110144
作者: DriftKing 发布时间: 2011-09-18
引用 2 楼 bao110908 的回复:
bar 的循环次数是 lgN(lg 表示以 2 为底的对数)
xxx 的执行的次数就是每个 bar 的次数相加,即:
1 + lg(2) + lg(3) + lg(4) + ... + lg(N)
= 1 + lg(2 * 3 * 4 * .. * N)
= 1 + lg(N!)
因此 xxx 的复杂度(忽略常数项)是 lg(N……
这个效率比 N(lgN) 稍微小一些,应该算是很低的了。
作者: bao110908 发布时间: 2011-09-18
http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions
O(N*lg(N)) 算法效率的算法有:快速傅立叶变换;堆排序、快速排序、归并排序等排序算法。
作者: bao110908 发布时间: 2011-09-18
里面 k=k/2;时间复杂度也是log(n)。但是还有递归调用,k的值只有2/k 也就是log(n/2),log(n/2) = long(n) - 1;
也就是说bar的时间复杂度是:(1 + 2 + 3 + .. + log(n)) + (1 + 2 + 3 + ... + (log(n) - 1)) + (1 + 2 + 3 + ...+ (log(n) - 2)) + ... + 1;
上面的计算一下就是:(1 + log(n))(log(n)/2 + (1 + log(n))(log(n)/2 - 1 + (1 + log(n))(log(n)/2 - 2 + ... + 2 + 1;
也就是:((1 + log(n))(log(n)/2 + 1)(1 + log(n))(log(n)/4;
化简一下时间复杂度就是O( log(n)^4)
在加上外面一层的log(n),所以总的时间复杂度应该是O(log(n)^5).
这只是我自己的想法,不知对不对,希望不要误导别人了。
作者: daijope 发布时间: 2011-09-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28