我听到了声音完整的不同解释。我理解完整性意味着找到解决方案(如果有)。说算法是正确的,这意味着什么。
说一个算法是声音和完整是什么意思?
我听到了声音完整的不同解释。我理解完整性意味着找到解决方案(如果有)。说算法是正确的,这意味着什么。
说一个算法是声音和完整是什么意思?
Answers:
这些是与逻辑相关的非常具体的术语。
以下是一些起点:
http://en.wikipedia.org/wiki/声音
http://en.wikipedia.org/wiki/Completeness_(逻辑)
基本上,(算法的)健全性意味着算法不会产生任何不正确的结果。例如,如果我有一个排序算法,该算法有时不返回排序列表,则该算法不正确。
另一方面,完整性意味着算法可以处理所有可能的输入,并且不会遗漏任何输入。因此,如果我的排序算法从不返回未排序的列表,而只是拒绝对包含数字7的列表进行处理,那将是不完整的。
如果它适用于所有输入,则它是完整且可靠的(在程序世界中通常是有效的),并且始终能正确回答。
我发现Erik Dietrich的回答有点混乱。以下更好:
一种算法是声音,如果,任何时候它返回一个答案,这个答案是正确的。如果算法保证为任意输入返回正确答案(或者,如果不存在答案,则保证返回失败),则该算法是完整的。
两个要点:
考虑一个示例,该算法接收一个数字列表作为输入。我们说,如果A每次返回一个结果,即结果为排序列表,则该声音是正确的。同样,如果我们保证在每次给它一个数字列表时都返回排序列表,则说A是完整的。
这些术语来自计算理论,因此它们在计算理论的上下文中比在软件工程的上下文中更有意义
在大多数标准计算模型中,计算问题都用语言表示。语言是一组字符串。因此,算法只是决定给定字符串是否是某种语言的成员的系统或过程(通过返回true或false)。用软件工程学的术语来说,计算理论特别关注看起来像这样的函数,假设字符串是不可变的:
boolean some_function(string argument){...}
如果该函数为该语言成员的每个参数返回true,则将其称为完成函数。如果它为不是该语言成员的每个参数返回false,则我们将其称为“ 声音”。
换句话说,如果我们希望它返回true时始终返回true,则表示它是完整的;如果我们希望它返回false时总是返回false,则听起来可以。
这如何转换为其他功能?事实证明,几乎总是可以将任意数量的数据填充到字符串中并在函数中重新构成它。因此,对参数类型和参数的限制仅是理论上的简化。但是,对返回类型的限制更为重要。需要布尔结果的问题称为决策问题。许多计算理论都涉及决策问题。P和NP集受限于决策问题(至少,如果没有此限制,就无法合理地定义NP)。停顿问题是对决策问题进行深入研究的另一个例子。
我认为这些术语不会在决策问题的范围之外泛化,因此在讨论通用函数时,它们之间的区别并不是很有意义。