AMQ(approximate membership queries)介绍
目錄簡介舉例Bloom Filter算法過程1)位數組:2)添加元素,k個獨立hash函數3)判斷元素是否存在集合Quotient Filter and Cascade Filter參考文獻
簡介
AMQ(approximate membership queries近似成員查詢):
是一種字典數據結構
是在空間使用和查詢錯誤率的權衡
用于解決大量數據的處理
擁有以下操作
查找
插入
可選擇元素的刪除
設e誤檢率,當查詢時報出absent值時,e的概率為誤檢,1-e的概率為確實沒有該元素。
可以通過調整e值來調整準確度和空間使用的關系
舉例
Bloom Filter
Bloom filter
Bloom Filter(BF)是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表示一個集合
歷史:Bloom-Filter,即布隆過濾器,1970年由Bloom中提出。
應用:用于檢索一個元素是否在一個集合中。
特點:Bloom Filter有可能會出現錯誤判斷,但不會漏掉判斷。
適用場景:Bloom Filter”不適合那些“零錯誤的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter比其他常見的算法(如hash,折半查找)極大節省了空間。
優點:是空間效率和查詢時間都遠遠超過一般的算法,
缺點:是有一定的誤識別率和刪除困難。
算法過程
原理要點:一是位數組, 二是k個獨立hash函數。
1)位數組:
假設Bloom Filter使用一個m比特的數組來保存信息,初始狀態時,Bloom Filter是一個包含m位的位數組,每一位都置為0,即BF整個數組的元素都設置為0。
2)添加元素,k個獨立hash函數
為了表達S={x1, x2,…,xn}這樣一個n個元素的集合,Bloom Filter使用k個相互獨立的哈希函數(Hash Function),它們分別將集合中的每個元素映射到{1,…,m}的范圍中。
當我們往Bloom Filter中增加任意一個元素x時候,我們使用k個哈希函數得到k個哈希值,然后將數組中對應的比特位設置為1。即第i個哈希函數映射的位置hashi(x)就會被置為1(1≤i≤k)。
注意,如果一個位置多次被置為1,那么只有第一次會起作用,后面幾次將沒有任何效果。在下圖中,k=3,且有兩個哈希函數選中同一個位置(從左邊數第五位,即第二個“1“處)。
3)判斷元素是否存在集合
在判斷y是否屬于這個集合時,我們只需要對y使用k個哈希函數得到k個哈希值,如果所有hashi(y)的位置都是1(1≤i≤k),即k個位置都被設置為1了,那么我們就認為y是集合中的元素,否則就認為y不是集合中的元素。下圖中y1就不是集合中的元素(因為y1有一處指向了“0”位)。y2或者屬于這個集合,或者剛好是一個false positive。
顯然這個判斷并不保證查找的結果是100%正確的。
更多詳細信息
Quotient Filter and Cascade Filter
Quitient Filter 和Cascade Filter算法由Bender等人設計,是一個空間效率高的概率性數據結構
應用:用于檢索一個元素是否在一個集合中。
優點:對插入、查詢、刪除操作由高吞吐量,比Bloom Filter高了兩個數量級。
更多詳情見[3][4]
參考文獻
[1] https://www.cnblogs.com/zhxshseu/p/5289871.html
[2] https://en.wikipedia.org/wiki/Bloom_filter
[3] https://en.wikipedia.org/wiki/Quotient_filter
[4] Don’t Thrash: How to Cache your Hash on Flash
總結
以上是生活随笔為你收集整理的AMQ(approximate membership queries)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 向量组与向量空间
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?