众所周知,算法的计算复杂度的定义几乎没有争议,但是实数或实数计算模型的定义却不在这种情况下。我们在《可计算分析》一书中了解了Blum和Smales的模型和模型。看起来,可计算分析中的模型与经典模型是一致的,但是实物的计算复杂性的定义无法移植到经典模型中。
如何判断实数计算复杂性的定义是自然的还是合适的?
以及如何将实数计算复杂性的定义移植到经典模型中?
众所周知,算法的计算复杂度的定义几乎没有争议,但是实数或实数计算模型的定义却不在这种情况下。我们在《可计算分析》一书中了解了Blum和Smales的模型和模型。看起来,可计算分析中的模型与经典模型是一致的,但是实物的计算复杂性的定义无法移植到经典模型中。
如何判断实数计算复杂性的定义是自然的还是合适的?
以及如何将实数计算复杂性的定义移植到经典模型中?
Answers:
我不确定这是什么问题,但是我可以尝试说一下以消除可能的误解。
首先,如果我们谈论的是一个地图的复杂性,它使没有意义的问“什么是一个很好的代表性√?”相反,您必须问“对于f的所有输入,什么是良好的表示形式?”。将情况与离散数学中的一种更简单的情况进行比较:当您讨论将图形作为输入的算法时,您不会询问“我们应该将Petersen图表示为邻接表还是二进制矩阵?”但是您会自动想到一个统一表示,该表示将适用于所有图。
另一个警告。通过更改输入数据的表示形式,我们总是可以使任何问题(包括不可计算的问题)都是可微计算的:为了使可计算,将A的元素表示为对(a ,f (a ))。然后,您可以通过第二个投影“计算” f。这表明我们需要明确的标准来表示数据。
我已经写过几次有关表示元素的方法的文章。答案取决于您要捕获的R的结构。例如,如果尝试不捕获任何结构,则可以用空列表表示所有实数。表示R的条件的合理列表是:
有一些古老的定理(请参阅本白皮书的介绍以获取参考)可以解释为什么这些条件是正确的。这些定理还表明,实数的任何两个此类表示都是可计算的同构,也就是说,我们可以使用程序在它们之间进行转换。这为正确性设置了一些标准,从而排除了错误的想法。
例如,我听到有人说“有理数可以用有限的信息表示,所以让我们将它用于有理数,而无理数必须用无穷的信息表示”。这种事情是行不通的,因为它打破了上面的第四个条件(考虑非理性数字的限制-您如何判断它正在收敛为有理数?)。
上述条件消除的另一个示例是Blum-Shub-Smale模型,因为您无法在其中计算序列的极限。最好说,BSS模型适用于实数的离散有序子字段(由存在的任何参数生成),而不适用于实数本身。
在实数的正确表示中,有些实比其他更有效,尽管由于实数是无限的对象,所以这是一个很难讨论的话题。马蒂亚斯·施罗德(MatthiasSchröder)指出,对于一种合理的复杂性理论,必须注意表示的拓扑性质。
最后,假设我们具有的良好表示,我们应该如何测量映射的复杂度?因为由一个函数或一个无限的信息流或诸如此类表示,所以我们应该使用复杂性更高的概念之一。哪一个可能取决于您使用的表示形式。
BSS模型也是一种合理的电路复杂性模型,我们在其中计算算术运算。请记住,此模型不是关于实数,而是其他内容。
可能要探索的另一个模型是可行RAM模型。这是用于实数计算,可行的RAM的修改后的实数RAM模型,或使用离散和实数值算术运算的修改后的RAM模型。该模型允许实际和离散操作,并且Turing模型可以与其互换。可行RAM模型具有由不确定性定义的精度,这意味着仅允许对实数进行比较,直到不定的不确定性1 /(k + 1)。这允许近似计算。另外,正如Vasco Brattkaa和Peter Hertlingb在可行的实际随机存取机器中所陈述的那样,图灵的模型与可行的真实RAM的模型相关。图灵机上所有可计算的时间为函数可以在时间上在RAM上计算,并且在相反的情况下,图灵机需要一些开销来计算函数(如果实际RAM在中计算函数,则TM在计算函数)。正如指出的拓扑考虑是有用的,人们不知道是否存在针对该计算模型开发的任何拓扑上下文以允许进行实际计算-这具有不确定性在精度上。