一尘不染

以编程方式获得代码的Big-O效率

algorithm

我想知道是否有任何自动方法(至少大致确定)给定功能的Big-O时间复杂度?

如果我用O(n)函数相对于O(nlg n)函数作图,我想我可以从视觉上确定哪个是哪个。我认为必须有一些启发式解决方案,以使其能够自动完成。

有任何想法吗?

编辑: 我很高兴找到一个半自动化的解决方案,只是想知道是否有某种方式可以避免进行完全手动的分析。


阅读 182

收藏
2020-07-28

共1个答案

一尘不染

听起来您要的是停止问题的扩展。我不相信这样的事情是不可能的,即使在理论上也是如此。

只需回答“此代码行是否会运行?”这个问题即可。在一般情况下,即使不是没有可能,也将非常困难。

编辑添加:尽管一般情况很难处理,请参见此处以获取部分解决方案:http
:
//research.microsoft.com/apps/pubs/default.aspx?id=104919

另外,有人说手工进行分析是唯一的选择,但我认为这不是观察它的正确方法。即使将人添加到系统/机器中,棘手的问题仍然是棘手的。经过进一步的思考,我认为99%的解决方案是可行的,甚至可以比人类更好甚至更好。

2020-07-28