更多的阶乘型时间复杂度O(n!)的分析可以查看下文中的:如何理解阶乘型算法复杂度O(n!)?
如何理解斐波那契数列的时间复杂度O(2^N)?O(2^N)Math.pow(base, ex),2个递归所以base是2 。N的话是因为N->∞,但其实真正是O(2^(N-1)) 。/** * @param {number} N * @return {number} */var fib = function (N) {/*** 解法1: 递归* 性能:88ms 34.2MB*/console.log('foo');if (N <= 1) return N;return fib(N - 1) + fib(N - 2)};N打印foo数O(2^N)11O(2^0)22^1 + 1O(2^1)32^2 + 1O(2^2 )42^3 + 1O(2^3 )52^4 + 1O(2^4 )
通过上表我们分析得到: 如果包含1的话,严格来讲时间复杂度是O(2^(N-1)) 。如果从N>1开始计算,时间复杂度确实是O(2^N) 。斐波那契数列非常长,N->∞,因此可以将斐波那契数列的时间复杂度直接看做是O(2^N) 。
如何理解阶乘型时间复杂度O(n!)?O(N!)我们把上面的代码改造一下,增加一个count用来统计O(n!) 。
let count = 0;function nFacRuntimeFunc(n) {for(let i=0; i<n; i++) {count++;nFacRuntimeFunc(n-1);}}阶乘型O(n!)的时间复杂度按照(n!+(n-1)!+(n-2)!+ ··· + 1) +((n-1)!+(n-2)!+ ··· + 1) 的方式去计算 。注意哦,这里是多个阶乘的和 。不仅仅是n * (n-1) * (n-2) * (n-3)···1 。上述示例中的count即为复杂度的值 。
n多次n! + (n-1)! + ··· + 1!countO(n!)111O(1)2(2!+1!) +(1!)4O(4)3(3!+(2!+1!)+1!)+((2!+1!)+1!)+(1!)15O(15)4…64O(64)5…325O(325)6…1956O(1956)7…13699O(13699)8…109600O(109600)9…986409O(986409)10…9864100O(9864100)
快看看这个表格吧,n为10的时候O(n!)达到了O(9864100),接近了O(一千万) 。这种算法的性能真的是糟糕到极致了 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 狮子座本周运势综合解析 狮子座今日运势
- 解析气对人体的几大作用
- 蚂蚁庄园金銮殿是故宫的哪个宫殿 1月7日答案解析
- 中医解析气功减肥原理
- 免备案服务器推荐 免费备案域名解析
- 网站域名解析ip方法 网站dns查询方式
- 解析太极拳实战经验
- ip域名解析查询 代理域名备案服务
- 各类游泳动作的要点解析
- 国内DNS测速网站推荐 dns测速在线解析