我在这里指的是一个问题:功能强大的算法实在太复杂了。
如果算法功能强大,但实施起来过于复杂,那么如何确定算法正确呢?如果没有实现,您将无法在现实世界中测试该算法,并且这种复杂的算法可能包含错误,可能会使算法无效。
这是我不明白的。如果您具有证明算法正确性的技术,那么您已经有算法可以实现它,不是吗?否则我们如何确定证明技术是正确的?
对不起,我很抱歉!
来自Kaveh的更新(此处转载,因为参数更好!):
如果您可以在像Coq这样的正式系统中正式证明算法的正确性,那么您也可以提取算法(因为实际上已经实现了算法),但是关键事实是,对于大多数算法,我们没有给出对于算法的正确性,我们使用非正式的正确性证明。这些证明可能是错误的,有时会发生,即使是正式的正确性证明也不能使我们完全确定该算法是正确的。
6
这就是为什么即使在真实机器上很难(正确)实现,我们也拥有证明算法正确性的技术的原因。
—
拉斐尔
我同意拉斐尔。看来这个问题是基于这样一个假设,即算法的正确性通常是通过实现它来证明的,但事实并非如此。证明算法的正确性和实现算法是完全不同的事情,并且一个事物并不表示在任何方向上的另一事物。
—
伊藤刚(Tsuyoshi Ito)
具有复杂性正确性证明的简单算法-您如何知道它们是正确的?仅仅因为算法适用于测试示例并不意味着它适用于所有输入。
—
彼得·索尔
我同意大多数评论,但我认为它们缺少关键点。如果您可以在像Coq这样的正式系统中正式证明算法的正确性,那么您也可以提取算法(因为实际上已经实现了算法),但是关键事实是,对于大多数算法,我们没有给出对于算法的正确性,我们使用非正式的正确性证明。这些证明可能是错误的,而且确实会不时发生,即使是正式的正确性证明也不能使我们完全确定算法是否正确。
—
卡夫
“当心上面代码中的错误;我只是证明了它是正确的,没有尝试过。” 〜唐纳德·
—
努斯