"BloomFilter" (データ構造)
"BloomFilter" (データ構造)
"BloomFilter"
要素が確実にメンバでないかどうかを検証する集合を表す.
詳細
- Bloomフィルタは通常,要素が確実にメンバでないかどうかを検証することができる確率集合として使われる.
- ある要素が集合のメンバではない場合には,その要素がBloomフィルタのメンバかどうかを検証すると,必ずFalseが返される.
- ある要素が集合のメンバである場合には,その要素がBloomフィルタのメンバかどうかを検証しても,必ずTrueが返されるとは限らない.
-
CreateDataStructure[ "BloomFilter",capacity] 指定の capacity の新しい"BloomFilter"を作成する CreateDataStructure["BloomFilter", capacity,p] 指定の誤検出の確率 p で新しい"BloomFilter"を作成する Typed[x,"BloomFilter"] x に"BloomFilter"型を与える - "BloomFilter"型のデータ構造には,以下の演算が使える.
-
ds["Capacity"] ds の記憶容量 time: O(1) ds["Copy"] ds のコピーを返す time: O(n) ds["CouldContain",x] ds に x が含まれる可能性がある場合にはTrue,それ以外の場合にはFalseを返す time: O(1) ds["Insert",x] x を ds に挿入する time: O(1) ds["LoadFactor"] ds のロード係数 time: O(1) ds["FalsePositiveProbability"] ds の誤検出の確率を返す time: O(1) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (1)
新しい"BloomFilter"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["BloomFilter", 2]任意の式を"BloomFilter"のデータ構造に挿入することができる:
ds["Insert", f[1]]式がないかどうかを検証することは可能である.結果がFalseである場合には,f[2]が確実にその集合内にないことを意味する:
ds["CouldContain", f[2]]結果がTrueである場合には,f[1]がその集合内に存在する可能性があることを意味する:
ds["CouldContain", f[1]]Normal[ds]ds["Visualization"]スコープ (2)
情報 (1)
新しい"BloomFilter"は,CreateDataStructureを使って作成することができる:
ds = CreateDataStructure["BloomFilter", 2]Information[ds]誤検出の確率 (1)
dsH = CreateDataStructure["BloomFilter", 2, 0.7]デフォルトの誤検出の確率で"BloomFilter"を作成する:
dsL = CreateDataStructure["BloomFilter", 2]dsH["Insert", f[1]]dsL["Insert", f[1]]Count[Map[dsH["CouldContain", #]&, Range[100]], True]Count[Map[dsL["CouldContain", #]&, Range[100]], True]考えられる問題 (1)
満杯であるBloomフィルタは,含まれているかどうかを検定した場合に誤検出を返す可能性が高くなる.
Bloomフィルタを作成し,多くの要素を挿入する.可視化はかなり満杯であることを示す:
ds = CreateDataStructure["BloomFilter", 1];Do[ ds["Insert", RandomReal[]], {1000}];
ds["Visualization"]ds["LoadFactor"]含まれているかどうかを検定すると,要素が挿入されなかったにも関わらず,Trueが返される:
ds["CouldContain", "element"]履歴
2020 で導入 (12.1)