接上篇,起初我為了輸入輸出方便,是用perl去實現的,後來發現perl中求模速度太慢,就改用c了
常量定義:space指你要分配多大的記憶體空間,我這裡是為5000萬資料的每一條分配4位元組
const
intspace
=50000000*4
;const
intmaxnum
=space*8
;#define
line_max2048
intbits=;
char*db
=null;
主程式:這裡迴圈讀入標準輸入的每一行,進行排重。
intmain(
intargc,
char
*argv)
}return0;
} 判定函式:我沒有做bloom filter演算法中描述的10次hash,而是做了乙個md5,乙個sha1,然後折合成9次hash。
bool
is_exist(
const
char
*str,
intlen)
else
}return
(k==0);
} 主要演算法就在這裡了,實際應用的話可以採用迴圈監視磁碟檔案的方法來讀入排重資料,那些**就與作業系統相關,沒必要在這寫了
快速URL排重的方法 一
我這裡介紹乙個極適合大量url快速排重的方法 這個演算法被稱為bloom filter,基本上,它也只適合這樣的場合。這裡的大量是指有5000萬至1億的url,更大的資料量可能也不合適了。所以,把目標鎖定在單機排重,一開始,試驗了perl中的hash,非常簡單的 usedb file my db t...
快速URL排重的方法 一
我這裡介紹乙個極適合大量url快速排重的方法,這個演算法被稱為bloom filter,基本上,它也只適合這樣的場合。這裡的大量是指有5000萬至1億的url,更大的資料量可能也不合適了。所以,把目標鎖定在單機排重,一開始,試驗了perl中的hash,非常簡單的 db file my db tie ...
linux排重的方法
想必各位用linux的人都會碰到排重的問題,像檢視乙個日誌檔案,碰到很多重覆記錄,看起來很痛苦。還有像grep一下關鍵字,想找出現關鍵字的檔案,但是出現了一堆重複的檔名,也是一件鬱悶的事情。下面給大家介紹兩種linux排重的方法,一種是使用uniq命令,一種使用gawk。uniq排重 uniq的作用...