隨機流取m個數(旅行家)

2022-03-04 05:10:23 字數 364 閱讀 1104

給定乙個未知長度的整數流,如何從中隨機選取個m隨機數。

解決方法:

定義長度為m的陣列,對於資料流中的前1000個關鍵字,顯然都要放到陣列中。

對於資料流中的的第n(n>m)個關鍵字,則這個關鍵字被隨機選中的概率為m/n。故以m/n 的概率用這個關鍵字去替換陣列中的乙個。這樣就可以保證所有關鍵字都以m/n的概率被選中。對於後面的關鍵字都進行這樣的處理,這樣就可以保證陣列中總是儲存著m個隨機關鍵字。

可以用歸納法證明

關鍵字都以m/n的概率被選中。

void swap(int* p, int* q)

void shuffle(int *arr, int n)

}

C 排列組合 N個數中取M個數

感謝一位好朋友和我分享了這樣的乙份 因為自己當時考慮的遞迴演算法相當糾結,怎樣遞迴都不大對,然後我的好朋友和我分享了一段這樣的 我現在分享給大家。題目 在n個數中取m個數,用的方法使用的是開闢乙個長度為100的int型陣列,0 1 2 99 100 比如說測試資料為 4 2 也就是從1 4中取2個數...

m個數取n個進行組合 C m n

m個數取n個進行組合 10反轉置換法 演算法思想 1 初始化乙個m個元素的陣列 全部由0,1組成 將前n個初始化為1,後面的為0。這時候就可以輸出第乙個組合序列了。2 從前往後找,找到第乙個10組合,將其反轉成01,然後將這個10組合前面的所有1,全部往左邊推 即保證其前面的1都在最左邊。這時又可以...

隨機生成零到n之間的m個數

隨機生成0到n之間的m個數 如何用隨機數生成0到n之間的m個不重複的數 1 最直接的方法就是先隨機生成乙個0到n之間的數,判斷這個數是否已被選上,如果以前沒選過,則選上,如果以前已選,則丟棄 void common int n,int m int randnum int malloc n sizeo...