キツネの答えは間違っていると思います。完全にシャッフルされたリストの便利な定義を紹介することを証明するために (配列またはシーケンスなど、任意の名前を付けてください)。
L定義:要素a1, a2 ... anとインデックスを含むListがあるとします1, 2, 3..... n。Lをシャッフル操作 (アクセスできない内部) に公開すると、いくつかの k ( ) 要素のインデックスを知ることによって残りの要素のインデックスを推測できないL場合にのみ、完全にシャッフルされます。つまり、残りの要素は、残りのインデックスのいずれかで明らかになる可能性が等しくなります。k< nn-kn-kn-k
例: 4 つの要素のリストがあり、それをシャッフルした後、その最初の要素が( ) で[a, b, c, d]あることがわかります。要素のいずれかが発生する確率は、たとえば、3 番目のセルが に等しいとします。a[a, .., .., ..]b, c, d1/3
ここで、アルゴリズムが定義を満たさない最小のリストには 3 つの要素があります。しかし、アルゴリズムはとにかくそれを 4 要素リストに変換するので、4 要素リストの誤りを示そうとします。
入力を考えるL = [a, b, c, d]アルゴリズムの最初の実行に続いて、L は と に分割されl1 = [a, c]ますl2 = [b, d]。これらの 2 つのサブリストをシャッフルした後 (ただし、4 つの要素の結果にマージする前)、4 つの同じ確率の 2 つの要素のリストを取得できます。
l1shuffled = [a , c] l2shuffled = [b , d]
l1shuffled = [a , c] l2shuffled = [d , b]
l1shuffled = [c , a] l2shuffled = [b , d]
l1shuffled = [c , a] l2shuffled = [d , b]
ここで、2 つの質問に答えてみてください。
1.最終結果にマージした後、リストの最初の要素になる
確率はいくらですか。a
簡単に言えば、上記の 4 つのペアのうちの 2 つだけ (これも同様に可能性が高い) がそのような結果をもたらすことがわかります ( p1 = 1/2)。これらの各ペアheadsは、マージ ルーチンの最初の反転時に描画する必要があります ( p2 = 1/2)。aしたがって、の最初の要素としてを持つ確率は でLshuffledありp = p1*p2 = 1/4、これは正しいです。
2.aが の 1 番目の位置にあるLshuffledcbdLshuffled
ことを知っている場合、完全にシャッフルされたリストの上記の定義に従って、Nowの 2 番目の位置にある確率(一般性を失うことなく選択することもできます) はどのくらいです1/3か?リストの残りの 3 つのセルに入力する数字が 3 つあるため、
答えは になるはず
です。アルゴリズムがそれを保証するかどうか見てみましょう。
の最初の要素として
選択すると、次のいずれかになります:
または:
どちらの場合も選択する確率は、反転する確率( ) に等しいため、の 2 番目の要素として持つ確率は1Lshuffled
l1shuffled = [c] l2shuffled = [b, d]
l1shuffled = [c] l2shuffled = [d, b]
3headsp3 = 1/23Lshuffledの最初の要素要素Lshuffledが1等しいことを知っている場合1/2。これで、アルゴリズムの誤りの1/2 != 1/3証明が終了します。
興味深いのは、アルゴリズムが完全なシャッフルに必要な (しかし十分ではない) 条件を満たしていることです。
nすべてのインデックスk( <n) について、すべての要素について、要素のリストが与えられた場合: リスト回akをシャッフルした後、インデックスで発生した回数をカウントした場合、このカウントは確率的に傾向があり、無限大になる傾向があります。makkm/nm