成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

忘我之乘積;及蓄水池抽樣精妙解法

開發 項目管理
給你一個數組A[1..n],請你在O(n)的時間里構造一個新的數組B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法運算。蓄水池抽樣(Reservoir Sampling)問題分析

今日面試題:忘我之乘積

給你一個數組A[1..n],請你在O(n)的時間里構造一個新的數組B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法運算。

蓄水池抽樣(Reservoir Sampling)問題分析

問題:

要求從N個元素中隨機的抽取k個元素,其中N無法確定。

這種應用的場景一般是數據流的情況下,由于數據只能被讀取一次,而且數據量很大,并不能全部保存,因此數據量N是無法在抽樣開始時確定的;但又要保持隨機性,于是有了這個問題。所以搜索網站有時候會問這樣的問題。

這里的核心問題就是“隨機”,怎么才能是隨機的抽取元素呢?我們設想,買彩票的時候,由于所有彩票的中獎概率都是一樣的,所以我們才是“隨機的”買彩票。那么要使抽取數據也隨機,必須使每一個數據被抽樣出來的概率都一樣。

分析:

由于N無法確定,數據只能讀取一次,并且要求隨機,就是每個元素抽出的概率一樣,都是k/N

面試的時候,經常會在紙上通過一個小的例子來找到好的解決方案。比如先讓你從100個元素中等概率抽取出10個元素。后來又向集合中添加了20個元素,變成了120個元素等概率抽取10個,怎么樣才能隨著N的動態改變而讓N無論等于多少時這N個元素都等概率被抽取呢?

解法一:最小k個指紋

找到一個哈希函數能產生隨機數,同時用一個k個元素的堆用來保存最小的k個元素。那么過一遍所有的元素,計算每個的哈希值,通過堆來選擇k個元素。

這個算法看起來很精妙,會有什么問題嗎?(思考)

解法二:數學計算

先選中前k個, 從第k+1個元素到最后一個元素為止, 以1/i  (i=k+1, k+2,...,N) 的概率選中第i個元素, 并且隨機替換掉一個原先選中的元素, 這樣遍歷一次得到k個元素, 可以保證完全隨機選取。

看來簡單的算法,怎么能確保每個元素被選中的概率是k/N?

任意元素G在i輪留下來的概率:

  1. P(G留下) = P(G已經存在) * P(G沒有被替換)   
  2.          = P(G已經存在) * (1 - P(G被替換))   
  3.          = P(G已經存在) * (1 - P(第i個元素要替換某個元素) * P(某個元素是G))   
  4.          = (k/i) * (1 - (k/(i+1)) * (1/k))   
  5.          = (k/i) * (1 - (1/(i+1)))   
  6.          = (k/i) * (i/(i+1))   
  7.          = (k/(i+1))   

證畢!

這個題有很多的變種,比如,

給你一個長度為N的鏈表。N很大,但你不知道N有多大。你的任務是從這N個元素中隨機取出k個元素。你只能遍歷這個鏈表一次。你的算法必須保證取出的元素恰好有k個,且它們是完全隨機的(出現概率均等)。

從一個不知長度的文件中隨機抽出k行。

從實時的搜索詞中隨機抽出k個詞。

原文鏈接:http://www.ituring.com.cn/article/49301

責任編輯:陳四芳 來源: 圖靈社區
相關推薦

2013-10-16 15:50:20

Google面試題

2013-10-16 15:57:39

數組二叉樹

2011-01-05 10:32:58

企業數據中心運維管理北塔

2023-12-25 14:44:52

Java數組

2022-12-28 16:47:06

ICT

2011-09-09 10:10:13

SQL數據庫點滴

2017-10-16 10:42:27

前端JavaScript浮點數

2021-04-20 14:15:42

人工智能機器學習

2009-07-02 14:59:28

Java考研試題

2010-06-13 11:05:52

2020-10-09 12:41:04

算法優化場景

2011-05-24 13:33:45

2024-08-14 18:18:47

2011-04-15 13:12:09

.NETMEF

2021-10-18 08:28:03

Kafka架構主從架構

2011-02-13 13:04:00

HTML 5Web

2021-08-30 09:30:29

Kafka高性能設計

2023-09-11 13:27:00

數據訓練

2010-08-12 09:45:33

jQuery自定義事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: .国产精品成人自产拍在线观看6 | 国产日韩欧美中文 | 日本三级网站在线 | 国产日韩欧美一区二区在线播放 | 日韩一区二区免费视频 | 久久91av| 欧美精品一区二区三区在线播放 | 请别相信他免费喜剧电影在线观看 | 国产精品永久免费视频 | 超碰最新在线 | 成人小视频在线观看 | 久久久久久免费毛片精品 | 国产精品成人久久久久 | 亚洲精品一区二区网址 | 久久久精| 永久免费视频 | 国产一卡二卡三卡 | 综合久久99| 久久r免费视频 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 精品久久国产 | 一级片免费视频 | 婷婷综合久久 | 国产精品国产a级 | 日韩av三区 | 欧美精品在线观看 | 中文字幕伊人 | www.青青草 | 五月婷婷视频 | 国产91久久精品一区二区 | 亚洲在线中文字幕 | 91在线观看免费视频 | 亚洲国产成人久久久 | 看黄在线 | 亚洲网站在线播放 | 日韩精品视频一区二区三区 | 精品一二 | 欧美aaa| 人人看人人射 | 久久久婷婷 | 成人免费av在线 |