我正在尋找一種算法來隨機化一組長度爲n
的項目,其中可能有多個項目(1到m
)。另外一個限制是相同的項目可能不會出現在前一項的k
項目中。重複約束的隨機包
你可能會認爲n
遠低於100,總是有一個解決方案,即m
以及k
都很小。如果有幫助,您還可以將輸入更改爲<項目列表,頻率>對。
爲了給出一點上下文,假設我在遊戲中生成任務並且有一組目標可供選擇。有些目標可能會出現多次(例如「殺死老闆」),但不應該彼此接近,所以只需簡單地洗牌即可。
我可以隨機播放列表,然後在跟蹤項目間隔的同時迭代它,如果它沒有通過測試,則從新的隨機播放開始,但是我正在尋找一個更加優雅的解決方案,該解決方案也應該是緊湊的,實用的很容易用例如C,C++或JavaScript。換句話說,它不應該依賴於我可能不瞭解的特殊語言功能或標準庫函數,或者可能難以實現。但是,您可能會認爲可以使用最常用的列表操作,例如排序和混排。
花了我一段時間來了解僞代碼,但它看起來像試驗和錯誤類別中的一個漂亮的解決方案。 – Tapio 2012-07-27 09:05:35