精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

張洋:基數估計算法概覽

開發 后端 前端 算法
譯注:給定一個數據集,求解數據集的基數(Cardinality,也譯作“勢”,表示一個數據集中不同數據項的數量)是非常普遍的一個需求。許多業務需求最終可以歸結為基數求解,如網站訪問分析中的UV(訪客數,指一段時間內訪問網站的不同用戶的數量)。由于數據集基數是不可聚集指標(兩個數據集總的基數無法通過分別的基數簡單計算),因此如果要得到N個數據集任意組合的基數,需要2N次數據集去重計算,是一個復雜度非常高的計算過程。當數據量較小時,可以采取bitmap“按位或”方法獲得較高的計算速度;而當數據量很大時,一般會采取概率算法

假如你有一個巨大的含有重復數據項數據集,這個數據集過于龐大以至于無法全部放到內存中處理。現在你想知道這個數據集里有多少不同的元素,但是數據 集沒有排好序,而且對如此大的一個數據集進行排序和計數幾乎是不可行的。你要如何估計數據集中有多少不同的數據項?很多應用場景都涉及這個問題,例如設計 數據庫的查詢策略:一個良好的數據庫查詢策略不但和總的數據量有關,同時也依賴于數據中不同數據項的數量。

我建議在繼續閱讀本文前你可以稍微是思考一下這個問題,因為接下來我們要談的算法相當有創意,而且實在是不怎么直觀。

一個簡單直觀的基數估計方法

讓我們從一個簡單直觀的例子開始吧。假設你通過如下步驟生成了一個數據集:

1、隨機生成n個服從均勻分布的數字

2、隨便重復其中一些數字,重復的數字和重復次數都不確定

3、打亂這些數字的順序,得到一個數據集

我們要如何估計這個數據集中有多少不同的數字呢?因為知道這些數字是服從均勻分布的隨機數字,一個比較簡單的可行方案是:找出數據集中最小的數字。 假如m是數值上限,x是找到的最小的數,則m/x是基數的一個估計。例如,我們掃描一個包含0到1之間數字組成的數據集,其中最小的數是0.01,則一個 比較合理的推斷是數據集中大約有100個不同的元素,否則我們應該預期能找到一個更小的數。注意這個估計值和重復次數無關:就如最小值重復多少次都不改變 最小值的數值。

這個估計方法的優點是十分直觀,但是準確度一般。例如,一個只有很少不同數值的數據集卻擁有很小的最小值;類似的一個有很多不同值的數據集可能最小 值并不小。最后一點,其實只有很少的數據集符合隨機均勻分布這一前提。盡管如此,這個原型算法仍然是了解基數估計思想的一個途徑;后面我們會了解一些更加 精巧的算法。

[[104049]]

基數估計的概率算法

最早研究高精度基數估計的論文是Flajolet和Martin的Probabilistic Counting Algorithms for Data Base Applications,后來Flajolet又發表了LogLog counting of large cardinalitiesHyperLogLog: The analysis of a near-optimal cardinality estimation algorithm兩篇論文對算法進行了進一步改進。通過逐篇閱讀這些論文來了解算法的發展和細節固然有趣,不過在這篇文章中我會忽略一些算法的理論細節,把精力主要放在如何通過論文中的算法解決問題。有興趣的讀者可以讀一下這三篇論文;本文不會介紹其中的數學細節。

Flajolet和Martin最早發現通過一個良好的哈希函數,可以將任意數據集映射成服從均勻分布的(偽)隨機值。根據這一事實,可以將任意數據集變換為均勻分布的隨機數集合,然后就可以使用上面的方法進行估計了,不過只是這樣是遠遠不夠的。

接下來,他們陸續發現一些其它的基數估計方法,而其中一些方法的效果優于之前提到的方法。Flajolet和Martin計算了哈希值的二進制表示 的0前綴,結果發現在隨機數集合中,通過計算每一個元素的二進制表示的0前綴,設k為最長的0前綴的長度,則平均來說集合中大約有2k個不同的元素;我們 可以用這個方法估計基數。但是,這仍然不是很理想的估計方法,因為和基于最小值的估計一樣,這個方法的方差很大。不過另一方面,這個估計方法比較節省資 源:對于32位的哈希值來說,只需要5比特去存儲0前綴的長度。

值得一提的是,Flajolet-Martin在最初的論文里通過一種基于bitmap的過程去提高估計算法的準確度。關于這點我就不再詳述了,因為這種方法已經被后續論文中更好的方法所取代;對這個細節有興趣的讀者可以去閱讀原始論文。

到目前為止,我們這種基于位模式的估計算法給出的結果仍然不夠理想。如何進行改進呢?一個直觀的改進方法就是使用多個相互獨立的哈希函數:通過計算每個哈希函數所產生的最長0前綴,然后取其平均值可以提高算法的精度。

實踐表明從統計意義來說這種方法確實可以提高估計的準確度,但是計算哈希值的消耗比較大。另一個更高效的方法就是隨機平均(stochastic averaging)。這種方法不是使用多個哈希函數,而是使用一個哈希函數,但是將哈希值的區間按位切分成多個桶(bucket)。例如我們希望取 1024個數進行平均,那么我們可以取哈希值的前10比特作為桶編號,然后計算剩下部分的0前綴長度。這種方法的準確度和多哈希函數方法相當,但是比計算 多個哈希效率高很多。

根據上述分析,我們可以給出一個簡單的算法實現。這個實現等價于Durand-Flajolet的論文中提出的LogLog算法;不過為了方便,這個實現中統計的是0尾綴而不是0前綴;其效果是等價的。

  1. def trailing_zeroes(num): 
  2.   """Counts the number of trailing 0 bits in num.""" 
  3.   if num == 0
  4.     return 32 # Assumes 32 bit integer inputs! 
  5.   p = 0 
  6.   while (num >> p) & 1 == 0
  7.     p += 1 
  8.   return p 
  9.    
  10. def estimate_cardinality(values, k): 
  11.   """Estimates the number of unique elements in the input set values. 
  12.    
  13.   Arguments: 
  14.     values: An iterator of hashable elements to estimate the cardinality of. 
  15.     k: The number of bits of hash to use as a bucket number; there will be 2**k buckets. 
  16.   ""
  17.   num_buckets = 2 ** k 
  18.   max_zeroes = [0] * num_buckets 
  19.   for value in values: 
  20.     h = hash(value) 
  21.     bucket = h & (num_buckets - 1) # Mask out the k least significant bits as bucket ID 
  22.     bucket_hash = h >> k 
  23.     max_zeroes[bucket] = max(max_zeroes[bucket], trailing_zeroes(bucket_hash)) 
  24.   return 2 ** (float(sum(max_zeroes)) / num_buckets) * num_buckets * 0.79402 

這段代碼實現了我們上面討論的估計算法:我們計算每個桶的0前綴(或尾綴)的最長長度;然后計算這些長度的平均數;假設平均數是x,桶數量是m,則 最終的估計值是2x×m。其中一個沒提過的地方是魔法數字0.79402。統計分析顯示這種預測方法存在一個可預測的偏差;這個魔法數字是對這個偏差的修 正。實際經驗表明計算值隨著桶數量的不同而變化,不過當桶數量不太小時(大于64),計算值會收斂于估計值。原論文中描述了這個結論的推導過程。

這個方法給出的估計值比較精確 —— 在分桶數為m的情況下,平均誤差為1.3/m−−√。因此對于分桶數為1024的情況(所需內存1024*5 = 5120位,或640字節),大約會有4%的平均誤差;每桶5比特的存儲已經足以估計227的數據集,而我們只用的不到1k的內存!

讓我們看一下試驗結果:

  1. >>> [100000/estimate_cardinality([random.random() for i in range(100000)], 10for j in range(10)] 
  2. [0.98256161525488070.99057528768396720.9792417491104071.0506626163576790.9370905787520790.98789682766295050.98123232031177481.04569602624670190.94154134138739750.9608567203911741

不錯!雖然有些估計誤差大于4%的平均誤差,但總體來說效果良好。如果你準備自己做一下這個試驗,有一點需要注意:Python內置的 hash() 方法將整數哈希為它自己。因此諸如 estimate_cardinality(range(10000), 10) 這種方式得到的結果不會很理想,因為內置 hash() 對于這種情況并不能生成很好的散列。但是像上面例子中使用隨機數會好很多。

提升準確度:SuperLogLog和HyperLogLog

雖然我們已經有了一個不錯的估計算法,但是我們還能進一步提升算法的準確度。Durand和Flajolet發現離群點會大大降低估計準確度;如果 在計算平均值前丟棄一些特別大的離群值,則可以提高精確度。特別的,通過丟棄最大的30%的桶的值,只使用較小的70%的桶的值來進行平均值計算,則平均 誤差可以從1.3/m−−√降低到1.05/m−−√!這意味著在我們上面的例子中,使用640個字節可情況下可以將平均誤差從4%降低到3.2%,而所 需內存并沒有增加。

最后,Flajolet等人在HyperLogLog論文中給出一種不同的平均值,使用調和平均數取代幾何平均數(譯注:原文有誤,此處應該是算數 平均數)。這一改進可以將平均誤差降到1.04/m−−√,而且并沒不需要額外資源。但是這個算法比前面的算法復雜很多,因為對于不同基數的數據集要做不 同的修正。有興趣的讀者可以閱讀原論文。

并行化

這些基數估計算法的一個好處就是非常容易并行化。對于相同分桶數和相同哈希函數的情況,多臺機器節點可以獨立并行的執行這個算法;最后只要將各個節 點計算的同一個桶的最大值做一個簡單的合并就可以得到這個桶最終的值。而且這種并行計算的結果和單機計算結果是完全一致的,所需的額外消耗僅僅是小于1k 的字節在不同節點間的傳輸。

結論

基數估計算法使用很少的資源給出數據集基數的一個良好估計,一般只要使用少于1k的空間存儲狀態。這個方法和數據本身的特征無關,而且可以高效的進 行分布式并行計算。估計結果可以用于很多方面,例如流量監控(多少不同IP訪問過一個服務器)以及數據庫查詢優化(例如我們是否需要排序和合并,或者是否 需要構建哈希表)。

英文原文:Damn Cool Algorithms: Cardinality Estimation

譯文鏈接:http://www.codinglabs.org/html/cardinality-estimation.html

責任編輯:林師授 來源: 張洋的博客
相關推薦

2022-08-02 11:08:55

網絡安全云安全審計

2011-04-20 16:05:15

基數排序

2012-10-31 11:21:30

網站統計數據收集開發

2013-08-20 14:52:10

華為云計算華為云服務

2021-10-12 09:31:22

算法模型技術

2022-01-26 07:52:17

去中心云計算云存儲云計算

2012-06-26 14:15:52

電信行業云計算案例

2010-10-29 13:50:23

2021-04-22 10:07:45

Java數據結構算法

2019-01-21 09:41:37

GitHub數據計算

2022-07-14 18:21:06

高基數工業物聯網數據庫

2017-10-13 16:32:49

大數據計數原理

2025-06-26 09:22:33

2017-07-11 10:19:24

淺層模型機器學習優化算法

2024-09-03 17:00:41

2023-09-25 08:32:03

Redis數據結構

2011-10-28 11:22:46

云計算

2015-12-16 10:53:34

數據中心云計算數據中心

2009-12-29 13:43:26

WPF URI

2009-07-07 09:51:21

計算機世界洋CEO
點贊
收藏

51CTO技術棧公眾號

欧美成人hd| 九一国产在线观看| 精品午夜视频| 亚洲无人区一区| 久久精品国产第一区二区三区最新章节 | av丝袜天堂网| 国产黄在线播放| 国产精品一二一区| 欧美综合在线第二页| 殴美一级黄色片| 岛国精品一区| 欧美日韩成人一区| 国产精品自拍片| 日本三级在线播放完整版| 国产老妇另类xxxxx| 欧美自拍视频在线| 妺妺窝人体色www婷婷| 久久99性xxx老妇胖精品| 欧美一级高清片在线观看| 国产91对白刺激露脸在线观看| 色三级在线观看| jvid福利写真一区二区三区| 国产日韩精品电影| 久久亚洲天堂网| 一区二区日韩欧美| 亚洲一区二区精品| 天天躁日日躁狠狠躁免费麻豆| 99久久久国产精品免费调教网站| 亚洲午夜精品一区二区三区他趣| 亚洲草草视频| 欧洲天堂在线观看| 成人毛片在线观看| 91亚洲午夜在线| 国产乱码77777777| 一区二区毛片| 欧美精品电影在线| 久久国产美女视频| 视频在线不卡免费观看| 精品视频久久久| 欧美性生交xxxxx| 国产欧美视频在线| 欧美日韩激情一区| 成年人在线观看视频免费| 女人高潮被爽到呻吟在线观看| 国产精品对白交换视频 | 国产精品久在线观看| 国产精品一区二区三区四| 欧美三级午夜理伦三级中文幕| 在线视频亚洲欧美| 91精品久久久久久久久久久久| 久久夜色精品国产噜噜av小说| 91精品国产免费| 色婷婷一区二区三区av免费看| 在线国产成人影院| 在线视频国产一区| 国产三级三级三级看三级| 日韩电影大全网站| 日韩欧美中文在线| 日日碰狠狠躁久久躁婷婷| 天堂av中文在线观看| 午夜欧美视频在线观看| 日本十八禁视频无遮挡| 91老司机福利在线| 欧美视频免费在线| 男人天堂999| 日韩av超清在线观看| 日本高清不卡在线观看| 无码日韩人妻精品久久蜜桃| 91精品影视| 欧美军同video69gay| 中文字幕永久有效| 日韩中文一区二区| 亚洲第一精品夜夜躁人人躁 | 中文字幕人妻一区二区在线视频 | 欧美日韩影视| 久久久777精品电影网影网| 日本精品免费| 天天综合视频在线观看| 亚洲欧美在线另类| 日本aa在线观看| bbw在线视频| 色综合天天综合| 亚洲免费看av| 欧美专区一区| 亚洲国产精品字幕| 日本欧美一区二区三区不卡视频| 99国产精品免费视频观看| 欧美成aaa人片免费看| 国产无码精品久久久| 国产精品久久777777毛茸茸| 国产精品日韩在线一区| 国产免费一区二区三区免费视频| 国产成人精品亚洲日本在线桃色 | 国产欧美日韩精品一区二区三区| 在线视频中文亚洲| 青青草原在线免费观看视频| 国产欧美日本| 成人福利视频在线观看| 欧美一区二区三区成人片在线| 久久综合久色欧美综合狠狠| 一区二区国产日产| 国产白丝在线观看| 在线观看91精品国产入口| 一级黄色免费毛片| 久久av免费| 欧美激情综合色综合啪啪五月| 黑人一级大毛片| 老司机精品视频在线| 国产精品久久久对白| 福利在线视频导航| 午夜视频一区二区三区| 亚欧美在线观看| 久久99精品国产自在现线| 日韩中文字幕免费视频| 国产毛片aaa| 国产精品91一区二区| 日本一区二区三区在线视频 | 国产精品女主播视频| 丰满熟妇乱又伦| 国产精品高清亚洲| 97视频在线免费播放| 亚洲不卡视频| 自拍偷拍亚洲精品| www.国产高清| 国产成人欧美日韩在线电影| 亚洲亚洲精品三区日韩精品在线视频| av在线私库| 欧美一二三四区在线| 日本爱爱爱视频| 亚洲一区欧美二区| 国产精品免费一区二区三区观看| 日本中文字幕伦在线观看| 黑丝美女久久久| 亚洲精品乱码久久久久久蜜桃欧美| 色综合蜜月久久综合网| 国产精品18久久久久久首页狼| 色噜噜一区二区三区| 一区二区三区美女视频| 亚洲一区二区偷拍| 香蕉综合视频| 成人激情在线播放| 五月天婷婷在线视频| 欧美性猛片aaaaaaa做受| 免费看污黄网站在线观看| 亚洲精华国产欧美| 国产精品一区在线播放| 黄色在线看片| 亚洲大胆美女视频| 国产在线综合网| 成人久久久精品乱码一区二区三区 | 青草青草久热精品视频在线网站 | 中文 欧美 日韩| 国产偷国产偷精品高清尤物| 中文字幕日本最新乱码视频| 九九热hot精品视频在线播放| 欧美激情亚洲视频| 亚洲精品97久久中文字幕| 亚洲最大成人网4388xx| 日韩少妇一区二区| 国产精品一二| 日本一区二区久久精品| 成人精品国产| 久久久精品日本| 亚洲狼人综合网| 婷婷中文字幕综合| 亚洲日本精品视频| 久久成人免费网| 成年丰满熟妇午夜免费视频| 一区二区三区四区高清视频 | 一本一道久久a久久精品逆3p| 涩涩视频在线观看| 亚洲欧洲日韩在线| 污污免费在线观看| 日韩综合小视频| 国产a级片免费看| 豆花视频一区二区| 日韩av手机在线看| 黄色网址免费在线观看| 精品成人一区二区三区四区| 久草国产精品视频| 中文在线一区二区| 日本中文字幕有码| 另类亚洲自拍| 男女激烈动态图| 日韩大尺度在线观看| 国产精品久久久久一区二区| 成人午夜在线影视| 精品福利一区二区三区免费视频| 久久精品色妇熟妇丰满人妻| 国产精品亚洲第一| 国产九九九九九| 亚洲va久久| 国产色视频一区| 亚洲羞羞网站| 亚洲国产天堂网精品网站| 性色av免费观看| 亚洲欧美日本韩国| 香蕉视频污视频| 免费在线看成人av| 久久久久久av无码免费网站下载| 天堂综合网久久| 国产精品自产拍在线观看中文| a黄色片在线观看| 亚洲精品美女久久| 精品国产av 无码一区二区三区| 性久久久久久久| 影音先锋制服丝袜| 国产精品影音先锋| 久草福利视频在线| 欧美日韩亚洲一区三区| 欧美在线播放一区| 玖玖玖视频精品| 国产精品人人做人人爽| 欧美v亚洲v| 一本一本久久a久久精品综合小说| 99久久国产免费| 欧美日韩一级二级三级| 日韩精品一卡二卡| 国产精品福利电影一区二区三区四区| 亚洲欧美综合视频| 日韩高清在线一区| 国产 欧美 日韩 一区| 国产一区二区三区不卡视频网站| 51精品国产人成在线观看| 免费成人直播| 欧美精品激情在线观看| 第一福利在线| 亚洲精品不卡在线| 91资源在线视频| 色又黄又爽网站www久久| 国产精品老熟女一区二区| 国产清纯白嫩初高生在线观看91 | 九九久久九九久久| 国产成人精品999在线观看| 99在线观看视频网站| 成人亚洲网站| 欧美床上激情在线观看| 老司机av在线免费看| 日韩精品免费看| 动漫av一区二区三区| 欧美日韩精品欧美日韩精品一综合| 日本熟妇毛茸茸丰满| 亚洲精品国久久99热| 一本一本久久a久久| 久久精品视频一区二区三区| 国产一精品一aⅴ一免费| 极品少妇一区二区| 欧美一级特黄a| 九九精品视频在线看| 免费看a级黄色片| 午夜影院日韩| 日韩欧美国产综合在线| 午夜亚洲性色福利视频| aa在线观看视频| 亚洲精品偷拍| 久草精品在线播放| 免费日韩av| 日韩欧美在线播放视频| 国产精品日韩久久久| 老熟妇仑乱视频一区二区| 免费永久网站黄欧美| a在线视频观看| 一区二区三区福利| 中文字幕无码不卡免费视频| 蜜桃伊人久久| 激情网站五月天| 久久9热精品视频| 911av视频| 国产一区二区不卡老阿姨| 一级片免费在线观看视频| 成人免费视频网站在线观看| 呦呦视频在线观看| 91网上在线视频| 国产传媒国产传媒| 中文字幕在线不卡一区二区三区| 强制高潮抽搐sm调教高h| 国产精品成人一区二区艾草 | 国产成年人视频网站| 久久国内精品自在自线400部| 乳色吐息在线观看| 不卡的av中国片| 久久精品国产亚洲AV熟女| 欧美韩国日本不卡| 国产午夜激情视频| 懂色av影视一区二区三区| 男人的天堂av网站| 欧美不卡123| 亚洲欧美日韩成人在线| 亚洲人成网站777色婷婷| 在线观看黄av| 欧美激情精品久久久| 午夜伦理福利在线| 国产精品稀缺呦系列在线| 好吊妞国产欧美日韩免费观看网站| 久久精精品视频| 久久久影院免费| 一区二区三区精品国产| 一本久道久久久| 怡红院亚洲色图| 成人国产精品免费观看动漫| 亚洲色图27p| 亚洲福中文字幕伊人影院| 青青草视频在线观看免费| 91精品福利在线一区二区三区| 日本xxxxwww| 在线视频欧美日韩| 成人av影院在线观看| 国产专区精品视频| 欧美18免费视频| 一区不卡字幕| 日韩精品一二三区| 美女被艹视频网站| 成人av在线播放网站| 一级欧美一级日韩片| 亚洲男人的天堂av| 无码人妻av免费一区二区三区 | 久久精品色欧美aⅴ一区二区| 黄色在线观看www| 成人精品在线视频| 台湾色综合娱乐中文网| 国产一级做a爰片久久毛片男| 老司机精品久久| 美女被爆操网站| 国产欧美日韩在线| 国产又大又粗又爽| 欧美不卡123| 免费在线观看黄| 国产精品盗摄久久久| 精品福利一区| 少妇高潮流白浆| 久久99精品久久只有精品| av无码av天天av天天爽| 亚洲老司机在线| av中文字幕播放| 色七七影院综合| 日本韩国欧美| 欧美一区二区综合| 亚洲美女少妇无套啪啪呻吟| 波多野结衣免费观看| 国产喂奶挤奶一区二区三区| 国产精品视频一区在线观看| 精品国产一区二区国模嫣然| 免费黄色电影在线观看| 成人h猎奇视频网站| 欧美精选视频在线观看| 人妻熟妇乱又伦精品视频| 91香蕉视频黄| 日本系列第一页| 亚洲成人av在线播放| 白浆在线视频| 国产欧美在线一区二区| 亚洲欧美伊人| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 2019中文字幕在线| 久久大胆人体视频| 亚洲国产精品无码观看久久| www.爱久久.com| 国产网址在线观看| 亚洲成成品网站| 午夜影视一区二区三区| 久久99精品久久久久久久青青日本| 国内视频精品| 亚洲国产精品无码久久久久高潮| 亚洲香肠在线观看| 日韩在线视频免费| 国产精品69av| 精品国产123区| 丰满少妇在线观看| 亚洲男人的天堂在线观看| 精品人妻伦一区二区三区久久 | 欧美一区二区在线| 肉肉av福利一精品导航| 成人欧美一区二区三区黑人一| 欧美日本一区二区三区四区| 亚洲视频tv| 国产日韩在线视频| 亚洲一级影院| 少妇饥渴放荡91麻豆| 欧美性大战久久久| 乱人伦中文视频在线| 91福利视频导航| 欧美一级久久| 国产白丝一区二区三区| 欧美精品久久一区二区三区| 麻豆网站在线看| 不卡视频一区二区| 亚洲精选国产| 男人av资源站| 精品欧美一区二区在线观看| 免费成人在线电影| 色呦呦网站入口| 不卡在线观看av| www.com亚洲| 久久久久国产精品免费| 中文字幕精品影院| 日韩中文字幕免费在线| 尤物视频一区二区| 青青国产在线| 99视频在线播放| 久久青草久久|