我对算法的完整性和完整性感到困惑。
声音算法永远不会返回错误结果。该算法是否可能无法返回任何内容?
完整的算法将解决所有输入问题。算法返回的结果会影响算法的完整性。例如,如果排序算法将获取所有输入并返回一个列表,但它并不保证返回一个排序列表,它只是一个不健全的算法,但它是否完整?
答案 0 :(得分:15)
让S成为所有正确答案的集合。
声音算法永远不会在S
中包含错误的答案,但它可能会错过一些正确的答案。 =>不一定"完成"。
完整算法应该在S
中得到每个正确答案:包含完整的正确答案集。但它可能包括一些错误的答案。它可能会为单个输入返回错误的答案。 =>不一定"声音"。
所以,
声音算法永远不会返回错误结果。可能吗 该算法没有返回任何内容?
一定是对的。但它什么都不会返回。(错过了部分)
例如,如果排序算法将获取所有输入并返回a 列表,但它不保证返回排序列表,它只是一个 然而,不完整的算法是完整的吗?
嗯,这取决于。
如果算法中返回的列表构成了集合S
,那么它就完整了,因为包含了每个正确的答案。它并不一定意味着每一个输出都是正确的。例如。 S = {b1, b2}
。假设对于输入a1
,正确的输出为b1
;对于输入a2
,正确的输出为b2
。如果算法返回b2
的{{1}},a1
的{{1}},则完整但不健全。
另一方面,如果算法始终为b1
和a2
返回解b1
,那么它显然不完整。
因此,您无法通过其健全性来推断算法是否完整,,反之亦然。
答案 1 :(得分:7)
This analogy会让您理解这个概念。
有钓鱼比赛。目标是捕获重量超过1公斤的鱼。有两个竞争者,Sunada和Compila。每个人都用自己的湖泊钓鱼。每个湖泊都有完全相同数量的鱼类(100种鱼类),其中鱼类的鱼类数量完全相同,重量超过1公斤(50条鱼类)。
裁判用哨子开始比赛。他们都捕到许多鱼,直到时间结束。现在它来计算符合规则的鱼类。裁判首先开始对Sunada捕获的所有鱼类进行加重。令人惊讶的是,所有被Sunada捕获的鱼体重超过1公斤!但他只捕获了45条鱼。
另一方面,Compila捕获了60条鱼。似乎Compila赢了,但裁判还没决定。因为可能少于45条鱼的重量超过1公斤。经过统计和加权后,裁判称有50条符合规则的鱼类使Compila成为赢家。
现在在这个类比中,Sunada捕获的所有鱼都符合规则,这使他完美无瑕!另一方面,Compila捕获了符合规则的所有鱼类,这使得Compila完全完整!