5つの要素をソート(順序)するために必要な比較の最小数


22

5つの要素を並べ替える(順序付ける)ために必要な比較の最小数を見つけ、この比較数を使用してこれらの要素を並べ替えるアルゴリズムを考案します。

解決策 5つあります!= 120の可能な結果。したがって、ソート手順のバイナリツリーには少なくとも7つのレベルがあります。実際、 ≥120が示す時間 ≥7でも7の比較は十分ではありません。5つの要素を並べ替える(並べ替える)ために必要な比較の最小数は8です。2hh

私の実際の質問は次のとおりです。8つの比較でそれを行うアルゴリズムを見つけましたが、7つの比較でそれができないことをどのように証明できますか?


回答:


27

解決策は間違っています。デマス[1; 2、経由 5.3.1]は、7つの比較のみを使用して5つの値をソートできること、つまり、この場合「情報理論」の下限が厳しいことを示しています。

答えは、一般的なアルゴリズムではなく、合わせた方法です。また、あまり良くありません。これは概要です:n=5

  1. 最初の2つのペアを並べ替えます。

  2. ペアをそれぞれの大きな要素で並べます。

    結果を呼び出します ; a < b < dおよびc < dを知っています。[a,b,c,d,e]a<b<dc<d

  3. [ a b d ]に挿入します。e[a,b,d]

  4. 手順3の結果にを挿入しますc

最初のステップは明らかに2つの比較を行い、2番目の比較は1つだけです。最後の2つのステップでは、それぞれ2つの比較を行います。両方の場合に3要素リストに挿入し(ステップ4については、からcが手元のリストの最後の要素よりも小さいことがわかっていることに注意してください)、最初に中間要素と比較します。これにより、合計7つの比較が行われます。c<dc

この「素敵な」擬似コードの書き方がわからないので、テスト済みの(そして願わくは読みやすい)実装についてはこちらを参照してください。


  1. 博士号 論文(スタンフォード大学)by HB Demuth(1956)

    HB Demuthによる電子データのソート(1985)も参照してください。

  2. Donald E. Knuthによるソートと検索コンピュータプログラミング Vol。3(第2版、1998年)

5
テストでは、不可能であることを示すために5つのポイントが与えられます。あなたがあなたの答えに対してどれだけのポイントを獲得できるか疑問に思います:-)(テストは間違ってはいけないので、おそらくゼロです)。
gnasher729

0

比較に基づくソートの理論上の下限はログnです。つまり、<または>比較のみを使用してnアイテムをソートするには、少なくともnの 2を底とする対数が必​​要です。、したがって、ログ5 6.91動作を制御します。<>nログ56.91

5=120以来= 120および27=128、バイナリ決定ツリーを使用すると、7つの比較で5つのアイテムをソートできます。ツリーは、120個の順列のうちどれを持っているかを正確に把握し、ソートに必要なスワップを行います。

きれいなコードでも短いコードでもありません。手作業でコーディングするのではなく、コード生成メソッドを使用して決定木とスワップを作成する必要がありますが、機能します。5つのアイテムの可能な順列で動作することが証明されているため、7つの比較で5つのアイテムを並べ替えることができます。


覚えている限り、理論上の下限は漸近的な下限(つまり、)を与えます。定数係数が1であることを絶対に確信していますか?Ωnログn
dkaeae

最悪の場合の理論上の下限はceil(log2(n!))です。これは、n!順列、およびk個の比較がある場合は2 ^ k≥n!が必要です。これは定数1だけではなく、正確です。
gnasher729

-1

クイックソートを考えていました。偶然中央の要素である要素をピボットとして選択します。ピボットを残りの4つのアイテムと比較して、2つの山を並べ替えます。これらのパイルはそれぞれ1回の比較でソートできます。私がひどい間違いを犯していない限り、5つの項目はたった6回の比較で完全にソートされており、それが仕事をするために必要な比較の絶対的な最小数だと思います。元の質問は、5つの要素をソートするための比較の最小数を見つけることでした。


1
1つの比較で3つの要素の山をソートするにはどうすればよいですか?
xskxzr

あなたは何の要素の山について話しているのですか?上記で説明したものは、最初のパスの後に2つの要素の2つの山を生成します。
スコッティ

ランダム要素をピボットとして使用すると思いました。4つの比較で中間要素をピボットとしてどのように選択できますか?
xskxzr

それは私が言っていることではありません。上記の「5!= 120以降...バイナリ決定ツリーを使用すると、7つの比較で5つのアイテムをソートできます。」要素の順列の数は120ですが、クイックソートのランダムサンプル実行ではジョブを実行するのに6つしかかからなかったため、比較が6つしかないブランチが必要です。120個の順列の1つは、ソートされたリスト用です。そのブランチには、わずか4つの比較を含めることができます。
スコッティ

-2

アルゴリズムをテストできる場合は、すべての数値の組み合わせでテストします。多数ある場合は、多数のランダムな組み合わせでテストします。正確ではありませんが、すべての組み合わせよりも高速です。

最小
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4

最大
3 ^ 3
4 ^ 4
5 ^ 5

中間に挿入すると、4〜3の数字が使用されます。
マージでは4つの番号に4〜5を使用します。
wikiによる最小比較は4つの数字に対して5です:) 5の場合は7です。8を使用します。
https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
比較する前にすべてを知っている場合は、比較を行うことができます。4つの数字の平均は、すべての組み合わせで3.96 / 1024です。


2
これは質問に答えません。質問では、7つの比較のみを使用してソートする方法がないことを証明する方法を尋ねます。アプローチを使用するには、最大7つの比較を使用するすべてのアルゴリズムを列挙する必要があります。妥当な時間内に列挙するには、このようなアルゴリズムが多すぎると思います。いずれにせよ、これが既存の回答に何を追加するのかわかりませんが、既存の回答は既に質問に対する完全な回答を提供しています。新しい質問を追加できる質問への回答に集中することをお勧めします。
DW

追加はグラフィックとalgのヒントです。cmpの前からcmp値を予測します。そして彼の分は7、他のソース8、真の分です。4です!!! 4はasc / descオーダーでのみ動作します。Ex1:00000 01234 43210 10000 ... Ex2:中央に挿入:43210、開始4、取得3、cp 4> 3、取得2、cp 4> 2、cp 3> 3、取得1、cp(mid)3> 1、cp 2> 1、get 0、cp(mid)3> 0、cp 2> 0、cp 1> 0 ... 8 cmp。7は、conccrete orderまたはalgに対して可能です。私のページでmlich.zam.slu.cz/js-sort/x-sort-x2.htmの 4つの数字、平均3.96 を確認できます。最小-最大3-6。5に変更し、彼のalgをテストできます。
ピーターミュリッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.