[英]multithreaded generation of all numbers in range in random order
我正在尋找最好的算法,其中M個線程生成給定范圍(1 .. N)中的所有數字,但順序隨機。 每個數字只能生成一次,並且結果數字的分布(是否是個好術語?)應盡可能相等(在線程中和任何給定線程內部)
所以,我的第一次嘗試是
就內存(N位)而言,算法已經足夠好,而對於O復雜度(如果我是正確的話,則為N * N)可能不夠好,但是分布似乎並不完全相等
所以這里的問題:
是否有更好的算法(在內存使用,復雜性以及首先是結果分配方面)?
Michael的擴展建議是使用線性時間算法(例如Fisher-Yates)按順序生成統一的隨機排列。 然后,您可以使用靜態分區方案為線程分配隨機數(例如,使用k個線程,[0..k-1]中的線程i將元素的值從n * i / k包括在內,變為n *(i + 1)/ k排它),或者您可以並行地從排列中“彈出”(例如,存儲向量的當前長度,然后獲取並加-1以獲取用於獲取下一個元素的索引,或者僅使用互斥體)。
如果這不是可接受的解決方案,那么請准確說明為什么會這樣,以及隨后您對隨機數的處理方式–很難想象這種情況下順序處理會變得非常昂貴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.