计算机科学中的长期错误


26

这是我在cstheory堆栈上的第一个问题,因此,如果我以某种方式违反礼节,不要太粗鲁)

众所周知,即使在数学上,甚至著名的数学家,超级巨星和天才也在不时犯下严重的错误。例如,四色定理和费马定理都为我们提供了戏剧性的案例,说明即使最聪明的头脑也可以被欺骗。甚至可能需要数年的时间才能证明某些虚假证据的不正确性。

我的问题是-您能提供一些计算机科学中此类错误的杰出例子吗?我不知道,诸如“ X博士在1972年证明不可能在不到O(log n)的时间内做Y,但在1995年证明他实际上是错的”。


13
这不是一个杰出的例子:Karp,Vazirani和Vazirani(1990)的在线二分匹配算法在一个引理中有一个错误,该引理大约在15年后被发现。
Jagadish

2
@shabunc这些问题要求提供答案列表,因此community-wiki标签适用于此。
Suresh Venkat


2
如果询问错误是不礼貌的,您的问题本身就是不礼貌的,避免在标题中使用“错误”一词不是解决方案。
伊藤刚(Tsuyoshi Ito)

Answers:


28

计算几何学中一个臭名昭著的例子是Edelsbrunner,O'Rourke和Seidel出版的关于超平面布置的区域定理的不正确证明[FOCS 1983,SICOMP 1986]。该证明还出现在Edelsbrunner的1987年计算几何学教科书中。

区域定理:在的超平面的任何排列中,与任何超平面相交的所有像元的总复杂度为。nRdO(nd1)

区域定理是证明在建立超平面排列的标准递归增量算法在时间中运行的关键步骤。nRdO(nd)

在1990年,Raimund Seidel在其计算几何课上的一个学生在一个微妙的技术问题上遭到挑战后,发现已发表的证明不正确。同时,关于超平面/半空间/单形/半代数范围搜索的大量文献已经开发出来,所有文献都依赖于构造时间进行安排,而这又依赖于区域定理。(这些作者都没有注意到该错误。在受到挑战之前,Raimund已经详细教授了已发布的“证明”已有几年了。)O(nd)

幸运的是,Edelsbrunner,Seidel和Sharir几乎立即发现了区域定理的正确证明(并且简单!)[CS 1991年的新结果和新趋势,SICOMP 1993年]。


@Jɛff E,这是一个很好的例子,谢谢!
shabunc

4
你碰巧知道那个聪明的学生是谁吗?
Suresh Venkat

4
不,我不知道 雷蒙德(Raimund)在15年前的伯克利(Berkeley)告诉我这个故事。如果他告诉我学生的名字,我早已忘记了。(Raimund可能也是如此。)SICOMP 1993论文也没有提到学生。
2011年

10

Needham-Shroeder公钥密码术协议(一种5行协议)在其发布后的17年中被证明是不安全的。这是验证人员对加密协议进行形式分析的最喜欢的示例。


8
除非原始文件提供了该协议是安全的错误证明,否则这不会算作错误。表明拟议的密码系统不安全实际上是密码研究的一部分。
MCH

1
与MCH一样,加密协议的故事也有所不同。
shabunc

6
该协议有两个不同的概念:加密方案和通信协议。作者意识到加密方案可能受到攻击,但是他们讨论了通信协议的安全性并得出结论是安全的:“我们假设入侵者可以在所有通信路径中插入计算机,从而可以更改或复制计算机。部分消息,重播消息或散布虚假信息。虽然这似乎是一种极端的观点,但它是设计身份验证协议时唯一安全的观点。”而且,攻击属于中间人类型。
罗伊克(Loïck)2011年


8

曾经有一种猜想是错误的(例如,由Khot和Vishnoi否定了否定类型度量的常数失真嵌入),但提出错误的猜想并没有错,因为毕竟这是一个猜想。

并行重复是一个持续时间不长的实际混乱示例。最初认为,对于具有错误概率的交互式协议,对于并行重复,错误减小为。这种说法被证明是错误的,实际上,试图更好地理解并行重复的尝试为许多精美的数学打开了大门。ϵϵkk

人们还认为,费曼曾经认为很明显(或者量子力学显然不能用经典计算机有效地模拟)。但是那时他不是理论计算机科学家,也没有人确定这个故事的准确性。PNP


费曼+1。您能否提供有关Feynman和P vs NP的更多详细信息?
becko

2
问斯科特·亚伦森(Scott Aaronson),他非常了解这些知识。
MCH

2
观看TED演讲。但是,认为明显的东西并不能证明任何事情,也没有用。
Pratik Deoghare,2011年

6
@MCH:无论费曼是否相信这些事情,我都不认为他是一个相关的例子。首先,人们普遍认为这两种说法都是正确的,其次,他从未声称已经证明了这些事实。
Joe Fitzsimons

2
真正。显然,我们大多数人都认为P NP。我们只是不能证明这一点!
MCH

7

“我很震惊地得知Bentley证明是正确的并随后在《 Programming Pearls》第5章中对其进行了测试的二进制搜索程序包含一个错误。一旦我告诉了它是什么,您就会理解为什么它逃脱了二十年的检测。唯恐您认为我选择了Bentley,让我告诉您我是如何发现该错误的:我为JDK编写的二进制搜索版本也包含相同的错误。最近,它在等待某人的程序后中断了程序,并已报告给Sun。九年左右。”

-

约书亚·布洛赫(Joshua Bloch), “额外,额外-阅读全部:几乎所有二进制搜索和合并排序均被破坏”, 2006年


7
这实际上不是算法中的错误,而是实现中的错误。该算法是正确的;问题是“ int”类型实际上不能处理任意整数。
亚伦·罗斯
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.