我有一個我正在工作的個人項目,我有一個我似乎無法解決的問題(好吧,我無法快速解決問題)。無法在合理的運行時間創建隨機組
比方說,我有一組x[1..|x|]
人,和一組x
元素。
我要創建的X基團(組號i
爲人數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)
;
每個人下面的兩個數字表示他擁有哪些元素。
注意:每個元素只出現兩次(不多也不少)。
另請注意,人員編號i
不能包含元素編號i
。
例如:人員編號3不能有元素編號3.
我的問題是如何創建這些組(快速)。
到目前爲止,我發現的最佳解決方案是創建一個包含x
列和y
行的矩陣;
取一個大小爲x
的數組,然後對其進行洗牌,然後查看我是否無法將其插入矩陣。如果可以的話,轉到下一行;如果我不能再洗牌,看看現在是否可以插入。
問題是,即使是小數字(1000人/元素和每個組50個元素)代碼是非常緩慢的。
問題在於隨機洗牌,當它試圖找到匹配的行(〜13)時,需要重新洗牌多次,直到找到可以放置在矩陣內的行。
有沒有人知道這件事可以如何快速完成?任何想法都會受到歡迎!
Thx。
他們必須是隨機的嗎? – Beta
@beta,是的,一個不隨機的解決方案將是做一個轉變,然後我可以很快找到解決方案。 我曾想過從範圍1中選擇一組素數... .. | x | (隨機選擇y素數),然後用素數作爲移位參數進行移位。但我不知道結果會是多麼隨意。 – user1677989