2013-01-08 120 views
0

我需要生成100隨機索引在一個說5000字的數組中arr[5000]。我認爲rand()將使用更多的CPU,所以我不想循環它100次。我只想調用它一次,並希望有機制有隨機數組索引。我的想法是爲前20個索引設置隨機值,並生成一個偏移量並繼續添加到生成的隨機值中。即如果10是前20個指數的隨機值,那麼如果偏移量是6那麼我的隨機數就是10,16,22,28...etc 您認爲這是個好主意嗎?你能推薦其他的嗎?謝謝。隨機數字創建

+1

調用'rand()'100次不會是一個問題。 –

+0

即使調用rand()〜10 mil也不會比大多數可以避免調用rand的東西更糟...... –

+0

您想實現的僞隨機性的質量是多少?意思是,沒有高質量的隨機指數會有多重要?無論如何,我會建議遵循Arvind關於LCG的評論。如果隨機性非常重要,那就去實施梅森扭轉者。在任何情況下,LCG在CPU方面都很便宜。 – nvlass

回答

7

這是一個可怕的想法,結果值將不會是「隨機」的。

只需做一個循環,併爲您需要的每個號碼撥打rand()。它不會「使用更多的CPU」(超過什麼?),它會沒事的。

此外,當然要注意,rand()通常是一個僞隨機生成器,最好還是比你的方法更好。

+0

我剛剛舉了一個'arr [5000]'的例子,實際上我有'2000 * arr [5000]',我需要'5000'每個數組有'2000'隨機索引。你還認爲'rand()'不會佔用CPU。也許我的想法沒有準確的隨機數,但至少每次當特定範圍的rand()給出不同的數字並且增加了偏移量時,我都有不同的數字。 –

0

使用rand()是個好主意。然而,如果你真的想做你的僞隨機生成器(99%的情況下不是正確的答案),那麼看看Linear Congruential Generator - 它背後的數學很簡單,它是libc的基礎隨機()實現。你可以試試同樣的樂趣!這是另一個link