在计算中如何指定实数?


27

这可能是一个基本问题,但是我一直在阅读和尝试理解有关诸如纳什均衡计算和线性简并性测试之类的论文,并且不确定如何将实数指定为输入。例如,当说LDT具有一定的多项式下限时,将实数作为输入时如何指定实数?


1
您可能会在此处找到感兴趣的讨论:en.wikipedia.org/wiki/Computable_number
Joseph Malkevitch 2010年

有人应将这些论文放到免费的可下载的电子书中。
Dilawar

Answers:


34

我不同意卡夫的接受答案。对于线性编程和纳什均衡,浮点数是可以接受的。但是浮点数和计算几何结构混合得很糟:舍入误差使算法的组合假设无效,经常导致它们崩溃。更具体地说,许多计算几何算法都依赖于原始测试,该测试检查给定值是正,负还是零。如果该值非常接近零,并且浮点舍入导致其符号错误,则可能会发生不良情况。

取而代之的是,通常假定输入具有整数坐标,并且经常将中间结果准确地表示为具有足够高精度以避免溢出的有理数或代数。这些数字的浮点近似值可用于加快计算速度,但是仅在可以保证数字距离零足够远的情况下,符号测试才能给出正确的答案。

在大多数有关计算几何学的理论算法论文中,通过假设输入是精确的实数并且假定基元是输入值中低次多项式的根的符号的精确检验来回避此问题。但是,如果您要实现几何算法,那么这一切将变得非常重要。


我很喜欢Kaveh的回答部分,他建议存在替代的计算模型,因为这似乎与我在看的论文中所读内容一致。就是说,我真的不知道答案...我暂时还没有接受卡夫的答案。我实际上已经怀疑代数数字可能与此有关。无论如何,感谢您抽出宝贵的时间来思考我的问题...在接受答案之前,我会仔细考虑并进一步阅读。
菲利普·怀特2010年

我没有说过它是CG的良好模型,我的观点是,即使作者说输入是实数,也不是真正的数。我同意您的看法,我不应该将CG包括在内。我读过很少的CG论文,BSS模型在理论CG论文中是否建立得很好?
卡夫

1
请原谅我的无知,但是BSS代表什么呢?
菲利普·怀特2010年

1
BSS模型是一种理论模型,它假定可以使用任意实数。CG所做的工作涉及通常限于代数数的模型的实际实现。此外,CG的实现还远非每次操作的单位成本。所以他们不是同一回事。参见例如LEDA实数模型,citeseerx.ist.psu.edu / viewdoc /…
David Eppstein

10
STsSs>tTt


8

这不是您问题的直接答案,更不是对Raphael的回应。最近已经有很多工作使用协导来指定实数计算。以下是有关该主题的一些文章。

它们几乎不能涵盖实数计算的全部范围,但是在解决各种问题方面正在取得进展。


1
R

好点子。我不确定协同方法的局限性是什么。该方法尚处于起步阶段。
戴夫·克拉克

7

Blum,Cucker,Shub和Smale考虑了实数计算的计算复杂性。这是这本书的部分描述:

古典计算理论起源于Goedel,Turing,Church和Kleene的工作,并且是理论计算机科学的非常成功的框架。但是,本书的论点是,它为现代科学计算提供了不足的基础,因为其中大多数算法都是实数算法。本书的目的是开发一种形式化的计算理论,该理论整合了经典理论的主要主题,并且更直接地适用于数学,数值分析和科学计算中的问题。在此过程中,作者考虑了以下基本问题:Mandelbrot集是否可判定?对于简单的二次映射,Julia集是否为暂停集?牛顿的真正复杂性是什么?的方法?是否有一种算法可以按逐步的步数确定背包问题?Hilbert Nullstellensatz是否难治?确定四次多项式的实零的难点是难道的吗?线性编程在实数上是否易于处理?

您可以在ACM SIGACT新闻上找到这本书的评论。


这本书看起来很有趣,谢谢。
菲利普·怀特2010年

不客气
MS Dousti

5
值得注意的是,基于实数的BSS计算模型是有争议的,其原因与David Eppstein在上面的评论中提到的原因非常相似。例如:对于任意实数x和y ,计算x <y是否需要一个时间步的BSS公理。相比之下,诸如第二类有效性(TTE)之类的方法定义了将实数作为输入逼近并输出实数函数的可计算近似的机器。经过的时间越长,输入和输出的近似值就越好。这种方法对我来说更切合实际。
亚伦·斯特林

@Aaron Sterling:您知道第二类有效性的很好参考吗?
Joshua Grochow

3
@Joshua Grochow:对不起,我没有早点到这。Kaveh所链接的书是TTE的“尼尔森和庄”。但是,它的符号太多了,以至于对普通读者来说都是不可思议的。我建议改用以下Vasco Brattka的教程幻灯片:cca-net.de/vasco/cca/tutorial.pdf
Aaron Sterling

7

根据评论进行编辑/更正

当作者在线性编程,纳什均衡计算中谈论实数输入时,...在大多数论文中(不是关于实数的计算/复杂性的论文),它们实际上并不是实数。它们是有理数和由于它们的操纵而产生的数(代数数)。因此,您可以将它们视为由有限字符串表示。

另一方面,如果本文是关于分析的可计算性和复杂性的,则他们没有使用通常的计算模型,并且存在各种不兼容的实数计算/复杂性模型。

如果本文未指定实数计算模型,则可以安全地假定这是第一种情况,即它们只是有理数。

计算几何是不同的。在CG的大多数论文中,如果作者没有指定什么模型,关于该模型的讨论是关于算法的正确性和复杂性,则可以假定它是BSS(又名real-RAM)模型。

该模型不切实际,因此实现也不简单。(这是CCA中的某些人偏爱Ko-Friedman / TTE / Domain理论模型的原因之一,但是这些模型的问题在于它们在实践中不如浮点计算那么快。) BSS模型中的算法不一定会转换为所实现算法的正确性。

Weihrauch的包含了不同模型之间的比较(第9.8节)。它只有三页,值得一读。

(还有第三种方法,可能更适合CG,您可能需要看一下本文:

叶剑,“ 根据EGC的真实计算理论

其中EGC是精确几何计算。)


我认为我主要感兴趣的论文指定了一个模型,因为该模型包含如下句子:“我们现在正式定义了我们的计算模型。” 该论文被称为“可满足性问题的下界”,并且似乎在讨论线性决策树和查询多项式。所以,我认为这就是我一直在寻找的答案...谢谢。我将重新阅读该论文,看看是否可以理解。
菲利普·怀特

2
我不同意。这是计算几何的错误模型。请参阅下面的详细答案。
David Eppstein

1
@Kaveh:我想你应该说它们是有理数,而不是浮点数。精确的有理数很容易用有限的字符串表示,并且在许多应用程序中(例如,与线性编程有关的那些),如果您的输入是有理数,则中间结果也将是有理数。(当然,正如David Eppstein所指出的那样,相对于中间结果通常是不合理的,
comp。geom

@Jukka:您是对的,我将用有理数代替浮点数。
卡夫

5
不。当我写“实数”时,我的意思是“实数”,是指真正的实数,实际上是实数。真。特别是,在@Philip所讨论的论文中,我必须假设算法适用于任意实际输入,以便可以应用非标准分析的结果。
杰夫斯(Jeffε)2010年

3

通常,它们不是,也不能。我们的计算模型只能处理可数的输入(以及输出和功能)。特别是,任何输入都必须是有限的,但并非所有实数都具有有限的表示形式。

我猜,您可以假设某种预言会在请求时产生某个实数的下一位数字(例如流)。否则,您将不得不使用(任意精确的)近似值。


如果这是真的,那么LDT如何处理实数?我读了一些有关“ r线性决策树”的文章,但并没有真正理解他们在论文“线性可满足性问题的下界”中所说的话。
菲利普·怀特2010年

我敢打赌他们要么不能使用,要么不使用图灵机(或同等的设备)。不像我这样严格/概括的其他答案应该对此有所启发。
拉斐尔2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.