回答:
これらは、ロジックに関連する非常に具体的な用語です。
出発点は次のとおりです。
http://en.wikipedia.org/wiki/Soundness
http://en.wikipedia.org/wiki/Completeness_(logic)
基本的に、(アルゴリズムの)健全性とは、アルゴリズムが誤った結果をもたらさないことを意味します。たとえば、ソートされたリストを返さないソートアルゴリズムがある場合、そのアルゴリズムは適切ではありません。
一方、完全性とは、アルゴリズムがすべての可能な入力に対処し、見逃さないことを意味します。したがって、並べ替えアルゴリズムが並べ替えられていないリストを返さず、番号7を含むリストの処理を拒否しただけでは、完全ではありません。
すべての入力(プログラムの世界で意味的に有効)で機能し、常に正しい答えを得ることができれば、完全かつ健全です。
エリック・ディートリッヒの答えは少々紛らわしいと思います。以下の方が優れています。
アルゴリズムは、答えを返すときはいつでも、その答えが真である場合に健全です。任意の入力に対して正しい回答を返すことが保証されている場合(または、回答が存在しない場合は失敗を返すことが保証されている場合)、アルゴリズムは完了です。
2つの重要なポイント:
例として、入力として数値のリストを受け取るソートアルゴリズムAを考えます。Aが結果を返すたびにその結果がソートされたリストである場合、Aは正常であると言います。同様に、数値のリストを提供するたびにソートされたリストを返すことが保証される場合、Aは完全であると言います。
これらの用語は計算理論に由来しているため、ソフトウェア工学のコンテキストよりも計算理論のコンテキストの方が意味があります。
計算のほとんどの標準モデルでは、計算の問題は言語として表されます。言語は文字列のセットです。したがって、アルゴリズムは、特定の文字列が特定の言語のメンバーであるかどうかを(trueまたはfalseを返すことにより)決定するシステムまたはプロシージャにすぎません。ソフトウェア工学の用語では、計算理論は特に、文字列が不変であると仮定して、次のような関数に関係しています。
boolean some_function(string argument){...}
言語のメンバーであるすべての引数に対してtrueを返す場合、この関数をcompleteと呼びます。言語のメンバーではないすべての引数に対してfalseを返す場合、サウンドと呼びます。
つまり、trueを返したいときに常にtrueを返し、falseを返したいときに常にfalseを返す場合、音は完全です。
これは他の種類の機能にどのように変換されますか?結局のところ、ほとんどの場合、任意の量のデータを文字列に詰め込み、関数内で再構成することが可能です。したがって、引数の型とアリティの制限は、理論的な単純化にすぎません。ただし、戻り値の型の制限はより重要です。ブール結果を必要とする問題は、決定問題と呼ばれます。多くの計算理論には決定問題が含まれます。集合PとNPは決定問題に制限されます(少なくともNPは、この制限なしでは合理的に定義できませんでした)。停止問題は、非常に研究されている決定問題の別の例です。
私の意見では、これらの用語は意思決定問題の領域外では一般化されないため、一般的な機能を議論する際にそれらの違いはあまり意味がありません。