'面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器'

數據庫 跳槽那些事兒 F1賽車 Java的架構師技術棧 2019-09-02
"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

(2)第二步:網警用八個不同的隨機數產生器(F1,F2, ...,F8) 產生八個信息指紋(f1, f2, ..., f8)。

(3)第三步:用一個隨機數產生器 G 把這八個信息指紋映射到 1 到32億中的八個自然數 g1, g2, ...,g8。

(4)第四步:把這八個位置的二進制全部設置為一。

"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

(2)第二步:網警用八個不同的隨機數產生器(F1,F2, ...,F8) 產生八個信息指紋(f1, f2, ..., f8)。

(3)第三步:用一個隨機數產生器 G 把這八個信息指紋映射到 1 到32億中的八個自然數 g1, g2, ...,g8。

(4)第四步:把這八個位置的二進制全部設置為一。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

OK,這就是其原理,現在網警把所有的垃圾網站地址全部存儲下來了,有一天網警查到了一個可疑的網站,想判斷一下是否是XX網站,於是就開始檢查了。查詢可疑網站是否存在集合中的時候,通過同樣的方法將可疑網站通過哈希映射到32億個比特位數組上的8個點。如果8個點的其中有一個點不為1,則可以判斷該元素一定不存在集合中。

注意:如果8個點全部是1,也不能判斷鈣元素一定存在集合中,有一定的誤差率。

二、代碼實現布隆過濾器

上面只是給出了其原理,下面我們代碼實現一下。

"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

(2)第二步:網警用八個不同的隨機數產生器(F1,F2, ...,F8) 產生八個信息指紋(f1, f2, ..., f8)。

(3)第三步:用一個隨機數產生器 G 把這八個信息指紋映射到 1 到32億中的八個自然數 g1, g2, ...,g8。

(4)第四步:把這八個位置的二進制全部設置為一。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

OK,這就是其原理,現在網警把所有的垃圾網站地址全部存儲下來了,有一天網警查到了一個可疑的網站,想判斷一下是否是XX網站,於是就開始檢查了。查詢可疑網站是否存在集合中的時候,通過同樣的方法將可疑網站通過哈希映射到32億個比特位數組上的8個點。如果8個點的其中有一個點不為1,則可以判斷該元素一定不存在集合中。

注意:如果8個點全部是1,也不能判斷鈣元素一定存在集合中,有一定的誤差率。

二、代碼實現布隆過濾器

上面只是給出了其原理,下面我們代碼實現一下。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器


"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

(2)第二步:網警用八個不同的隨機數產生器(F1,F2, ...,F8) 產生八個信息指紋(f1, f2, ..., f8)。

(3)第三步:用一個隨機數產生器 G 把這八個信息指紋映射到 1 到32億中的八個自然數 g1, g2, ...,g8。

(4)第四步:把這八個位置的二進制全部設置為一。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

OK,這就是其原理,現在網警把所有的垃圾網站地址全部存儲下來了,有一天網警查到了一個可疑的網站,想判斷一下是否是XX網站,於是就開始檢查了。查詢可疑網站是否存在集合中的時候,通過同樣的方法將可疑網站通過哈希映射到32億個比特位數組上的8個點。如果8個點的其中有一個點不為1,則可以判斷該元素一定不存在集合中。

注意:如果8個點全部是1,也不能判斷鈣元素一定存在集合中,有一定的誤差率。

二、代碼實現布隆過濾器

上面只是給出了其原理,下面我們代碼實現一下。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器


面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

還有一個SimpleHash,我們看一下

"

如何在十億個單詞表中查找某個單詞是否出現呢?答案已經給出來了,那就是使用布隆過濾器。那這個布隆過濾器是什麼呢?下面就好好講講,方便在面試中提高你的zhuangbility。

一、認識布隆過濾器

1、概念

布隆過濾器其實就是加快判定一個元素是否在集合中出現的方法。比如說在一個大字典中,要查找某個單詞是否存在,於是我們就可以使用布隆過濾器,快速高效省時省力。

2、原理

既然布隆過濾器這麼優秀,他是如何實現的呢?舉一個比較黃一點的例子,未成年人勿進,我們知道在我們身邊充斥著各種各樣的XX網站,為了不毒害我們祖國的花朵,於是國家網警就開始對這些網站進行割除過濾,然後關閉。關閉的時候呢就是關閉他的地址。現在問題來了。

這些網站的地址其實是不停的更換的,這些垃圾網站和正常網站加起來全世界據統計也有幾十億個。這些網警拿到一個地址之後總不能到數據庫裡面一個一個去比較吧,這就帶來了一系列問題。

(1)網站數量太多,存儲起來比較麻煩。一個地址最起碼有32個字節,一億個地址就需要1.6G的內存。

(2)一個一個比較,太費時間了。

布隆過濾器是如何高效的呢?他的底層其實是一個特比長的二進制向量和一系列隨機映射函數。我們存儲一億個垃圾網站地址。

(1)第一步:建立一個32億二進制(比特),也就是4億字節的向量。全部置0。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

(2)第二步:網警用八個不同的隨機數產生器(F1,F2, ...,F8) 產生八個信息指紋(f1, f2, ..., f8)。

(3)第三步:用一個隨機數產生器 G 把這八個信息指紋映射到 1 到32億中的八個自然數 g1, g2, ...,g8。

(4)第四步:把這八個位置的二進制全部設置為一。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

OK,這就是其原理,現在網警把所有的垃圾網站地址全部存儲下來了,有一天網警查到了一個可疑的網站,想判斷一下是否是XX網站,於是就開始檢查了。查詢可疑網站是否存在集合中的時候,通過同樣的方法將可疑網站通過哈希映射到32億個比特位數組上的8個點。如果8個點的其中有一個點不為1,則可以判斷該元素一定不存在集合中。

注意:如果8個點全部是1,也不能判斷鈣元素一定存在集合中,有一定的誤差率。

二、代碼實現布隆過濾器

上面只是給出了其原理,下面我們代碼實現一下。

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器


面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

還有一個SimpleHash,我們看一下

面試官:如何在十億個單詞中,判斷某個單詞是否存在?布隆過濾器

這就是布隆過濾器的實現。

"

相關推薦

推薦中...