題目:輸入一段int型資料流,輸入未完成之前並不知道資料流的長度,要求在o(1)空間複雜度的前提下隨機選出乙個元素,並保證每乙個元素被選中的概率是一樣的。我的解法如下:
假如輸入的資料流依次是10、20、30、40、……
收到10時:以概率1選擇10;
收到20時:以概率1/2選擇10,以概率1/2選擇20;
收到30時:以概率2/3選擇上一次選到的元素,以概率1/3選擇30;
收到40時:以概率3/4選擇上一次選到的元素,以概率1/4選擇40;
…… 收到第n個數時:以概率(n-1)/n選擇上一次選到的元素,以概率1/n選擇當前元素。
高階題:那麼如何等概率選取k個數呢?解法類似,先以概率1選取前k個數,然後:
對於第k+1個數,以k/(k+1)的概率選擇它,如果被選中,則隨機替換原來的k個數中的乙個;
對於第k+2個數,以k/(k+2)的概率選擇它,如果被選中,則隨機替換原來的k個數中的乙個;
…… 對於第n個數,以k/n的概率選擇它,如果被選中,則隨機替換原來的k個數中的乙個。
谷歌面試題 資料流的中值
谷歌面試題 資料流的中值 設計和實現一種資料結構能支援兩種操作,insert value 和getmedian in english,design and implement a collection that supports two operations insert value and get...
面試題41 資料流中的中位數
題目 解答 方法一 c 超時 1 class medianfinder 1011 returns the median of current data stream 12double findmedian 1319 方法二 二分查詢插入 方法一的缺點在於對陣列進行了排序操作,導致時間複雜度較高,假如...
面試題 數學與概率 設計隨機數生成器
假設你已經有乙個隨機數生成器,能夠以概率p生成0,概率1 p生成1,請問如何設計演算法以概率q等概率地生成0 6這七個數字中的乙個?即每個數字的概率均為q,q 1 7.我們先從簡單的情況開始考慮,假設需要生成0和1,二者概率均為q。那麼我們可以讓已有的隨機數生成器產生兩個數字,那麼產生的數字及概率是...