1. 程式人生 > >那些優雅的資料結構(1) : BloomFilter——大規模資料處理利器

那些優雅的資料結構(1) : BloomFilter——大規模資料處理利器

import java.util.BitSet;

publicclass BloomFilter 
{
/* BitSet初始分配2^24個bit */privatestaticfinalint DEFAULT_SIZE =1<<25
/* 不同雜湊函式的種子,一般應取質數 */privatestaticfinalint[] seeds =newint[] { 571113313761 };
private BitSet bits =new BitSet(DEFAULT_SIZE);
/* 雜湊函式物件 */private SimpleHash[] func =new SimpleHash[seeds.length];

public BloomFilter() 
{
for (int i =0; i < seeds.length; i++)
{
func[i] 
=new SimpleHash(DEFAULT_SIZE, seeds[i]);
}
}

// 將字串標記到bits中publicvoid add(String value) 
{
for (SimpleHash f : func) 
{
bits.set(f.hash(value), 
true);
}
}

//判斷字串是否已經被bits標記publicboolean contains(String value) 
{
if (value ==null
{
returnfalse;
}
boolean ret =true;
for (SimpleHash f : func) 
{
ret 
= ret && bits.get(f.hash(value));
}
return ret;
}

/* 雜湊函式類 */publicstaticclass SimpleHash 
{
privateint cap;
privateint seed;

public SimpleHash(int cap, int seed) 
{
this.cap = cap;
this.seed = seed;
}

//hash函式,採用簡單的加權和hashpublicint hash(String value) 
{
int result =0;
int len = value.length();
for (int i =0; i < len; i++
{
result 
= seed * result + value.charAt(i);
}
return (cap -1& result;
}
}
}

相關推薦

那些優雅資料結構(1) : BloomFilter——大規模資料處理利器

import java.util.BitSet;publicclass BloomFilter  {/* BitSet初始分配2^24個bit */privatestaticfinalint DEFAULT_SIZE =1<<25; /* 不同雜湊函式的種子,一般應取質數 */privatesta

ZZ那些優雅資料結構(1) : BloomFilter——大規模資料處理利器

原文來自:http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html BloomFilter——大規模資料處理利器   Bloom Filter是由Bloom在1970年提出的一種多雜湊函式對映的快速

郝斌 資料結構 1 什麼叫做資料結構

資料結構概述 書籍:嚴蔚敏 吳偉民(偽演算法)、高一凡(例子源程式) 定義:我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構儲存到主儲存器(記憶體)中,以及在此基礎上為實現某個功能(比如查詢某個元素,刪除某個元素,對所有元素進行排序)而執行的相應操作,這個相應的操作也叫做演算

資料結構1:認識資料結構與演算法

程式 + 文件 = 軟體演算法 + 資料結構 = 程式資料結構與演算法的理論基礎離散數學中的圖論、集合論和關係論等。資料結構課程的內容來源於圖論、作業系統、編譯系統、編碼理論及檢索與排序技術等。1.什麼是資料結構?非數值型程式設計中資料的組織方式及其處理的演算法資料結構的三個

11月1資料結構討論班 【資料結構討論班 - 11.1

zzr:賽題2道 4128 Steam Roller - ICPC Live Archive 1086 The Ministers' Major Mess - UVa Online Judge zym:博弈論基礎 ysl: 數論 NIM博弈 階梯博弈 樹上刪邊博弈

資料結構1--線性表(java程式碼實現線性表的順序儲存)

1.資料結構的概念      資料:資訊載體,計算機處理的物件的總稱      資料元素:也稱結點,組成資料的基本單位      資料項:資料項是資料的最小單位     &n

【Java】 大話資料結構(1) 線性表之順序儲存結構

 本文根據《大話資料結構》一書,實現了Java版的順序儲存結構。 順序儲存結構指的是用一段地址連續的儲存單元一次儲存線性表的資料元素,一般用一維陣列來實現。 書中的線性表抽象資料型別定義如下(第45頁): 實現程式:

執行時資料結構(1)-java堆

堆的記憶體劃分 整體劃分為年輕代和老年代細分如下: 1. eden 空間 ------------------ 年輕代 2. from survivor 空間 -------- 年輕代 3. to survivor 空間 ------------ 年輕

併發資料結構-1.7 查詢樹

原文連結,譯文連結,譯者:iDestiny,校對:周可人 任何查詢樹的併發實現都可以通過用一個獨佔鎖保護來完成。通過使用讀寫鎖對併發效能有一定提升,讀寫鎖允許所有隻讀(查詢)操作併發地執行,因為讀操作是以共享模式持有鎖,然而更新(插入或刪除)操作持有獨佔模式的鎖,從而排斥其他所有操作。如果更新

併發資料結構-1.6 雜湊表

原文連結,譯文連結,譯者:iDestiny,校對:周可人 典型可擴充套件的雜湊表即一個可調整大小的桶陣列(buckets), 每一個桶存放預期數量的元素,因此雜湊表平均在常量時間內進行插入,刪除,查詢操作。雜湊表調整大小的主要成本—–在於新舊桶(buckets)之間進行重新分配操作,該操作被分

併發資料結構- 1.8 優先佇列&1.9 總結

原文連結,譯文連結,譯者:郭振斌,校對:周可人 1.8 優先佇列 併發的優先佇列是一個可線性化到順序優先佇列的資料結構,能夠通過常用的優先佇列語義提供insert和delete-min操作。 基於堆的優先佇列 許多文獻中提到的併發優先佇列結構,其實是本書前面提到的可線性化堆結構。再一次的,這種

併發資料結構-1.1.4 複雜度測量&1.1.5 正確性

原文連結,譯文連結,譯者:張軍,校對:周可人 1.1.4 複雜度測量 一個被廣泛研究的方向是在理想化模型,如並行隨機存取機上分析併發資料結構和演算法的漸進複雜度[35, 122, 135]。然而,很少有將這些資料結構放在一個真實的多處理器上進行建模的。這裡有多種原因,大部分原因跟系統硬體架構與

併發資料結構-1.5 連結串列

原文連結,譯文連結,譯者:huavben,校對:周可人 考慮支援插入,刪除和查詢操作的併發資料結構實現。如果這些操作只處理鍵值(譯者注:而不處理具體值),這樣的資料結構會是一個集合。如果一個數據值與每一個鍵關聯起來,我們就得到了一部資料字典。由於他們都是密切相關的資料結構,一個併發的集合通常能

併發資料結構-1.1.3 非阻塞技術

原文連結,譯文連結,譯者:Noodles,校對:周可人 1.1.3 非阻塞技術 正如前面討論的那樣,非阻塞實現主要目的是為了消除由鎖帶來的相關問題,為了形式化研究這一概念,多種非阻塞演進條件已經在相關文獻有所研究了,如wait-freedom演進條件,lock-freedom演進條件,和obs

併發資料結構-1.4 池

原文連結,譯文連結,譯者:huavben,校對:周可人 實現高效併發棧和佇列的大部分挑戰來自於一個被插入的元素可以被刪除這一需求。併發池是一種支援插入和刪除操作的資料結構,它允許刪除操作移除任何一個已經被插入的,並且沒有在隨後被刪除的元素。這樣的弱需求提供了提高併發效能的機會。 一個高效的併發

併發資料結構-1.1.2 阻塞技術

原文連結,譯文連結,譯者:周可人,校對:樑海艦 1.1.2 阻塞技術 在很多資料結構中,記憶體競爭所帶來的不良現象和前文所說的順序瓶頸帶來的影響都可以通過使用細粒度鎖機制來減小。在細粒度鎖機制中,我們用多個粒度較小的鎖來保護資料結構中的不同部分。這樣做的目的是允許併發操作在它們不訪問資料結構的

併發資料結構-1.1 併發的資料結構的設計

原文連結,譯文連結,譯者:董明鑫,校對:周可人 隨著多個處理器共享同一記憶體的機器在商業上的廣泛使用,併發程式設計的藝術也產生了巨大的變化。當前的趨勢向著低功耗晶片級多執行緒(CMT)發展,所以這樣的機器一定會更加廣泛的被使用。 共享記憶體多處理器是指併發的執行多個執行緒的系統,這些執行緒在共

併發資料結構- 1.1.1 效能

原文連結,譯文連結,譯者:俞升兵,校對:周可人 1.1.1 效能 一個執行在P個處理上的應用程式的加速度是它在單個處理器上的執行時間和在P個處理器的執行時間的比值。這是一種評價應用程式對於機器資源利用程度的衡量。理想情況下,我們想要的結果是線性加速度:當我們使用P個處理器的時候,我們希望可以獲

回爐篇2—資料結構(1)之資料結構和演算法

想學新東西,隨手拿來一本資料,一部視訊,但總感覺學不會,吸收效率低。不是我們笨,只是開啟他們的方式不對,合適的學習教材,能讓學習過程變得簡單,形象貼近生活。文底是乾貨直通車,好東西大家記得收藏,都是精挑細選的。文章內容是我自己的筆記,是用最簡語言寫的,可能不利於理解,大家想了解更多,

資料結構(1) 線性表技巧及應用:字首和、排序(逆序對求法之一)

雖然線性表實在過於簡單,幾乎不會有大佬寫它的應用 但是作為一個菜雞的我還是打算歸納總結一下線性表一些應用和技巧 1.字首和 emmmm 我們來看這樣一個問題 已知一個序列s[ i ] (1<=i<=n),有m個請求,每個請求為兩個整數a,b(1<=a<=b&l