web-dev-qa-db-ja.com

アルゴリズムが健全かつ完全であるとはどういう意味ですか?

健全かつ完全のさまざまな解釈を聞いた。 completenessは、解決策がある場合はそれを見つけることを意味することを理解しています。アルゴリズムとはどういう意味ですかsound

アルゴリズムが健全かつ完全であるとはどういう意味ですか?

33
mutelogan

これらは、ロジックに関連する非常に具体的な用語です。

ここにいくつかの出発点があります:

http://en.wikipedia.org/wiki/Soundness

http://en.wikipedia.org/wiki/Completeness_(logic)

基本的に、(アルゴリズムの)健全性とは、アルゴリズムが正しくない結果を生成しないことを意味します。たとえば、並べ替えられたリストを返さないことがある並べ替えアルゴリズムを使用している場合、そのアルゴリズムは適切ではありません。

一方、完全性は、アルゴリズムがすべての可能な入力に対処し、何も見落とさないことを意味します。したがって、私の並べ替えアルゴリズムが並べ替えられていないリストを返さず、数値7を含むリストでの作業を拒否した場合は、完全ではありません。

すべての入力(プログラムの世界では意味的に有効)で機能し、常に正しい答えが得られれば、完全で健全です。

50
Erik Dietrich

エリックディートリッヒの答えは少し混乱します。以下が良いです:

アルゴリズムはsoundで、もしそれが答えを返すときはいつでも、その答えは真です。アルゴリズムはcompleteであり、任意の入力に対して正しい回答を返すことが保証されている場合(または、回答が存在しない場合は、失敗を返すことが保証されています)。

2つの重要なポイント:

  1. 健全性は弱い保証です。 Aが終了するとは約束していません。
  2. 健全性と完全性は関連する概念です。事実、彼らはお互いの論理的な逆です。つまり、Soundnessは、回答が返された場合、その回答は真であると述べています。完全性は、返された場合に答えが真であると言います。

例として、数値のリストを入力として受け取るソートアルゴリズムAを考えます。結果がソートされたリストである結果を返すたびに、Aは健全であると言います。同様に、Aは、数値のリストをいつでも並べ替えられたリストを返すことが保証されている場合、完全であると言います。

16
Daniel

これらの用語は計算理論に由来するため、ソフトウェア工学の文脈よりも計算理論の文脈でより意味があります。

ほとんどの標準的な計算モデルでは、計算問題は languages として表されます。言語は文字列のセットです。したがって、アルゴリズムは、指定された文字列が(trueまたはfalseを返すことによって)ある言語のメンバーであるかどうかを決定するシステムまたはプロシージャにすぎません。ソフトウェアエンジニアリング用語では、計算理論は、文字列が不変であると仮定して、次のような関数に特に関係しています。

boolean some_function(string argument){...}

言語のメンバーであるすべての引数に対してtrueを返す場合、この関数をcompleteと呼びます。言語のメンバーではないすべての引数に対してfalseを返す場合、これをsoundと呼びます。

つまり、trueを返したいときに常にtrueを返す場合は完全であり、falseを返したいときに常にfalseを返す場合はサウンドです。

これは他の種類の機能にどのように変換されますか?結局のところ、ほとんどの場合、任意の量のデータを文字列に詰め込み、関数内で再構成することが可能です。したがって、引数のタイプとアリティの制限は、理論上の単純化にすぎません。ただし、戻り値の型の制限はより重要です。ブール値の結果を必要とする問題は、 決定問題 と呼ばれます。多くの計算理論には決定問題が含まれます。集合PとNPは決定問題に制限されています(そして、少なくともNPはこの制限なしでは合理的に定義できませんでした。)停止問題は、よく研究された決定問題のもう1つの例です。 。

これらの用語は意思決定の問題の領域の外では一般化しないので、一般的な機能について説明する場合、これらの用語の違いはあまり意味がありません。

2
Kevin