说一个算法是声音和完整是什么意思?


33

我听到了声音完整的不同解释。我理解完整性意味着找到解决方案(如果有)。说算法是正确的,这意味着什么。

说一个算法是声音和完整是什么意思?


我建议您重新评估您认为错误的答案。
BlackJack 2012年

刚刚做到了:)
Mutlogan'Mar

Answers:


49

这些是与逻辑相关的非常具体的术语。

以下是一些起点:

http://en.wikipedia.org/wiki/声音

http://en.wikipedia.org/wiki/Completeness_(逻辑)

基本上,(算法的)健全性意味着算法不会产生任何不正确的结果。例如,如果我有一个排序算法,该算法有时不返回排序列表,则该算法不正确。

另一方面,完整性意味着算法可以处理所有可能的输入,并且不会遗漏任何输入。因此,如果我的排序算法从不返回未排序的列表,而只是拒绝对包含数字7的列表进行处理,那将是不完整的。

如果它适用于所有输入,则它是完整且可靠的(在程序世界中通常是有效的),并且始终能正确回答。


谢谢。我对声音的含义感到困惑。我得到了多个答案。
Mutlogan 2012年

很高兴,如果有帮助... :)
埃里克·迪特里希

13
二进制搜索就是一个例子,这听起来不错,但还不完善。它不适用于未排序的列表。
Malfist 2012年

3
@Malfist,但不是“程序的世界”排序列表吗?
Andres

1
“算法对无效输入的行为不正确”不会影响健全性或完整性,因此二进制搜索和比较排序都不相关-两种算法都是有效的且对于有效输入而言是完整的。
Blaisorblade

15

我发现Erik Dietrich的回答有点混乱。以下更好:

一种算法是声音,如果,任何时候它返回一个答案,这个答案是正确的。如果算法保证为任意输入返回正确答案(或者,如果不存在答案,则保证返回失败),则该算法是完整的

两个要点:

  1. 健全性是一个薄弱的保证。它不保证A将终止。
  2. 健全性和完整性是相关概念;实际上,它们是彼此逻辑上的对立。即,健全性说,如果返回答案,则该答案为真。完整性说,如果返回答案,则它为真。

考虑一个示例,该算法接收一个数字列表作为输入。我们说,如果A每次返回一个结果,即结果为排序列表,则该声音是正确的。同样,如果我们保证在每次给它一个数字列表时都返回排序列表,则说A是完整的。


你为什么感到困惑?“如果算法在任何时候返回答案,则该答案是正确的。” 的含义与“(算法的)健壮性基本上意味着该算法不会产生任何不正确的结果”相同。 这些是同一回事。至于您的(非常简短的)完整性定义,它在Wikipedia链接中没有任何内容,您也不会引用自己的参考。我必须说,Erik的定义实际上更有用。如果您的观点是正确的,则您必须提供更好的证据和更多的肉。
itsbruce 2014年

1
只是为了澄清,当您说“完整性表示答案是正确的,如果返回了答案”,您的意思是答案是“正确的”对吗?
Dois 2015年

1
“如果返回答案,则为真”意味着与“如果返回答案,则为真”相同。另外,答案不能是“正确的”,只能是正确的。 softwareengineering.stackexchange.com/a/311649/21277更正确。
Blaisorblade

2

这些术语来自计算理论,因此它们在计算理论的上下文中比在软件工程的上下文中更有意义

在大多数标准计算模型中,计算问题都用语言表示。语言是一组字符串。因此,算法只是决定给定字符串是否是某种语言的成员的系统或过程(通过返回true或false)。用软件工程学的术语来说,计算理论特别关注看起来像这样的函数,假设字符串是不可变的:

boolean some_function(string argument){...}

如果该函数为该语言成员的每个参数返回true,则将其称为完成函数。如果它为不是该语言成员的每个参数返回false,则我们将其称为“ 声音”

换句话说,如果我们希望它返回true时始终返回true,则表示它是完整的;如果我们希望它返回false时总是返回false,则听起来可以。

这如何转换为其他功能?事实证明,几乎总是可以将任意数量的数据填充到字符串中并在函数中重新构成它。因此,对参数类型和参数的限制仅是理论上的简化。但是,对返回类型的限制更为重要。需要布尔结果的问题称为决策问题。许多计算理论都涉及决策问题。P和NP集受限于决策问题(至少,如果没有此限制,就无法合理地定义NP)。停顿问题是对决策问题进行深入研究的另一个例子。

我认为这些术语不会在决策问题的范围之外泛化,因此在讨论通用函数时,它们之间的区别并不是很有意义。


-2

SO更好的答案。基本上,您提供一些数据收集和搜索条件。声音算法仅捕获符合条件的鱼,但可能会丢失一些数据项。完整算法会生成请求结果的超集,这意味着您会在请求结果的顶部收到一些垃圾。声音算法较为保守。

统计学家可能会说,声音算法偏向于I型错误(不接受正确的候选者),而完整算法偏向于II类错误(以接受错误的候选者)。

在此处输入图片说明

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.