経験的アプローチ。
Mathematicaで誤ったアルゴリズムを実装しましょう:
p = 10; (* Range *)
s = {}
For[l = 1, l <= 30000, l++, (*Iterations*)
a = Range[p];
For[k = 1, k <= p, k++,
i = RandomInteger[{1, p}];
temp = a[[k]];
a[[k]] = a[[i]];
a[[i]] = temp
];
AppendTo[s, a];
]
次に、各整数が各位置にある回数を取得します。
r = SortBy[#, #[[1]] &] & /@ Tally /@ Transpose[s]
結果の配列で3つの位置を取り、その位置の各整数の度数分布をプロットしてみましょう。
位置1の場合、周波数分布は次のとおりです。

ポジション5(中央)の場合

そして、ポジション10(最後)の場合:

ここに、すべての位置の分布が一緒にプロットされています。

ここでは、8つのポジションにわたるより良い統計があります。

いくつかの観察:
- すべての位置で、「1」の確率は同じです(1 / n)。
- 確率行列は、大きな反対角に対して対称です。
- したがって、最後の位置にある任意の数の確率も均一です(1 / n)
同じポイント(最初のプロパティ)と最後の水平線(3番目のプロパティ)からのすべての線の始点を見て、これらのプロパティを視覚化できます。
2番目のプロパティは、次のマトリックス表現の例からわかります。ここで、行は位置、列は占有者番号、色は実験確率を表します。

100x100マトリックスの場合:

編集
楽しみのために、2番目の対角要素(最初は1 / n)の正確な式を計算しました。残りはできますが、大変な作業です。
h[n_] := (n-1)/n^2 + (n-1)^(n-2) n^(-n)
n = 3から6まで検証された値({8 / 27、57 / 256、564 / 3125、7105 / 46656})
編集
@wnoise answerで一般的な明示的な計算を少し実行すると、もう少し情報を得ることができます。
1 /nをp[n]に置き換えると、計算は未評価のままになります。たとえば、n = 7の行列の最初の部分を取得します(クリックすると大きな画像が表示されます)。

これは、nの他の値の結果と比較した後、マトリックス内のいくつかの既知の整数シーケンスを識別しましょう。
{{ 1/n, 1/n , ...},
{... .., A007318, ....},
{... .., ... ..., ..},
... ....,
{A129687, ... ... ... ... ... ... ..},
{A131084, A028326 ... ... ... ... ..},
{A028326, A131084 , A129687 ... ....}}
これらのシーケンス(場合によっては異なる符号が付いている)は、すばらしいhttp://oeis.org/にあります。
一般的な問題を解決することはより困難ですが、これが始まりであることを願っています