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


33

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

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


答えが間違っていることを考えて、受け入れた答えを再評価することをお勧めします。
ブラックジャック

ちょうどそれをやった:)
mutelogan

回答:


50

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

出発点は次のとおりです。

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

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

基本的に、(アルゴリズムの)健全性とは、アルゴリズムが誤った結果をもたらさないことを意味します。たとえば、ソートされたリストを返さないソートアルゴリズムがある場合、そのアルゴリズムは適切ではありません。

一方、完全性とは、アルゴリズムがすべての可能な入力に対処し、見逃さないことを意味します。したがって、並べ替えアルゴリズムが並べ替えられていないリストを返さず、番号7を含むリストの処理を拒否しただけでは、完全ではありません。

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


ありがとう。健全性の意味について本当に混乱していました。複数の回答が得られました。
mutelogan

助けてくれたら嬉しい... :)
エリックディートリッヒ

13
例としては、バイナリ検索がありますが、それは適切ですが、完全ではありません。ソートされていないリストでは機能しません。
フィスト

3
@Malfistしかし、「プログラムの世界」はリストをソートしていませんか?
アンドレス

1
「無効な入力に対するアルゴリズムの誤動作」は健全性や完全性に影響を与えないため、バイナリ検索も比較ソートも関係ありません。両方のアルゴリズムは有効で、有効な入力に対して完全です。
ブレイザーブレード

15

エリック・ディートリッヒの答えは少々紛らわしいと思います。以下の方が優れています。

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

2つの重要なポイント:

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

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


なぜあなたは混乱しているのですか?「答えを返すときはいつでも、その答えが正しい場合、アルゴリズムは適切です。」「基本的に、(アルゴリズムの)健全性とは、アルゴリズムが誤った結果をもたらさないことを意味します」と同じ意味です。 これらは同じことを意味します。あなたの(非常に簡潔な)完全性の定義に関しては、ウィキペディアのリンクには何も一致せず、あなた自身の参照は引用していません。私は言わなければならない、エリックの定義はより実用的です。あなたが正しい場合、より良い証拠とより多くの肉を提供する必要があります。
itsbruce

1
明確にするために、「答えが返された場合、答えは真実である」と言うとき、答えは「正しい」ことを意味しますか?
ドイス

1
「回答が返された場合は真」とは、文字通り「回答が返された場合は真」と同じことを意味します。また、答えは「真」ではなく、正しいだけです。 softwareengineering.stackexchange.com/a/311649/21277の方が正確です。
ブライスブレード

2

これらの用語は計算理論に由来しているため、ソフトウェア工学のコンテキストよりも計算理論のコンテキストの方が意味があります。

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

boolean some_function(string argument){...}

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

つまり、trueを返したいときに常にtrueを返し、falseを返したいときに常にfalseを返す場合、音は完全です。

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

私の意見では、これらの用語は意思決定問題の領域外では一般化されないため、一般的な機能を議論する際にそれらの違いはあまり意味がありません。


-2

SOにもっと良い答えがあります。基本的に、いくつかのデータ収集と検索基準を提供します。サウンドアルゴリズムは、基準に一致する魚のみをキャッチしますが、一部のデータ項目が欠落する場合があります。完全なアルゴリズムは、要求された結果のスーパーセットを生成します。つまり、要求された結果の上にごみを受け取ります。サウンドアルゴリズムはより保守的です。

統計学者はおそらく、健全なアルゴリズムはタイプIエラーに偏った(正しい候補を受け入れない)のに対し、完全なアルゴリズムはタイプIIエラー(誤った候補を受け入れる)に偏っていると言うでしょう

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.