我想知道是否有可能“编写程序或算法”来查找任何给定程序的时间复杂度作为输入。
输入任何程序(P)[任何语言或特定语言]
输出该程序的时间复杂度(P)。
以前有没有尝试过编写这样的程序? 有没有可用于此目的的算法?
如果是,请提供必要的链接,参考资料或任何可能的指导。
答案 0 :(得分:29)
没有。这是不可能的。这是halting problem.
的一种形式答案 1 :(得分:4)
证明任意算法的复杂性是不可能的,但原则上你可以估计它:
这种方法存在许多陷阱
除非您使用巨大的值,否则有很多方法可以愚弄这种方法 n。例如,除非使用天文,否则此算法看起来像O(1) n的值
sleep for 10 days
run an O(n log(n)) sorting algorithm
其他SO用户可以拿出更多。但在某些情况下,例如当您对算法进行复杂性分析并希望根据经验进行验证时,这仍然是一种有用的方法。
答案 2 :(得分:0)
我们不能在算法本身中引入更多变量,并且以与我们手动操作相同的方式找到复杂性。 例如,我们可以在插入排序中有一个变量,例如n = 0,它保留算法的整个循环部分的轨迹,然后给出答案为O(n ^ 2)
答案 3 :(得分:-3)
嗯,我认为你通过假设所有案例来做到这一点。 1:首先制作一个可以提取每条指令的模块 2:建立一个与程序指令匹配的指令数据库。 3:通过获取您在数据库中设置的适当时间复杂度来计算复杂性,这就是全部。