算法的完整性和完整性

时间:2014-04-13 23:31:41

标签: algorithm

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

声音算法永远不会返回错误结果。该算法是否可能无法返回任何内容?

完整的算法将解决所有输入问题。算法返回的结果会影响算法的完整性。例如,如果排序算法将获取所有输入并返回一个列表,但它并不保证返回一个排序列表,它只是一个不健全的算法,但它是否完整?

2 个答案:

答案 0 :(得分:15)

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

声音算法永远不会在S中包含错误的答案,但它可能会错过一些正确的答案。 =>不一定"完成"。

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

所以,

  

声音算法永远不会返回错误结果。可能吗   该算法没有返回任何内容?

一定是对的。但它什么都不会返回。(错过了部分)

  

例如,如果排序算法将获取所有输入并返回a   列表,但它不保证返回排序列表,它只是一个   然而,不完整的算法是完整的吗?

嗯,这取决于。

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

另一方面,如果算法始终为b1a2返回解b1,那么它显然不完整。

因此,您无法通过其健全性来推断算法是否完整,,反之亦然。

请参阅7 Ways to Approach Soundness and Completeness,同时here

答案 1 :(得分:7)

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

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

裁判用哨子开始比赛。他们都捕到许多鱼,直到时间结束。现在它来计算符合规则的鱼类。裁判首先开始对Sunada捕获的所有鱼类进行加重。令人惊讶的是,所有被Sunada捕获的鱼体重超过1公斤!但他只捕获了45条鱼。

另一方面,Compila捕获了60条鱼。似乎Compila赢了,但裁判还没决定。因为可能少于45条鱼的重量超过1公斤。经过统计和加权后,裁判称有50条符合规则的鱼类使Compila成为赢家。

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