攪乱順列を求める

1,2,3,4..Nの要素からなる順列において、i番目の要素が i でない順列を攪乱(かくらん)順列といいます。完全順列とも言うようです。
複数人でプレゼントを交換する場合のパターンだと言えば具体的イメージが湧くと思います。

Silverlightで作成したプログラムです。

攪乱順列を求めるのに、「n個の異なった要素の中から m個を選ぶ順列 」で示したPermutationクラスを利用しています。

まず、普通の(重複のない)順列を求め、次に、i 番目の要素が i である場合を取り除くという当たり前すぎる方法で、攪乱順列を求めています。

整数以外でも扱えるように、ジェネリックメソッドにしていますので、i 番目の要素が、オリジナルの i番目の要素と同じかどうかを調べることで、判断しています。

攪乱順列を求めているDrangement.csは、Silverlight非依存になっています。


■Derangement.cs

■MainPage.xaml.cs

■MainPage.xaml