概率取樣問題

2021-05-22 18:34:01 字數 555 閱讀 7284

問題:程式輸入兩個整數m和n,其中m

顯然,演算法的執行時間為o(n)。

(2)基於集合的演算法:在乙個初始為空的集合裡面插入隨機整數,直到個數足夠,核心問題是如何實現集合s。我們可以考慮有序鍊錶、二叉樹等資料結構,但最直接的辦法是利用c++標準模板庫中的set容器。

c++ stl規範要求每次插入操作都在o(logm)時間內完成,而遍歷集合則需要o(m)時間。因此整個程式需要o(mlogm)時間(當m相對於n較小時)。但是該資料結構的空間開銷比較大。

當n比較大而m接近於n時,基於集合的演算法需要生成大量的隨機數,而其中很多隨機數都要丟掉(因為之前集合中已經存在這個數了),這導致很多不必要的執行時間開銷。bob floyd給出了乙個演算法,使得即使在最壞情況下也只使用m個隨機數。如下(c++實現):

(3)排序演算法:生成隨機整數的有序子集的另一種方法是把包含整數0~n-1的陣列順序打亂,然後把前m個元素排序輸出。

演算法需要n個元素的記憶體空間和o(n+mlogm)的時間。

關鍵演算法設計思想:掃瞄策略、概率測試(隨機數生成)、集合資料結構、搜尋策略、排序策略。

概率取樣3 MCMC

前面的取樣方法受限於高維,這裡mcmc解決了這個問題。我們知道很多mc都有乙個穩態特性,此時乙個mc對應於乙個概率分布,如果能使這個分布和要取樣的分布p z 一樣,那麼每次對p z 的取樣就等同於狀態的一次轉移。如果我們將轉移概率分成兩個部分 建議轉移和判斷轉移,即先從當前狀態和建議轉移獲得樣本,然...

(12)取樣問題

一 簡介 問題描述 程式的輸入包含兩個整數m和n,其中m 1 一般情況下,如果要從r個剩餘的整數中選出s個,我們以s r的概率來選擇下乙個數。如下偽 所示 select m remaining n for i 0,n if bigrand remaining select print i selec...

幾何概率問題 相遇概率

假設小白與小仙晚上7點到8點之間都會前往某地看燈展,約定到的人等另外乙個人15分鐘方可離開,若他們在限時內到達,相遇的概率是多少?解析 這是乙個幾何概率問題。他們能見面的充要條件是時間差不超過15分鐘,即1 4小時。因為兩人沒有確切的時間,故樣本點由兩個數 甲乙兩人各自到達的時刻 組成。以7點鐘作為...