私は自分が取り組んでいる個人的なプロジェクトを持っていて、解決できないように見える問題があります(まあ、私はそれをすぐに解決することはできません)。
私にはx[1..|x|]
人々のグループとx
要素のグループがあるとしましょう。
i
x個のグループ(グループ番号は個人番号用)を作成したいのですi
が、各グループにはy
異なる要素があります。
例:10人と10個の要素があり、各グループに2つの要素が必要な場合:
| 0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
|___________________________________________|
| 7 |4 |0 |6 |2 |8 |3 |1 |9 |5 |
| 6 |9 |5 |8 |7 |0 |2 |3 |1 |4 |
一番上の行は人々を表してい(0..9)
ます;
各人の下の2つの数字は、彼が持っている要素を示しています。
注意:すべての要素は2回だけ表示されます(それ以上でもそれ以下でもありません)。また、個人番号に要素番号を含めることはできないことに
注意してください。
例:人番号3は要素番号3を持つことはできません。i
i
私の問題は、それらのグループを(すばやく)作成する方法です。
これまでに見つけた最善の解決策は、x
列とy
行を含む行列を作成することです。
サイズの配列を取得してx
シャッフルし、マトリックスに挿入できないかどうかを確認します。可能であれば、次の行に移動します。もう一度シャッフルできず、挿入できるかどうかを確認します。
問題は、少数(1000人/要素および各グループで50要素)でもコードが非常に遅いことです。
問題はシャッフルにあります。行(〜13)に一致するものを見つけようとすると、マトリックス内に配置できる行が見つかるまで何度も再シャッフルする必要があります。
誰かがこのことをすばやく行う方法を知っていますか?どんなアイデアでも大歓迎です!!
どうも。