這個問題以前有人問過,但當時沒有答案,所以我決定再次提問。在C中有效實現布隆過濾器?
我需要在C(而不是C++)中有效實現布隆過濾器。如果沒有這樣的東西,我不介意實施一個,如果給予一些很好的參考,以便它不佔用我太多的時間。
我想使用這個數據結構進行插入和測試的比例(1:20k),所以主要是測試密集型的。要測試的數據是64位整數。
這個問題以前有人問過,但當時沒有答案,所以我決定再次提問。在C中有效實現布隆過濾器?
我需要在C(而不是C++)中有效實現布隆過濾器。如果沒有這樣的東西,我不介意實施一個,如果給予一些很好的參考,以便它不佔用我太多的時間。
我想使用這個數據結構進行插入和測試的比例(1:20k),所以主要是測試密集型的。要測試的數據是64位整數。
不要做過多的自我宣傳,但我已經寫了一個插件,可以過濾掉重複的文本行Geany editor/IDE,它採用布隆過濾器。
執行是在C中,你可以找到它right here on GitHub。這是GPL v3,所以根據您的確切需求,您可能會或可能無法使用它。
對我實施的一些注意事項:
bloom_filter_new()
使用的BloomContains
回調函數指針)。只需通過NULL
即可獲得「純粹」過濾器。它沒有經過嚴格的性能調整,但應該沒問題。當然,我會感謝您在測試後可能會有的任何反饋!
嘿,謝謝它可以非常有幫助的確。我會試一試並告訴你。 –
你能否建議可以使用除glib之外的其他一些庫來實現高性能 –
你能否提出使用glib庫的任何特定動機,除此之外,它使得代碼可移植。 –
我知道這是一個老問題,但作爲參考,這裏有一些GitHub的搜索結果。
在github關於 '布隆過濾器' 一個簡單的搜索產生一噸的結果(對於C):
https://github.com/search?q=extension%3Ac+bloomfilter&type=Code&ref=searchresults
這是爲REFERENCE只。
這是概率性的。如果您想要確切答案,請使用聯合查找不相交集。在topcoder上搜索這個,應該有一些教程。 – nhahtdh
如果你正在編寫C語言,這不是你需要一個通用庫的東西。它應該少於100行代碼,與集成第三方庫相比,應該花更少的時間來編寫代碼。只需閱讀您最喜愛的維基百科或其他類似算法的描述。 –
@R編寫它會花費更少的時間,但我知道但是高效地編寫它以使其能夠很好地擴展是一個問題。我必須按照10^7的順序測試數據的成員資格,並且使這個查詢比對equi連接的結果進行count(*)查詢更快。在我的實現中,我甚至不能丟失一個毫秒 –