/**
* 如何不採集重複的網頁?去重可以使用布隆過濾器,每個執行緒使用乙個bitarray,
* 裡面儲存本批源頁面上次抓取的頁面的雜湊值情況,抓取下來的源頁面分析鏈結後,
* 去這個bitarray裡判斷以前有沒有抓過這個頁面,沒有的話就抓下來,抓過的話就不管了。
* 假設乙個源頁面有30個鏈結,一批10w個源頁面,300w個鏈結的bitarray應該也不會佔太大記憶體。
* 所以有個五六個執行緒同時處理也是沒問題的。
* **/
public class ******bloomfilter ;
private bitset bits = new bitset(default_size);
private ******hash func = new ******hash[seeds.length];
public ******bloomfilter()
}public static void main(string args)
// 覆蓋方法,把url新增進來
public void add(crawlurl value)
// 覆蓋方法,把url新增進來
public void add(string value)
// 覆蓋方法,是否包含url
public boolean contains(crawlurl value)
// 覆蓋方法,是否包含url
public boolean contains(string value)
boolean ret = true;
for (******hash f : func)
return ret;
}public static class ******hash
public int hash(string value)
return (cap - 1) & result;}}
}
bitmap去重與布隆過濾器
通過乙個位元位來存乙個位址,占用記憶體很小 bloomfilter 會開闢乙個m位的bitarray 位陣列 開始所有資料全部置 0 當乙個元素過來時,能過多個雜湊函式 h1,h2,h3.計算不同的在雜湊值,並通過雜湊值找到對應的bitarray下標處,將裡面的值 0 置為 1 python中使用布...
python實現布隆過濾器對資料去重
一 直觀的資料去重方式 通常我們採用如下演算法對一組長度為n的資料d進行去重時。s1.在資料中取出第x個資料 1 xs2.在資料中取出第y個資料 xs3.比較d x 和d y 若相同丟棄d y 重複s2,s3直到y n s4.重複s1,s2,s3直到x n 1 此演算法時間複雜度近似t n o 1 ...
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...