首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阶乘运行时间

阶乘运行时间
EN

Stack Overflow用户
提问于 2013-05-17 03:15:32
回答 3查看 2.2K关注 0票数 3

在分析我写的一些代码时,我得出了以下关于其运行时间的递归公式:

T(n) = n*T(n-1) + n!+ O(n^2)。

最初,我假设O((n+1)!) = O(n!),因此我像这样解了方程-

T(n) = n!+ O(n!) + O(n^3) = O(n!)

推理,即使每一次递归都会产生另一个n!(不是(n-1)!,(n-2)!等),它仍然只会达到n*n!= (n+1)!= O(n!)。最后一个参数是平方和。

但是,经过进一步的思考,我不确定我的假设O((n+1)!) = O(n!)是正确的,事实上,我很确定它不是。

如果我认为我做了一个错误的假设是正确的,我真的不确定如何实际解决上面的递归方程,因为没有阶乘和的公式……

任何指导都将不胜感激。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-05-17 03:29:09

由于您关注的是运行时,我假设O(n^2)就是该术语上的操作数量。在此假设下,n!可以在O(n) time (1*2*3*...*n)中计算。因此,与O(n^2)术语相比,它可以被删除。然后,T(n-1)的计算时间大约为O((n-1)^2),大致为O(n^2)。把所有这些放在一起,你就有了可以运行的东西

代码语言:javascript
复制
O(n^2) + O(n) + O(n^2)

从而产生O(n^2)算法。

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 04:38:51

我想通了。

T(n) = n*T(n-1) + n!+ O(n^2) = n*T(n-1) + n!= n*( (n-1)T(n-2) + (n-1)!)+ n!= n(n-1)T(n-2) + 2n!= ... = n!= n*n!= O(n*n!)

票数 0
EN

Stack Overflow用户

发布于 2021-08-01 02:51:22

根据我对源代码的理解:

https://github.com/python/cpython/blob/main/Modules/mathmodule.c#L1982-L2032

它必须至多是O(n),如果不是更快的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16595625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档