九章演算法面試題17 從輸入流中隨機取記錄

2021-07-02 12:37:59 字數 559 閱讀 1064

有乙個很大很大的輸入流,大到沒有儲存器可以將其儲存下來,而且只輸入一次,如何從這個輸入流中等概率隨機取得m個記錄。

開闢一塊容納m個記錄的記憶體區域,對於資料流的第n個記錄,以m/n的概率將其留下(前m個先存入記憶體中,從第m+1個開始),隨機替換m個已存在的記錄中的乙個,這樣可以保證每個記錄的最終被選取的概率都是相等的。

這個題目除了需要給出正確解答以外,還需要證明你的解答。考察的是對概率隨機問題的掌握情況和歸納法的運用。下面給出乙個簡單的證明:

設資料流中已經有n個記錄流過,在記憶體中的m個記錄中,假設都是等概率取得的,每個數命中的概率都為:mn。對於第n+1個記錄,以mn+1的概率選中,如果沒有選中,則記憶體中的m個記錄均被留下來,每個數留下來其概率為:mn * (1-mn+1) = m(n+1-m)n(n+1);如果選中,新留下來的數概率自然是mn+1,而原來記憶體中的m個數中留下來m-1個數,每個數留下來的概率是:mn*mn+1*m-1m = m(m-1)n(n+1)。兩種情況下概率之和為m(m-1)n(n+1)+m(n+1-m)n(n+1)=mn+1,即為原來被選中數,繼續被選中的概率。由此我們不難得出,記憶體中每個數被選中概率一直都是mn。

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...

九章演算法面試題33 陣列波峰

乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...