比較ネットワークがソートするかどうかはどうすればわかりますか?


9

比較ネットワークが表示されます。比較ネットワークが並べ替えネットワークであるかどうかをどのように判断できますか?下の画像には、選択ソートおよび挿入ソートネットワークの例があります。その意図は、比較ネットワークを持ち、数値をソートすることです。この場合2 ^ nの値をテストすると、2 ^ 8になります。これは、それをテストするための多くの|非効率的な方法です。これが有効なソーティングネットワークであることを確認するための数学モデル/証明を探しています。 挿入ソートに基づくソートネットワーク


2
何を検索し、読んで、試しましたか?何があなたをブロックしましたか?質問が正確であればあるほど、答えはよくなります。任意の比較ネットワーク、つまり任意の比較ネットワークがソーティングネットワークであるかどうかを判断する一般的な手順についての質問はありますか?または与えられたdisgramについてのあなたの質問です。
バブー2015

2
ゼロ1の原則を使用できます。すべてのゼロ1入力で機能する場合、ソーティングネットワークは正しいです。
Yuval Filmus

@YuvalFilmusこれは指数テスト(入力数)です。それはNP完全問題ですか?
バブー2015

@babouわからない。この場合、それは実用的です。
Yuval Filmus

明白なアイデアは...ちょうど[1..nの]、その結果を観察し、どちらかそれはあなたが近い証拠アプローチを持って成功した場合、それは、失敗または成功するのランダムな順列に対する作用を検討し、実証的なアプローチである
vzn

回答:


10

一般に、特定の比較ネットワークが本当に正しいソーティングネットワークであるかどうかを確認することは、Co-NPの完全な問題です。テストでチェックする場合は、指数関数的に多くのテストを試す必要があります。

特に、単一の値を除いてすべてを正しくソートするソートネットワークが存在するため、ネットワークにいくつかの入力を供給するだけでは、ネットワークが正しいかどうかをテストすることはできません。

1つの標準的な方法は、ゼロと1のみで構成される入力すべてを正しくソートするかどうかをテストすることです。その場合、すべての入力(0と1に限定されないものも含む)をソートすることがわかります。ただし、これには指数関数的に多くのテストが必要です。さらに、テストの数を大幅に減らすことはできません。0から1の入力の場合、少なくともテストが必要であることを証明して、ソーティングネットワークが正確であることを証明できます。2 nn 12n2nn1

あるいは、入力が順列であるテストを使用できます。これにより、必要なテストの数が多少減りますが、それでも指数関数的に多くのテストが必要です。特に、テストは必要かつ十分です。C N N / 2 - 11,2,,nC(n,n/2)1

これらの事実の証明については、次の論文を参照してください。

最適ソーティングネットワーク検証の計算複雑さについて。イアン・パーベリー。Parle'91 Parallel Architectures and Languages Europe、1991。

ソートおよび関連するネットワークのテストセットのサイズの制限。ムン・ジョンチョンとB.ラビクマー。離散数学、第81巻、pp.1--9、1990年4月。


6

あなたの質問を引用する:

これが有効なソーティングネットワークであることを確認するための数学モデル/証明を探しています。

一方でDWの(素晴らしい)回答一般的なケースを扱う、私はあなたの具体的な例を考えてみます。入力のこの形式のネットワークは、誘導によるソーティングネットワークであることが示されます(図については画像を参照してください)。n

  1. n=1入力は常にソートされます。
  2. n1n
    1. nb8
    2. n1
    3. この小さなネットワークは、帰納的仮説によって残りのすべての要素を分類します。

証明イラスト


5

一般的なソーティングネットワークを見ると、値のすべてのシーケンス(ソーティングネットワークに適切な長さ)が正しくソートされていることを証明する方法がわからない場合があります。しかし、私はこの素晴らしいトリック、タスクを単純化する方法について学びました:

0-1原理

ソーティングネットワークが「0」と「1」のみで構成されるすべてのシーケンス(正しい長さ)を正しくソートすると、すべてのシーケンス(正しい長さ)が正しくソートされます。もちろん、「0」と「1」は、ソーティングネットワークのドメイン内の個別の要素のプレースホルダーです。

したがって、次のような証明を作成できます。

  1. ソーティングネットワークのドメインから2つの異なる要素を取得し、それらを「0」と「1」と呼ぶことで、「0」<「1」
  2. ソートネットワークの正確な長さですべてのバイナリ文字列を作成します
  3. これらの文字列では、0ビットと1ビットを「0」と「1」に置き換えます
  4. これらの文字列を並べ替えネットワークに適用します
  5. 各文字列は000..01 ... 1のようなものにソートする必要があります

テスト2n

n2nn

もっと安くできる?

残念ながら、少なくともチューリングマシンを使用して証明を構築する場合は、徹底的なテストより安くはありません。もちろん、特定のソーティングネットワークを見ると、簡単な証明を作成する方法について独創的なアイデアがあるかもしれません。しかし、一般に、このような証明を構築するためのアルゴリズムは、すべてのバイナリ文字列をテストするのと同じくらい複雑です。これは、プルーフィングソーティングネットワークが、他の回答で概説されているNP完全複雑度クラスに関連しているためです。

2n

見通し/展望

あなたの脳はチューリングマシンですか

哲学的な結果は次のとおりです。各分類ネットワークの正確さの創造的な証拠を見つけることができると信じるとき、あなたはまた、あなたの脳がチューリング機械ではない可能性が非常に高いと信じています。

並列ソート

「0-1原理」は、並列ソートアルゴリズムの正確性を証明するためにも使用されます。これについて(うまくいけば)素晴らしいプレゼンテーションをGithubで持っています。

ソーティングネットワークの修正

文字列の1つが正しくソートされていない場合(ソーティングネットワークが間違っていることが判明している場合)、これを使用して、そのバグのないソーティングネットワークを構築できます。間違った結果文字列の「1-0ボーダー」の位置に追加の比較を追加するだけです。


O(2n)

n

そのような何か、はい。(ように私はあなたの答えを読んで、「ここで指数時間でそれを行う方法だ、と私たちは、おそらくより良い行うことができませんのでの共同NP-ハード」それは非sequiturだ、それゆえ私のコメント。。)
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.