GitHub上Java的Bloom Bloom實現

布隆過濾器是集數據結構的一種 。 對于那些不了解的對象,“設置數據結構”僅包含一個主要方法。 它僅用于確定特定元素是否包含在一組元素中。 大多數數據結構(例如Hash Map , Linked List或Array )都可以相當輕松地創建此函數。 您只需要在數據結構中搜索特定元素。

但是,當集合中的元素數量超過可用內存量時,這些類型的數據結構可能會帶來問題,因為這些類型的數據結構會將所有元素存儲在內存中。

這是布隆過濾器變得有趣的地方。 因為布隆過濾器實際上并未將集合中的所有元素存儲在內存中。

布隆過濾器沒有將每個元素放入數據結構中,而是僅存儲字節數組。 對于添加到布隆過濾器的每個元素,在其數組中設置k位。 這些位通常由哈希函數確定。

要檢查元素是否在集合中,只需檢查通常對于該項目通常為1的位是否實際上為1。 如果它們都是一(而不是零),則該項在集合內。 如果任何一位都不為1,則該項目不在集合內。

對于每個數據結構,肯定都會退回到Bloom Filter。 通過使用上述方法,布隆過濾器可以說元素實際上不在集合中。 假陽性在該集中是可能的,它們取決于幾個因素,例如:

  • 字節數組的大小
  • 每個元素設置的位數(k)
  • 集合中的項目數

通過調整上述值,您可以輕松地將誤報概率提高到可觀的水平,同時仍然節省大量空間。

發現布隆過濾器后,我開始尋找Java實現。 可悲的是,不存在標準實現! 因此,我編寫了一個簡單快速的Java版Bloom Filter版本。 您可以在GitHub上找到源代碼 。

我的實現使用:

  • MD5哈希
    • 要添加一個Object,該集合采用hashCode()方法的值來計算MD5哈希。
  • 由簡單的字節數組支持
  • 實現Set <Object>接口,盡管該接口中的某些方法將無法正常工作。

請注意,該項目還使用SizeOf庫來獲取內存中使用的字節數。

我還做了一些快速到期操作,以將過濾器與Java中的標準ArrayList進行比較,并進行了一些性能檢查。

  • 使用不同的k值將元素添加到集合中所需的時間
  • 集合的大小與不同級別的數組列表

可以預期,集合中需要的元素數量越多,Bloom Filter變得越有用。 當確定布隆過濾器應該有多大以及給定集合的最佳k值時,確實會有些棘手,尤其是在集合不斷增長的情況下。

對于測試,我僅向每個數據結構添加了對象(大小為16個字節),然后使用SizeOf庫獲取使用的真實空間量。

從上圖可以很容易地看出,一旦數組變得大于100個對象,Bloom Filter的大小效率就會大大提高。 這種趨勢持續到1500個對象,而布隆過濾器需要比ArrayList少22808字節來存儲相同數量的元素。

上圖顯示了以秒為單位的時間(在2012年早期的iMac上),將元素添加到具有不同位數(k)的列表中的時間。 隨著k的增加,時間會相當緩慢地增加到10位。 但是,任何超過10的東西都會變得非常昂貴,設置100位需要一整秒才能完成。

隨時在GitHub上檢查測試的源代碼和Bloom Filter實現本身。

參考:來自我們的JCG合作伙伴 Isaac Taylor在Programming Mobile博客上的GitHub上的Java中Bloom過濾實現 。

翻譯自: https://www.javacodegeeks.com/2012/11/bloom-filter-implementation-in-java-on-github.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370402.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370402.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hibernate(十五):QBC檢索、本地SQL檢索和HQL刪除

QBC檢索QBC查詢就是通過使用Hibernate提供的Query By Criteria API來查詢對象&#xff0c;這種API封裝了SQL語句的動態拼裝&#xff0c;對查詢提供了更加面向對象的功能接口。 1&#xff09;通過Critera實現具有條件的查詢 1 Test2 public void testCriteria00() {3 …

java 創建連接池失敗_java-Presto JDBC連接池創建錯誤“不支持禁用...

我正在嘗試使用Spring-JDBC連接到Presto,并且我正在使用Hikari CP作為數據源.這是我的配置&#xff1a;Beanpublic DataSource myDataSource() {HikariDataSource hikariDataSource new HikariDataSource();hikariDataSource.setDriverClassName("com.facebook.presto.jd…

ni軟件管理器_NI 技術支持丨我的 NI 硬件設備不能被識別,怎么辦?Windows

這篇指南可以幫助您解決在您的 Windows 系統上無法識別您的 NI 硬件有關的問題。癥狀包括以下幾種情況&#xff1a;連接至 USB 端口時&#xff0c;硬件上的 LED 燈不亮/不閃爍。連接至 USB 后已連接設備的 LED 燈持續閃爍。僅限音頻接口&#xff1a;該設備在音頻應用程序或 Win…

環境搭建相關

1.檢測jre運行環境 java -version 沒有的話 按照提示安裝 default-jre 夠用 http://www.linuxidc.com/Linux/2016-11/136958.htm 否則按照上面處理 2.pycharm下載 https://www.jetbrains.com/pycharm/download/ 選擇下載一個linux的 3.下載crackjar http://idea.lanyus.com/jar…

在Java應用程序中使用密碼學

這篇文章描述了如何使用Java密碼體系結構 &#xff08;JCA&#xff09;&#xff0c;該體系結構使您可以在應用程序中使用密碼服務。 Java密碼體系結構服務 JCA提供了許多加密服務&#xff0c;例如消息摘要和簽名 。 這些服務可以通過特定于服務的API來訪問&#xff0c;例如Me…

CSS學習筆記-04 a標簽-導航練習

個人練習&#xff0c;各位大神勿笑 。。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

AngularJs簡介

AngualrJs是一個javascript框架&#xff0c;它通過<script>標簽加到HTML頁面中。 Angular通過指令拓展了HTML&#xff0c;且通過表達式綁定數據到HTML。 Angular是一個javascript框架 Angular是一個javascript框架。它是一個以javascript編寫的庫。 Angular是以一個javas…

java怎樣訪問servlet_如何訪問URL并從java servlet獲取響應?

你需要做這樣的事情import java.io.*;import java.net.URL;import java.net.URLConnection;import javax.servlet.http.*;import javax.servlet.*;public class URLServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse res)throws Se…

深度學習loss值變為0_利用TensorFlow2.0為膽固醇、血脂、血壓數據構建時序深度學習模型(python源代碼)...

背景數據描述膽固醇、高血脂、高血壓是壓在廣大中年男性頭上的三座大山&#xff0c;如何有效的監控他們&#xff0c;做到早發現、早預防、早治療尤為關鍵&#xff0c;趁著這個假期我就利用TF2.0構建了一套時序預測模型&#xff0c;一來是可以幫我預發疾病&#xff0c;二來也可以…

在Spring MVC Web應用程序中使用reCaptcha

CAPTCHA是一種程序&#xff0c;可以生成人類可以通過的測試并對其進行評分&#xff0c;而計算機程序“ 不能 ”通過。 所采取的策略之一是向用戶顯示具有扭曲文本的圖像&#xff0c;并且用戶應在輸入區域中書寫文本。 如果顯示的文字與用戶輸入的文字相同&#xff0c;則我們可以…

洛谷 P1757 通天之分組背包

P1757 通天之分組背包 題目背景 直達通天路小A歷險記第二篇 題目描述 自01背包問世之后&#xff0c;小A對此深感興趣。一天&#xff0c;小A去遠游&#xff0c;卻發現他的背包不同于01背包&#xff0c;他的物品大致可分為k組&#xff0c;每組中的物品相互沖突&#xff0c;現在&a…

課時109.外邊距合并現象(掌握)

我們先寫一個案例&#xff0c;通過案例來了解 它們之間的水平距離就是兩個間距的和 我們看完水平再來看垂直方向 在默認布局的垂直方向上&#xff0c;默認情況下外邊距是不會疊加的&#xff0c;會出現合并現象&#xff0c;誰的外邊距比較大就聽誰的 本文轉載于:猿2048?https:…

純 CSS實現三角形

最近項目上做評論回復&#xff0c;設計師提高交互性特意設計了小三角&#xff0c;如下&#xff1a; 下面介紹一下實現效果的css方法&#xff1a; 1.border 通過設置上下左右border寬度來實現。 首先查看一下全部設置的效果&#xff1a; <style>   .triangle{     w…

python access_Python3 os.access() 方法

Python3 os.access() 方法概述os.access() 方法使用當前的uid/gid嘗試訪問路徑。大部分操作使用有效的 uid/gid, 因此運行環境可以在 suid/sgid 環境嘗試。語法access()方法語法格式如下&#xff1a;os.access(path, mode);參數path -- 要用來檢測是否有訪問權限的路徑。mode -…

小米的java待遇怎么樣_【Java工資】小米2021年Java工資待遇-看準網

已經不是面試官遲到的問題了&#xff0c;是約好了面試時間&#xff0c;結果徹底沒有然后了&#xff0c;這種言而無信我頭一回見。小米運營部門令人困惑的工作作風&#xff0c;簡單總結一句就是&#xff1a;敷衍不走心&#xff0c;面試規則內部都不統一。兩次面小米&#xff0c;…

Spring MVC表單驗證(帶批注)

這篇文章提供了一個簡單HTML表單驗證示例。 它基于帶有注釋的Spring MVC示例。 該代碼可在GitHub的Spring-MVC-Form-Validation目錄中找到。 數據 在此示例中&#xff0c;我們將使用bean和JSR303驗證批注&#xff1a; public class MyUser {NotNullSize(min1,max20)private …

課時106.邊框練習(理解)

讓我們做出來如下的樣式&#xff1a; 1.首先看下有幾個邊框&#xff0c;就做幾個div&#xff0c;用簡單方法div.box$*6 tab鍵 2.然后給它們設置寬高 3.然后依此來做邊框 第一個&#xff1a;有四種方法&#xff0c;第一種最簡單 第二個&#xff1a;有兩種方法&#xff0c;第二…

Bzoj3998 弦論

物理題目傳送門 求第k大的子串&#xff1f;SAM模板題啊 CLJ的論文都講了怎么做啊&#xff0c;把自動機看成一個后綴Trie求出size讓后像多叉平衡樹那樣亂搞就好了~ 比前兩個哈希的題好多了~ &#xff08;順便&#xff0c;hdu高亮好好看啊&#xff09; #pragma GCC opitmize(&quo…

java需要先安裝jdk_謝謝知乎。Java初學者首先下載 JDK 開發環境,然后再下 eclipse 對嗎?那 tomcat是什么?還需要安裝嗎?...

程序獵人Till All are One!何馬、FAN 等人贊同這個問題&#xff0c;作為有些Java經驗的人&#xff0c;都會覺得太初級。而且&#xff0c;我認為可能很多真正的高手不屑于跑來回答這種問題。本來我也不打算回答的&#xff0c;但最近剛好憑興趣在學Node.JS&#xff0c;順便學習加…

JavaEE重新審視設計模式:裝飾器

去年的這個時候&#xff0c;我寫了一系列有關JavaEE實現設計模式的博客文章。 大約一年后&#xff0c;我意識到我錯過了我最喜歡的圖案裝飾器。 裝飾器模式基本上是通過裝飾其他對象來擴展對象功能的方法&#xff0c;這些對象可以包裝目標對象并為其添加自身的行為。 如果您從…