【问题标题】:Soundness and Completeness of a algorithm算法的健全性和完整性
【发布时间】:2014-04-13 23:31:41
【问题描述】:

我对算法的健全性和完整性感到困惑。

合理的算法永远不会返回错误的结果。算法有没有可能什么都不返回?

一个完整的算法将处理所有输入。算法返回的结果是否会影响算法的完整性?

例如:如果一个排序算法将接受所有输入并返回一个列表,但它不保证返回一个排序后的列表,它只是一个不健全的算法,但是,它是完整的吗?

【问题讨论】:

  • sound = "如果算法给出了一个答案,那么它是正确的",complete = "如果存在一个正确的答案,那么算法会找到一个"。所以声音+完整的“只有正确的答案,如果存在,总是正确的答案”

标签: algorithm


【解决方案1】:

让 S 是所有正确答案的集合。

声音算法从不会在S 中包含错误答案,但它可能会漏掉一些正确答案。 => 不一定“完整”。

完整算法应该得到S 中的每个正确答案:包括完整的正确答案集。但它可能包括一些错误的答案。它可能会为单个输入返回错误的答案。 => 不一定是“声音”。

所以,

合理的算法永远不会返回错误的结果。可能吗 算法什么都不返回?

一定是对的。但它什么也不能返回。(遗漏的部分)

例如,如果一个排序算法将接受所有输入并返回一个 列表,但它不保证返回一个排序列表,它只是一个 不健全的算法,但是,它是完整的吗?

好吧,这取决于。

如果算法返回的列表形成集合S,则它是完整的,因为包含了每个正确的答案。这并不一定意味着每个输出都是正确的。例如。 S = {b1, b2}。假设,对于输入a1,正确的输出是b1;对于输入a2,正确的输出是b2。如果算法返回b2a1b1a2,它是完整的但不健全。

另一方面,如果算法总是为a1a2 返回解b1,则显然不完整。

所以你不能仅仅通过它的合理性来推断一个算法是否完整,反之亦然。

参考7 Ways to Approach Soundness and Completeness,也可以参考here

【讨论】:

  • 另外,你不能从完整性中推断出合理性。
  • 确实如此。我将其添加到我的答案中。
【解决方案2】:

This analogy 会让你理解这个概念。

有一场钓鱼比赛。目标是捕获重量超过 1 公斤的鱼。有两个竞争者,Sunada 和 Compila。每个人都使用自己的湖泊捕鱼。每个湖的鱼数完全相同(100 条鱼),在这些鱼中,重量超过 1 公斤的鱼的数量完全相同(50 条鱼)。

裁判吹哨开始比赛。他们俩都钓到了无数条鱼,直到时间结束。现在要计算符合规则的鱼类。裁判首先开始对砂田抓到的所有鱼进行称重。令人惊讶的是,Sunada 捕获的所有鱼的重量都超过了 1 公斤!但他只钓到了 45 条鱼。

另一方面,Compila 钓到了 60 条鱼。似乎 Compila 赢了,但裁判还没有决定。因为重量超过 1 公斤的鱼可能少于 45 条。经过计数和称重,裁判说有 50 条鱼符合规则,因此 Compila 获胜。

现在在这个类比中,Sunada 捕获的所有鱼都遵守规则,这让他完美无缺!另一方面,Compila 捕获了所有符合规则的鱼,这使得 Compila 完美无缺!

【讨论】:

  • 好一个 :) 谢谢。
猜你喜欢
  • 2019-07-24
  • 2014-02-21
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多