生成k個不同的隨機數(1 n)

2021-06-22 10:03:02 字數 557 閱讀 3203

《程式設計珠璣》習題1.4:如果認真考慮了習題3,你將會面對生成小於n且沒有重複的k個整數的問題。最簡單的方法就是使用前k個正整數。這個極端的資料集合將不會明顯的改變位圖方法的執行時間,但是可能會歪曲系統排序的執行時間。如何生成位於0至n - 1之間的k個不同的隨機順序的隨機整數?盡量使你的程式簡短高效。

(題目copy from

我找到最好的方法:fisher-yates shuffle

(

#include #include #include #include using namespace std;

#define n 10

/*to shuffle an array a of n elements (indices 0..n-1):

for i from n − 1 downto 1 do

j ← random integer with 0 ≤ j ≤ i

exchange a[j] and a[i]

*/void generaterandom1(int *random)

}int main()

PHP生成N個不重複的隨機數

原理就是將陣列順序隨即打亂 然取該陣列中的某一段 方法1 range 是將1到100 列成乙個陣列 numbers range 1,100 shuffle 將陣列順序隨即打亂 shuffle numbers array slice 取該陣列中的某一段 result array slice numbe...

PHP 生成N個不重複的隨機數

起因 有25幅作品拿去投票,一次投票需要選16幅,單個作品一次投票只能選擇一次。前面有個程式設計師捅了漏子,忘了把投票入庫,有200個使用者產生的投票序列為空。那麼你會如何填補這個漏子?當然向上級反映情況。但是我們這裡討論的是技術,就是需要生成1 25之間的16個不重複的隨機數,去填補。具體怎麼設計...

生成k個小於n的互不相同的隨機數

核心 讓每個數被選中的概率都為k n.隨機取出乙個數,剩下的裡面再取出乙個數,重複k次。方法一 利用洗牌的原理,將n個數 0至n 1 按次序排好,讓最後乙個數和乙個隨機 0 n 1 挑選出的位子進行互換,再讓倒數第2個數和 0 n 2 位置中挑選出來的位置進行互換,依次執行k次,陣列中的最後k個數就...