一道概率算法
問題:一個API,以概率p輸出1,以概率1-p輸出0,請你設計以算法,call這個API,以概率1/2輸出1,以概率1/2輸出0
?
答案:連續call 2次這個api, 如果輸出序列是01,那么就輸出0,如果是10,那么就輸出1,是其它情況(00,11),重做一遍前面的步驟
?
算法的證明:
第一輪call 2次這個api,產生的序列的概率是01 (1-p)*p, 10 p*(1-p), 00 (1-p)^2, 11 p^2,按照我們的算法(答案),以 (1-p)*p的概率輸出0,以p*(1-p)的概率輸出1,以(1-p)^2+p^2的概率重新執行我們的算法,此時輸出0的概率是(1-p)*p + ((1-p)^2+p^2)*(1-p)*p, 輸出1的概率是p*(1-p) + ((1-p)^2+p^2)*p*(1-p),再以((1-p)^2+p^2)^2的概率重現執行我們的算法。。。可以看出,按照我們的算法,產生1的概率是一個級數,并且是收斂的,因為0<(1-p)^2+p^2<1,很容易計算它等于0.5,同理產生0的概率也是0.5。
?
類似的問題:
一個API,能等概率地產生1-5的整數,如果call這個api,等概率地產生1-7的整數
轉載于:https://www.cnblogs.com/Torstan/archive/2012/05/21/2511737.html
總結
- 上一篇: 同期及上期数据对比处理示例.sql
- 下一篇: 多域名登录方案思考