【发布时间】:2009-09-22 16:32:25
【问题描述】:
我想知道是否可以“编写一个程序或算法”找出任何给定程序的时间复杂度作为输入。
输入:任何程序 (P) [以任何语言或特定语言]
输出:该程序的时间复杂度 (P)。
之前有没有尝试过编写这样的程序? 是否有任何算法可用于此目的?
如果是这样,请提供必要的链接、参考资料或任何可能的指导。
【问题讨论】:
我想知道是否可以“编写一个程序或算法”找出任何给定程序的时间复杂度作为输入。
输入:任何程序 (P) [以任何语言或特定语言]
输出:该程序的时间复杂度 (P)。
之前有没有尝试过编写这样的程序? 是否有任何算法可用于此目的?
如果是这样,请提供必要的链接、参考资料或任何可能的指导。
【问题讨论】:
没有。这是不可能的。这是halting problem. 的一种形式
【讨论】:
证明任意算法的复杂性是不可能的,但原则上你可以估计它:
这种方法有很多陷阱
除非您使用巨大的值,否则这种方法可以通过多种方式被愚弄 n.例如,这个算法看起来像 O(1),除非你使用 astronomical n的值
sleep for 10 days
run an O(n log(n)) sorting algorithm
其他 SO 用户可以想出更多。但在某些情况下,例如当您对算法进行复杂性分析并希望通过经验验证它时,这仍然是一种有用的方法。
【讨论】:
我们不能在算法本身中引入更多变量,并以与我们手动执行相同的方式找到复杂性。 例如,我们可以在插入排序中有一个变量,比如 n=0,它会跟踪算法的整个循环部分,然后给出答案为 O(n^2)
【讨论】:
好吧,我认为您可以通过假设所有情况来做到这一点。 1:喜欢先做一个模块,可以提取每条指令 2:做一个指令数据库,与程序指令相匹配。 3:通过获取您在数据库中设置的适当时间复杂度来计算复杂度,仅此而已。
【讨论】: