以下のプロセスを使用して、で表される置換の実行パーティション番号を定義します。レッツR (π )分(π )、··· 、K π π R (π )πr(π)kmin(π),…,kππr(π)
たとえば、計算してみましょう。私たちは、最初に確保さを取得するために、。それからを確保して、を取得します。次に、を確保してを取得します。最後に、を確保して空の順列を取得します。これには4ラウンドかかるため、です。1 6273584 234 6758 5 678 678 r (62735814 )= 4r(62735814)1627358423467585678678r (62735814 )= 4
この表現はソートにどのように役立ちますか?2回ごとに実行(つまり、これらの数値を右に移動してを取得し(編集:順列に表示される順序(つまり))。これで、2つの実行、つまりのみが実行され、を右に移動してリストをソートできます。234 、678 51627384 627384 1234 、5678 567862735814234,678516273846273841234,56785678
ここで、次の推測を行ってみましょう。置換場合、 1回の移動でから到達可能なすべての置換のセットとします。次に。Π π 分α ∈ Π R (α )= ⌈ R (π )/ 2 ⌉πΠπminα∈Πr(α)=⌈r(π)/2⌉
この推測を考えると、動きの最小数は、順列ソートするために必要なことを示すことは容易であるある、と私はすべての順列のために、この公式を確認したのため。⌈ ログ2 R (π )⌉ S N N ≤ 8π⌈log2r(π)⌉Snn≤8
編集:実行パーティション番号の異なる解釈があります。これは、それを計算する線形時間アルゴリズムを提供し、私の推測の証明をスケッチして、式を検証できます。⌈log2r(π)⌉
並べ替えもう一度考えてください。で最初の実行が終了するその理由の点である前に表示されます。同様に、第二ラン端以来表示される前になど。したがって、順列の実行パーティション番号は、の前にが現れるようなの数です。1 2 1 4 5 4 i i + 1 i62735814121454ii+1i
順列の逆を見ると、これをもっと簡潔に述べることができます。もう一度検討してください。テイク。この順列には3つの降下があります:(降下は前の位置よりも小さい位置です)。各下降は、新しい実行の開始に対応します。したがって、は、1にの降下数を加えたものに等しくなります。π - 1 = 72485136 7 2 48 5 1 36 R (π )π - 1π=62735814π−1=7248513672485136r(π)π−1
に関して、操作はどのように見えますか?聞かせて、我々は右に移動し、その数字の集合左に滞在その数字の集合とします。我々は数値置き換える上の順列とそれらの相対的な順序を表す、との数字を交換上の順列で。たとえば、移動。逆順列に関しては、です。だからにマッピングされた B A A { 1 、... 、| A | } B { | A | + 1 、… 、| A | + | B | } 6273 5 8 1 4 ↦ 51 627384 7 248 5 136 ↦ 2 468 1 357 75 21 248136 468357π−1BAA{1,…,|A|}B{|A|+1,…,|A|+|B|}62735814↦5162738472485136↦246813577521そしてにマッピングされた。248136468357
の下降は、および場合にのみ操作後に失われます。逆に、に関しては、とへのパーティションは -runsと -runsに対応します。ランが終了してランが開始されるたびに、下降があります。降下を「殺す」ためには、 -runから -run に切り替える必要があります。我々は2つの下りを殺した場合、我々はから途中で切り替えていますに-run降下を被る、-run。π - 1のx ∈ A Y ∈ B π - 1 A B A B B A A B B A…xy…π−1x∈Ay∈Bπ−1ABABBAABBA
この引数を形式化して、演算を介してから発生する場合、を示すことができます。は、降下の数です。これはと同等であり、私の推測の一方向を証明しています。もう一方の方向はより簡単で、すでに上で概説しました:単に2回実行し、これらの実行を右にプッシュして、を満たす順列を取得します。π D (α - 1)≥ ⌊ D (π - 1)/ 2 ⌋ D (⋅ )R (α )≥ ⌈ R (π )/ 2 ⌉ α R (α )= ⌈ R (π / 2 )⌉απd(α−1)≥⌊d(π−1)/2⌋d(⋅)r(α)≥⌈r(π)/2⌉αr(α)=⌈r(π/2)⌉