每种算法的最佳时间复杂度要求?

时间:2015-08-19 17:37:08

标签: algorithm programming-languages time-complexity complexity-theory turing-complete

算法的时间复杂度可能不同于编程语言到实现它的编程语言,因为某些事情不可能用一种语言而不是另一种语言完成。图灵完整性也没有说明所述语言的时间复杂性。

我的问题是,编程语言能够以任何语言以最佳时间复杂度解决每个算法的要求是什么?是图灵完备还是添加了在恒定时间内检查/编辑数据结构的可能性就足够了吗?

1 个答案:

答案 0 :(得分:2)

我认为,建立一种可以最佳地解决每个计算问题的单一编程语言或计算模型是不可能的。

理论计算机科学的结果称为time hierarchy theorem,它表示对于许多函数f(n),有许多问题可以在时间O(f(n))上解决。图灵机但不是时间O(f(n)/ log n)。结果的证明基本上是这样的:考虑问题"图灵机M是否拒绝f(| w |)步骤内的输入w?"对于某些k,你可以证明你可以在时间O(f(n) k )中确定性地解决这个问题,只需在f(| w |)步骤中模拟M on w并看看会发生什么。但是,如果你解决了问题,那就更快了#34;比起这个,你可以使用类似于暂停问题的参数来制作一个程序,询问 it 是否会在f(| w |)步骤中拒绝其输入,然后执行相反的操作它应该这样做。

我相信,对于任何可行的计算模型,你都可以找到时间层次定理的模拟。例如,假设您有一台X型计算机,并考虑问题" X在f(| w |)步骤中接受w?" X型计算机可以解决这个问题,但它不能太快或者导致矛盾。因此,我们可能会争辩说有一些函数a(x)和b(x),这样X型计算机可以在时间O(a(x))中解决这个问题,但不能解决时间O(a(x)/ b(X))。所以现在去定义一个计算模型X'这基本上是X,但其中操作"解决问题' X在f(| w |)步骤中接受w?'"是一个需要一步的内置操作。现在,这个计算模型X'我可以继续迭代这种结构来建立一个计算模型X'这可以比X'更快地解决某些问题,X'计算模型X'''这可以比X'等等更快地解决某些问题。

因此,我相信你无法找到一个最好的&#34;计算模型,因为任何计算模型都可以用来对自己定义一个计算模型,它比某些特定输入上的计算模型更快。 (这与不完备性定理有一定关系 - 任何声音和完整的正式系统都会有一些它无法证明的东西,如果你通过在声明中添加一个轴来解决这个问题,那么新系统会有一些东西< em> it 无法证明,等等。)