Shed More Light on Bloom Filter's Variants

Extracted source text ยท arXiv 1903.12525

\documentclass[conference,twoside]{csce}

\usepackage[hmargin=.75in,vmargin=1in]{geometry}
\usepackage[american]{babel}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage{caption}
\usepackage{balance}
\usepackage{fancyhdr}
%%% Below packages are recommended to use for better results and compatible with the csce.cls
\usepackage{textcomp}
\usepackage{epsfig,graphicx}
\usepackage{xcolor}
\usepackage{amsfonts,amsmath,amssymb}
\usepackage{fixltx2e} % Fixing numbering problem when using figure/table* 
\usepackage{booktabs}


\setcounter{page}{14}
\columnsep 6mm  %%% DO NOT CHANGE THIS
% \fancypagestyle{plain}{
%         \fancyhead{}
%         \fancyhead[C]{first page center header}
%         \fancyfoot{}
%         \fancyfoot[C]{first page center footer}
% }
\pagestyle{fancy}
\headheight 20pt
\footskip 20pt

% \rhead{}

%Enter the first page number of your paper below
\setcounter{page}{14}
\renewcommand{\thispagestyle}[2]{} 
%Header
\fancyhead[LE,RO]{\thepage\vspace{1cm}}
\fancyhead[RE,LO]{Int'l Conf. Information and Knowledge Engineering|  IKE'18  |\vspace{0.6cm}}
\renewcommand{\headrulewidth}{0pt}
% \fancyhead[R]{\textit{(IJACSA) International Journal of Advanced Computer Science and Applications, \\ Vol. 9, No. 12, 2018}}
% \renewcommand{\headrulewidth}{0.5pt}

%Footer
\fancyfoot[C]{ISBN: 1-60132-484-7, CSREA Press\textcopyright}
% \renewcommand{\footrulewidth}{0.5pt}



\title{\bf Shed More Light on Bloom Filter's Variants}           %%%% Replace with your title.

%%%% Replace the author and institution/affiliation names. 
%%%% Make sure the author names are boldface.
\author{
{\bfseries Ripon Patgiri, Sabuzima Nayak, and Samir Kumar Borgohain}\\
Department Of Computer Science \& Engineering, National Institute of Technology Silchar, Assam, India
}

\begin{document}
% \thispagestyle{plain}
% \pagestyle{plain}

\maketitle                        %%%% To set Title and Author names.


\begin{abstract}%%%% Replace with your abstract.
Bloom Filter is a probabilistic membership data structure and it is excessively used data structure for membership query. Bloom Filter becomes the  predominant data structure in approximate membership filtering. Bloom Filter extremely enhances the query response time, and the response time is very fast. Bloom filter (BF) is used to detect whether an element belongs to a given set or not. The Bloom Filter returns \textbf{True Positive (TP)}, \textbf{False Positive (FP)}, or \textbf{True Negative (TN)}. The Bloom Filter is widely adapted in numerous areas to enhance the performance of a system. In this paper, we present a) in-depth insight on the Bloom Filter,and  b) the prominent variants of the Bloom Filters.
\end{abstract}


\vspace{1em}
\noindent\textbf{Keywords:}
 {\small  Bloom Filter, Scalable Bloom Filter, Variants of Bloom Filter, Membership filter, Data Structure, Algorithm} %%%% Replace with your keywords

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\section{Introduction}
The Bloom Filter \cite{Bloom} is the extensively used probabilistic data structure for membership filtering. The query response of Bloom Filter is unbelievably fast, and it is in $O(1)$ time complexity using a small space overhead. The Bloom Filter is used to boost up query response time, and it avoids some unnecessary searching. The Bloom Filter is a small sized data structure. The query is performed on the Bloom Filter before querying to the large database. The Bloom Filter saves immense query response time cumulatively. However, there is also a false positive which is known as overhead of the Bloom Filter. Nevertheless, the probability of the false positive is very low. Thus, the overhead is also low. Moreover, a careful implementation of Bloom Filter is required to reduce the probability of false positive. 

There are various kind of Bloom Filters available, namely,  Blocked Bloom Filter \cite{Putze}, Cuckoo Bloom Filter \cite{Cuckoo}, d-Left CBF (dlCBF) \cite{d-left}, Quotient Filter (QF) \cite{Bender}, Scalable Bloom Filter (SBF) \cite{Almeida}, Sliding Bloom Filter \cite{Naor}, TinySet \cite{TinySet}, Ternary Bloom Filter (TBF) \cite{Lim}, Bloofi \cite{Adina}, OpenFlow \cite{openflow}, BloomFlow \cite{Craig}, Difference Bloom Filter (DBF) \cite{Yang}, and Dynamic Reordering Bloom Filter \cite{DChang}. The variants of Bloom Filters are designed based on the requirements of the applications. The Bloom Filter data structure is highly adaptable. Therefore, the Bloom Filter has met a enormous applications. A careful adaptation of the Bloom Filter ameliorates the system. However, it depends on the requirements of the applications. Bloom Filter's improvement potentiality makes the vast applicability of the probabilistic data structure. 

% Some major applications areas of Bloom Filters are as follows, namely, recommendation engine \cite{Recommendation}, Metadata Server \cite{Huo15,Anitha15}, Network Packet Filtering \cite{Fernandez}, Content-centric network \cite{TB2F}, IP address lookup \cite{IP}, Network Security \cite{Geravand,zhu,DOS}, Big Data Security Analytics \cite{SAA,open}, Biometric \cite{Gomez}, BigTable \cite{BigTable}, P2P \cite{HChen,DHT}, Error correction \cite{Biff}, Wireless Sensor Network \cite{Sasaki13}, Duplicate filtering \cite{Multi}, Plagiarism checking \cite{Geravand14}, Biomedical engineering \cite{AByss}, Web search \cite{Web}, Network Router \cite{Gao,BFR}, IoT Environment \cite{Singh}, Spatial Bloom Filter \cite{Spatial}, Access efficient BF \cite{Access}, In-packet multicasting \cite{isBF}, Hash \cite{Bone}, and Databases \cite{DB}.

The fast query response using Bloom Filter attracts all the researchers, developers, and practitioners. There are tremendous applications of Bloom Filter. For instance, the BigTable uses Bloom Filter to improve disk access time significantly \cite{BigTable}. Moreover, the Metadata Server is drastically enhanced by Bloom Filter \cite{Anitha15,Zhu04,Zhu08,Hua11}. The Network Security is also boosted up using Bloom Filter \cite{zhu,mesh}. In addition, the duplicate packet filter is a very time consuming process. The duplicate packets are filtered in O(1) time complexity using Bloom Filter \cite{Fernandez}. Besides, there are diverse applications of Bloom Filter which improve significantly the performance of a system. The Bloom Filter predominant the filtering system, and thus poses some research questions (RQ) which are listed below-

\begin{description}
\item[RQ1:] Where should not Bloom Filter be used?
\item[RQ2:] What is the barrier of Bloom Filter?
\item[RQ3:] What are the various kinds of Bloom Filters available?
\end{description}

The research question (RQ) leads the article to draw a suitable conclusion. The RQ1 exposes the  reason for using Bloom Filter. The RQ2 exploits the False Positive of Bloom Filter. And finally, the RQ3 exposes the state-of-the-art development of Bloom Filter.

% \subsection{Organization}
% The article is organized as follows- Section ~\ref{bloomfilter} extracts in-depth insight on Bloom Filter with proper analysis. The flow Bloom Filter is depicted by Figure ~\ref{BF}. Section ~\ref{var} exposes varieties of Bloom Filter. Section ~\ref{issue} exploits the issues and challenges of the Bloom Filter. And finally, the article is concluded by section ~\ref{con}.

\section{Bloom Filter}
\label{bloomfilter}
The Bloom Filter \cite{Bloom} is a probabilistic data structure to test an element membership in a set \cite{Grandi}. The Bloom Filter uses a small space overhead to store the information of the element set. The True Positive and True Negative enhance the performance of filter mechanism. However, there false positive overhead in the Bloom Filter variants. However, the probability of false positive is negligible. But, some system cannot tolerate False Positive, because the false positive introduces error to the system. For example, duplicate key filtering system. Moreover, it also guarantees that there is no False Negative (FN) except counting variants of Bloom Filter. There are many systems where most of the queries are TN. Let $K=k_1,k_2,k_3,\ldots,k_n$ be elements present in the set $S$. Let $k_i$ be the random element where $1\leq i$. The approximate membership query is whether $k_i\in S$ or not.  The Bloom Filter returns either positive or negative. The positive is classified into False Positive (FP) and True Positive (TP). The FP of Bloom Filter returns existence of an element in a set, but $k_i\not\in S$. However, the TP correctly identifies the element, and it is in the set. Similarly, the negative is also classified into TN and FN. The TN boosts up the performance of a system and FP degrades the performance of a system. Therefore, the key challenge of Bloom Filter design is to reduce the probability of FP. The Figure \ref{BF} depicts the flowchart of Bloom Filter. The Figure \ref{BF} clearly exposes the overhead of Bloom Filter in case of FP.
\begin{figure}[ht]
\centering
\includegraphics[width=0.4\textwidth]{bloom.eps}
\caption{Flowchart of Bloom Filter. Figure demonstrates the overhead of Bloom Filter}
\label{BF}
\end{figure}

\begin{figure}[ht]
\centering
\includegraphics[width=0.4\textwidth]{chart.pdf}
\caption{The false positive probability of Bloom Filter with $m=64MB$, and $h=1,~h=2,~h=4,~h=~8,~and~h=16$. The X-axis represents the number of entries $n$.}
\end{figure}

\subsection{Analysis}
The FP affects on performance of Bloom Filter and this is an overhead of a system as shown in Figure~\ref{BF}. However, almost all variants of the Bloom Filter reduce the FP probability. Let us assume, $m$ is the number of bits available in the array. The probability of particular bit to be $1$ is $\frac{1}{m}$. The probability of particular bit to be $0$ is \[\left(1-\frac{1}{m}\right)\] Let $h$ be the number of hash functions and the probability of that bit remain 0 is \cite{Tarkoma,Grandi} \[\left(1-\frac{1}{m}\right)^h\] There are total $n$ element insertion into the array, therefore, the probability of that bit still $0$ is \[\left(1-\frac{1}{m}\right)^{nh}\] Now, the probability of that particular bit to be $1$ is \[\left(1-\left(1-\frac{1}{m}\right)^{nh}\right)\] What is the optimal value of hashing $h$? The probability of all bits 1 is \[\left(1-\left(1-\frac{1}{m}\right)^{nh}\right)^h\approx\left(1-e^{-hn/m}\right)^h\] The probability of false positive increases with the large size of entries $n$. However, it is reduced by increasing the value of $m$. Therefore, minimizing the false positive probability is \[h=\frac{m}{n}ln 2\] Let us $p$ be the desired false positive, and hence, \[p=\left(1-e^{-(\frac{m}{n}ln 2n)/m}\right)^{(\frac{m}{n}ln 2)}\] \[ln~p= -\frac{m}{n}(ln 2)^2\] \[m=-\frac{n ln~p}{(ln2)^2}\]
\[\frac{m}{n}=-\frac{n \log_2p}{ln2}\approx-1.44\log_2p\] Therefore, the optimal hash functions required \[h=-1.44\log_2p\]

\begin{figure}[ht]
\centering
\includegraphics[width=0.4\textwidth]{s1.pdf}
\caption{Statistics on various data size during 1000 round queries.}
\label{s1}
\end{figure}

\begin{figure}[ht]
\centering
\includegraphics[width=0.4\textwidth]{fpq.pdf}
\caption{False positive queries found on input size on 100000 elements during 1000 round queries. X-axis represent the number of query round and Y-axis represent the number of false positive queries.}
\label{s2}
\end{figure}

Figure~\ref{s1} depicts the experiments on various data size with 1000 round of queries \cite{Arash}. We have generated random string dataset of various size and combination of strings dataset of various size. The Table~\ref{tab1} describes the parameters of Figure~\ref{s1}. Figure~\ref{s1} represents the dynamic scaling of Filter Size according to data size. In Table~\ref{tab1}, the MaxFPC refers to a maximum number of false positive detected in 1000 round queries. The zero FPC refers to total number of zero false positive count in 1000 round queries. The AverageFPC and AverageFPP are the mean false positive count and the mean false positive probability in 1000 round queries respectively.


\begin{table}[ht]
\centering
\caption{Parameters description of Figure ~\ref{s1}}
\begin{tabular}{p{2cm}p{6cm}}
\hline
Name & Description \\ \hline
$a$ & Represents random strings dataset\\
$b$ & Combination of strings dataset\\
MaxFPC & Maximum number of false positive count in 1000 round queries \\ 
Zero FPC & Total number of no false positive count (Not found FP) in 1000 round queries \\ 
AverageFPC & $\frac{Total~FPC}{1000}$ \\
AverageFPP & $\frac{Total~FPP}{1000}$ \\
Filter Size & The Bloom Filter array size. \\
Data Size & Total number of input entries. \\ \hline

\end{tabular}
\label{tab1}
\end{table}

Figure~\ref{s2} depicts the snapshot by keeping the number of input to 100000 elements \cite{Arash}. The experiment is conducted by fixing the number of input elements in random string and combination of alphabets. Those strings are input to study the behavior of a number of false positive queries hit  in 1000 round queries. The dataset $a$ and dataset $b$ consist of random string and combination of the alphabets to form strings in different sizes. The input elements vary from 100 elements to 100000 elements to study the behavior of the false positive queries and the probability of false positive.  

\subsection{Discarding Compressed Bloom Filter} % Dec 2002
The Compressed Bloom Filter (ComBF) \cite{Mitz} reduces the extra space requirements, and maps an element into a single bit. However, there is an important tradeoff between performance and space complexity. Therefore, the ComBF does not exhibit a good performance.

\begin{figure}[ht]
\centering
\includegraphics[width=0.4\textwidth]{chart_comp.pdf}
\caption{Compression vs false positive on input of 100000 random string}
\label{comp}
\end{figure}

Figure ~\ref{comp} exposes the trade off between the compression and false positive. The high compression results in increment of false positive probability. In Figure ~\ref{comp}, the input strings are generated randomly and input to the compressed Bloom Filter. Hence, the result shows that high compression rate increases false positive which is not desirable for Bloom Filter. Figure ~\ref{comp} Effective False Positive Probability (EFPP), Probability of False Positive (PFP), and difference between both (Difference) \cite{Arash}. The difference is calculated as follows \[Differnce=100\times \frac{PFP}{EFPP}\]


\section{Variants of Bloom Filter}
\label{var}
% \subsection{Counting Bloom Filter} % June 2000
% Counting Bloom filter (CBF) \cite{countingBF} is an extension of Bloom filter which solves the delete problem of the Bloom filter. The conventional Bloom Filter does not support deletion of an element. The deletion operation may delete the information mapped by the other elements. Thus to solve this problem, CBF introduces a counter along with each slot. The counter keeps track of the number of elements mapped to that slot. When an element is added to a slot for the first time, then the slot is assigned the value 1 and the counter is incremented by 1. Again, if more elements are mapped to that particular slot, then only the counter is incremented. And, when an element is deleted, only the counter is decremented. And, when the counter becomes zero, then the slot is assigned value 0.

% \subsection{Spectral Bloom Filter} % 2003
% Spectral Bloom Filter (SBF) \cite{Cohen} is an extension of the standard Bloom Filter used for multiset keys. In this Bloom Filter each slot is a vector of counters $C$. This counter represents the multiplicity of items. Initially, $C$ is assigned to value 0. During insertion of an item $x$, ${C_{h_1(x)}, C_{h_2(x)},..., C_{h_k(x)}}$ is incremented by 1. Each slot stores the frequency of each item. During query operation, it returns the estimate of the frequency of the searched item. And, during deletion of an item $x$, ${C_{h_1(x)}, C_{h_2(x)},..., C_{h_k(x)}}$ is decremented by 1. 

% \subsection{Bloomier Filter} % Jan 2004
% The Bloomier Filter \cite{Bloomier} generalizes the Bloom Filter for high adaptability. The functions of the Bloom Filter are broadened by the Bloomier Filter. The Bloom Filter uses the concept of cascade Bloom Filter. Also, the Bloomier Filter associates some values with a subset. Moreover, it introduces a meta-database with a set to keep track of the entries in the set. 

% \subsection{Stable Bloom Filter} % June 2006
% Stable Bloom Filter (SBF) \cite{Stable} is an extension of the Standard Bloom Filter that update its Bloom Filter based on recent data. SBF is used for duplicate detection in streaming application. In this Bloom Filter, each element is mapped to $d$ slots. And, each slot can have minimum value 0 and maximum value $Max$ where $Max=2^d-1$. In insertion operation, the new element is hashed and the slots are checked if all is non-zero. If yes, then data is duplicated. If no, then $P$ (a fixed number) slots are chosen randomly. Then, these selected slots are decremented by 1. And, the hashed slots are assigned the value $Max$. Moreover, this Bloom Filter is called Stable because after a number of iterations the fraction of 0s in SBF becomes fixed irrespective of the parameters set at the beginning.

% \subsection{Weighted Bloom Filter} % July 2006
% Weighted Bloom Filter (WBF) \cite{Weighted} uses the query frequency and the membership likelihood to increase the efficiency of Bloom Filter. In WBF, each element is hashed by total $l$ hash methods, where $l$ depends on the total number of queries and its likelihood of being a member. Moreover, mean false positive probability is a weighted sum of the total number of queries for a certain element. In other words, an element is given more hash functions, when its query frequency is high and the likelihood of being a member is low.

% \subsection{Retouched Bloom Filter} % Dec 2006
% Retouched Bloom Filter (RBF) \cite{Retouch} is an extension of Bloom Filter which is able to remove some selected false positives. However, a tradeoff is made as it also generates some false negatives. In RBF, some slots which returns false positive are selected randomly. Then among those slots which produces a minimum number of false negative and also maximizes the number of false positive removals, it assign value 0.

\subsection{Scalable Bloom Filter} % March 2007
Scalable Bloom Filter (SBF) \cite{Almeida} is a Bloom filter having one or more Bloom Filters. In each Bloom filter, the array is partitioned into $k$ slices. Each hash function produces one slice. During insertion operation, for each element $k$ hash functions produces an index in their respective slice. So, each element is described using $k$ bits. When one Bloom filter is full, another Bloom filter is added. During query operation, all filters are searched for the presence of that element. The $k$ bit description of each element makes this filter more robust where no element is especially sensitive to false positives. In addition, this Bloom Filter have the advantage of scalability by adapting to set growth by adding a series of classic Bloom filters and making the error probability more tighter as per requirement.

\subsection{Adaptive Bloom Filter} %  July 2008
Adaptive Bloom Filter (ABF) \cite{ABF} is a Bloom Filter based on the Partial-Address Bloom Filter \cite{peir}. ABF is used in tracking the far-misses. Far-misses are those misses that is hits, if the core is permitted to use more cache. Each set of each core, a Bloom Filter array (BFA) with $2^k$ bits is added. When a tag is removed from the cache, tag's $k$ least significant bit is used to index a bit of the BFA, which is 1. During Cache miss, using the $k$ least significant bit the BFA is looked for the requested tag. A far-miss is detected when the array bit becomes 1.

\subsection{Blocked Bloom filter} % Jan 2009
Blocked Bloom Filter \cite{Putze} is a cache-efficient Bloom Filter. It is implemented by fitting a sequence of $b$ standard Bloom Filter in each cache block/line. Usually for better performance, the bloom filters are made cache-line-aligned. When an element is added, the first hash function determines the Bloom filter block to use. The other hash functions are used for mapping of the element to $k$ array slots, but within this block. Thus, this lead to only one cache miss. This is further improved by taking a single hash function instead of $k$ hash functions. Hence, this single hash function determines the $k$ slots. In addition, this hash operation is implemented using fewer SIMD instructions. The main disadvantage in using one hash function is, two elements are mapped to same $k$ slots causes a collision. And this leads to increased false positive rate (FPR).

\subsection{Dynamic Bloom Filter} % Jan 2010
Dynamic Bloom Filter (DBF) \cite{DyBF} is an extension of Bloom Filter which changes dynamically with changing cardinality. A DBF consist of some CBF (Counting Bloom Filter), say $s$. Initially, $s$ is 1 and the status of CBF as active. A CBF is called active, when a new element is inserted or an element is deleted from it. During insertion operation, DBF first checks whether the active CBF is full. If it is full a new CBF is added and its' status is made active. If not, then new element is added to active CBF. During query operation, the response is given after searching all CBF. And, during deletion operation, first the CBF is found which contains the element. If a single CBF contains that element, then it is deleted. However, if multiple CBFs are there, then the deletion operation is ignored but deleted  response (i.e. the operation is completed) is delivered. Furthermore, if the sum of two CBF capacities is less than a single CBF then they are united. For that, addition of counter vectors is used. The time complexity of insertion is same i.e. $O(1)$, whereas query and deletion operation is $O(k\times s)$ where $k$ is the number of hash functions. 

\subsection{Deletable Bloom Filter} % June 2010
Deletable Bloom filter (DlBF) \cite{DBF} is a Bloom Filter that enables false-negative-free deletions. In this Bloom Filter, the region of deletable bits is encoded compactly and saved in the filter memory. DlBF, divide the Bloom Filter array into some regions. This region is marked as deletable or non-deletable using bitmap of size same as the number of regions. During insertion operation, when an element maps to an existing element slot, i.e. collision, then the corresponding region is marked as non-deletable i.e bitmap is assigned value 1. This information is used during deletion. The elements under deletable region are only allowed to be deleted. Insertion and query operations in DBF are same as the traditional Bloom Filter.
%One demerit is, it cannot be used in dynamic applications where frequent insertion and deletion is done. Due to many insertions many slots collide and every region will become non-deletable region. Then, deletion cannot be done.

\subsection{Index-Split Bloom Filters} % Jan 2011
Index-split Bloom filter (ISBF) \cite{Split} helps in reducing memory requirements and off-chip memory accesses. It consist of many groups of on-chip parallel CBFs and a list of off-chip items. When a set of items is stored, the index of each item is divided into some $B$ groups. Each group contains $b$ bits, where ${B=\lceil log_2  n/b\rceil}$. So the items are split into $2^b$ subsets. Each subset is represented by a CBF. Thus, total $2^b$ CBFs per group are constructed in on-chip memory. During query operation, after matching the query element and the index of an item found by the $B$ group of on chip parallel CBFs, response is given. Also, for deletion operation, a lazy algorithm is followed. Because, deletion of an item requires adjustment of indexes of other off-chip items and reconstruction of all on-chip CBFs. Moreover, the average time complexity for off-chip memory accesses for insertion, query and, deletion is O(1).

\subsection{Quotient filter} % July 2012
Quotient Filter (QF) \cite{Bender} is a Bloom Filter where each element is represented by a multi-set $F$. The $F$ is an open hashtable with a total buckets of $m$=$2^q$, called quotienting\cite{knuth}. Besides, $F$ stores $p$-bit fingerprint for each element which is the hash value. In this technique, a fingerprint $f$ is partitioned into $r$ least significant bits, which stores the remainder. The $q$=$p$-$r$ is the most significant bits which stores the quotient. Both quotient and remainder is used for reconstruct of the full fingerprint. During insertion operation, $F$ stores the hash value. During query operation, $F$ is searched for the presence of the hash value of the element. And, during deletion operation, the hash value of that element is removed from $F$. QF has the advantage of dynamical resizing i.e. it expands and shrunk as elements are added or deleted. However, the QF insertion throughput deteriorates towards the maximum occupancy.

\subsection{NameFilter} % April 2013
Name Filter \cite{NameFilter} is a two-tier filter which helps in looking up names in Named Data Networking. The first tier determines the length of the name prefix and second tier makes use of the prefix determined in the previous stage to make a search in a group of Bloom Filters. In the first stage the name prefixes are mapped to Bloom Filter. Thereafter, the process of building up a Counting Bloom Filter is taken up. This filter is built for the concerned prefix set and then it is converted to take the form of a conventional Boolean Bloom Filter. As a final step, the second stage use the merged Bloom Filter. In the first stage, the calibration of the name prefixes to the Bloom Filter is done on the basis of their lengths. It maps the $k$ hash function into a single word. Hence, the Bloom Filter is called One Memory Access Bloom Filter as the query access time is $O(1)$ instead of $O(k)$. First, it acquires the hash output of the prefix using the DJB hash method. Then, the later hash value is calculated using the previous hash value. Thus, after $k-1$ loops, it obtains a single hash value and stores it in a word. This value is input for the calculation of the address in Bloom Filter, and the rest bits are calculated from one AND operation. So, when $k-1$ bits are 1s, then a graceful identification is declared. The aim of this stage is to find the longest prefix. In second stage, the prefixes are divided into groups based on their associated next-hop port(s). All groups are stored in the Bloom Filter. And, the desired port is found in this stage. In MBF, each slot stores a bit string with machine word-aligned. The $N$th bit stores the $N$th Bloom Filter's hash value and rest bits are padded with 0s. To obtain the forwarding port number, AND operation is done on $K$ bit strings with respect to $k$ hash functions. The location of 1 in the result gives the port number.

\subsection{Cuckoo Filter} % Dec 2014
A Cuckoo Bloom Filter \cite{Cuckoo} is based on Cuckoo hash table \cite{Cuckooh}. This Bloom Filter stores fingerprint instead of key-value pairs. Whereas, fingerprint means the hash value of the element. For insertion, index for two candidate buckets are calculated. One is the hash value of the element and another is the XOR operation between the hash value of the element and the hash value of the fingerprint of that element. This is called partial-key cuckoo hashing. This method reduces hash collision and improves the table utilization. After finding the indexes, the element is stored in any free bucket. otherwise cuckoo hash tables' kicking \cite{Cuckooh} of elements is done. For query operation, two candidate buckets are calculated as done in insertion operation, then if the element is present in any one of them true is returned otherwise false. For deletion operation, same procedure as lookup is followed, whereas instead of returning true or false, element is deleted. The advantage of the basic algorithms (i.e. insertion,deletion and lookup) is they are independent of hash table configuration (e.g. number of entries in each bucket). However, the disadvantage of using partial-key cuckoo hashing for storing fingerprints leads to slow increase in fingerprint size to increase in filter size. In addition, if the hash table is very large, but stores short fingerprints then hash collision increases. This lead to the chances of insertion failure and also reduces the table occupancy. 

\subsection{Multi-dimensional Bloom Filter} % Dec 2015
Crainiceanu et. al. proposed a Bloom Filter called Bloofi  \cite{Adina}. Bloofi is a Bloom Filter index. It is implemented like a tree. The Bloom Filter tree construction is done as follows. The leaves are Bloom Filters. And, the bitwise OR on the leaf Bloom Filters is done to obtain the parent nodes. This process continues till root is obtained. During lookup operation, the element is checked at root if it does not match then it returns false. Because if an element in leaf does not match then it will not match from the leaf to the root. Whereas, if the element matches, the query further moves to roots' children Bloom Filters till it reaches the leaf. During insertion of a new node, search for most similar node to the new node is done. As Bloofi want to keep similar nodes together. So, when found this new node is inserted as its sibling. If an overflow occurs, then the same procedure is followed as in a B+ tree. During deletion operation, the parent node deletes the pointer to the node. And, when underflow occurs, the same procedure is followed as in B+ tree.

\subsection{Sliding Bloom Filter} % Dec 2015
Sliding Bloom Filter \cite{Naor} is a Bloom Filter having a sliding window. It has parameters ($n$, $m$, $\varepsilon$). The sliding window remains over last $n$ elements and the value of the slots is 1. In other words, the window only shows the elements that are present. The $m$ numbers of elements that appear before the window elements does not have restrictions on the value. And $\varepsilon$ is the at most probable of slot being 1. This Bloom Filter is a dictionary based and use the Backyard Cuckoo hashing \cite{Backyard}. To this hashing a similar lazy deletion method is applied as used by Thorup \cite{thorup}. A parameter $c$ is used, which is the trade off between the accuracy of the index stored and the number of elements stored in the dictionary. After optimizing the parameter $c$ the Sliding Bloom filter shows good time and space complexity. The algorithm uses a hash function selected from the family of Universal hash functions. For each element in the dictionary $D$, stores its hash value and location where it previously appeared. The stream of data is divided into generations of size $n$/$c$ each, where $c$ is optimized later. Generation 1 is the first $n$/$c$ elements; generation 2 is next $n$/$c$ elements and so on. Current window contains last $n$ elements and at most $c$+1 generations. Two counters are used, one for generation number (say $g$) and another for the current element in the generation (say $i$). For every increment of $i$, $g$ get incremented to mod ($c$+1). For insertion, first obtain the $i$th hash value and checks whether it is present in $D$, if exists, the location of the element is updated with the current generation. Otherwise, it stores the hash value and generation number. Finally, update the two counters. If $g$ changes, then scan  $D$ and delete all elements with associated data equal to the new value of $g$.

\subsection{Bloom Filter Trie} % March 2016
Bloom Filter Trie (BFT) \cite{Trie} helps to store and compress a set of colored k-mers, and efficient traversal of the graph. It is an implementation of the colored de Bruijn graph (C-DBG). It is based on burst trie which stores k-mers along with the set of colors. Colors are bit array initialized with 0. A slot assigns the value 1 if that index k-mer has that color. Later, this set of color is compressed. BFT is defined as $t=(V_t,E_t)$ having the maximum height as $k$ where the k-mers is split into $k$ substrings. A BFT is a list of compressed containers. An uncompressed container of a vexter V is defined as $<s,color_{ps}>$ where $s$ is the suffix and $p$ is the prefix which represents the path from root to V. Tuples are ordered lexicographically based on their suffixes. BST support operations for storing, traversing, and searching of a pan-genome. And, it also helps in extracting relevant information of the contained genomes and subsets. The time complexity for insertion of a k-mer is $O(d+2^\lambda+2q)$ where $d$ is the worst lookup time, $\lambda$ is the number of bits to represent the prefix and $q$ is the maximum number of children. And, the time complexity of lookup operation is $O(2^\lambda+q)$.

\subsection{Autoscaling Bloom Filter} % June 2016
Autoscaling Bloom Filter \cite{Denis} is a generalization of CBF, which allows adjustment of its capacity based on probabilistic bounds on false positives and true positives. It is constructed by binarization of the CBF. The construction of Standard Bloom Filter is done by assigning all nonzero positions of the CBF as 1. And, given a CBF, the construction of ABF is done by assigning all the values which are less than or equal to the threshold value as 0.

\subsection{d-left Counting Bloom filter} % Sept 2016
d-Left CBF (dlCBF) \cite{d-left} is an improvement of the CBF. It uses the d-left hash table. This hash table consists of buckets, where each bucket has fixed number of cells. Each cell is of fixed size to hold a fingerprint and a counter. This arrangement makes the hash table appear as a big array. Each element has a fingerprint. And each fingerprint has two parts. The first part is a bucket index, which stores the element. Second part is the remainder part of the fingerprint. The range of bucket index is [$B$] and the remainder is [$R$]. So the hash function is $H$: $U$ $\rightarrow$ [$B$] $\times$ [$R$]. During element insertion, hash the element and store in appropriate remainders in the cell of each bucket. And increment the counter. And during deletion, decrement the counter. dlCBF solves the problems arise due to use of a single hash function. The hashing operation has two phases. In the first phase, apply a hash function, which gives the true fingerprint. And in the second phase, find the $d$ locations of the element using additional (pseudo)-random permutation. One small disadvantage in the obtained $d$ locations is, these are not independent, and uniform and as it is determined by the choices of the permutation.

\subsection{Ternary Bloom Filter} % Feb 2017
Ternary Bloom Filter (TBF) \cite{Lim} is another improvement of CBF. This Bloom filter introduces another parameter $v$ for each hash value, which can have possible values as {0, 1, $X$}. During insertion operation, if an element is mapped to a hash value for the first time, assign value 1 to $v$. If another element is mapped to the same hash value, then assign value $X$ to $v$. During lookup operation, if an element's every $v$ value for each hash value is $X$ then it is defined as indeterminable. Indeterminable means, the element cannot be identified as negative or positive. And, value 1 indicates, the element is present and value 0 indicates the element is absent. Similarly, in deletion operation, if an elements' every $v$ value for each hash value is $X$ then it is defined as undeletable. Undeletable means, the element cannot be deleted from TBF. And, if $v$ is value 1 it assigns value 0. TBF allocates the minimum number of bits to each cell which saves memory. In addition, it also gives much lower false positive rate compared to the CBF, when the same amount of memory used by both filters.

\subsection{Difference Bloom Filter} % 2017
Difference Bloom Filter (DBF) \cite{Yang} is a probabilistic data structure based on Bloom Filter. It has multi-set membership query which is more accurate and has a faster response speed. It is based on two main design principles. First, to make the representation of the membership of elements exclusive by writing a different number of 0s and 1s in the same filter. Second, use of DRAM memory to increase the accuracy of the filter. DBF consist of a SRAM and a DRAM chaining hash table. The SRAM filter is an array of $m$ bits with $k$ independent hash functions. During the insertion function, elements in the set $i$ are mapped to $k$ bit of the filter. Arbitrarily $k-i+1$ bits are set to value 1 and other $i-1$ bits are set to value 0. This is called $<i,~k>$ constraint. If the new element gets conflicted with another element in the filter, DBF use dual-flip strategy to make this bit shared. Dual-flip is to change a series of mapping bits of the filters, so that the filter satisfy the $<i,~k>$ constraint. During lookup operation, if exactly $k-i+1$ bits are 1 then it returns true. During deletion operation, for each bit of the $k$ bits of an element, DBF decides whether to reset it or not with the help of DRAM table.  

\subsection{Self-adjustable Bloom Filter} % Aug 2017
TinySet \cite{TinySet} is a Bloom Filter that has more space efficiency compared to standard Bloom Filter. Its' structure is similar to the blocked Bloom filter. Whereas, each block is a chain based hash table \cite{rivest}. It uses a single hash function, $H$  $\rightarrow$ $B$ $\times$ $L$ $\times$ $R$, where $B$ is the block number, $L$ is the index of the chain within that block, and $R$ is the remainder (or fingerprint) that is stored in that block. 

All operations (insertion, deletion and lookup) initially follow three common steps. First, apply hash function to the element and obtain the $B$, $L$, and $R$ values. Second, use $B$ to access the specific block. Third, calculate the Logical Chain Offset (LCO) and Actual Chain Offset (ACO) values. During insertion operation, shift all fingerprints from offset to the end of the block to right. The first bits in a block contain a fixed size index ($I$). Unset $I$ means chain is empty. If the $I$ bit is unset, it is made to set and the new element is marked as the last of its chain. During deletion operation, if $I$ is unset, then the operation is terminated as it indicates the element is absent. Otherwise, shift all bits from the ACO value to end of the block to left by a single bit. If the deleted element is marked last then previous is made last or mark entire chain as empty. In lookup operation, if $I$ is unset similarly the operation is terminated. Otherwise, search the chain. TinySet is more flexible due to its ability to dynamically change its configuration as per the actual load. It accesses only a single memory word and partially support deletion of elements. However, delete operation gradually degrade its space efficiency over time.

\subsection{Multi-stage Bloom Filter} % Sept 2017
BloomFlow \cite{Craig} is a multi-stage Bloom Filter which is used for multicasting in Software-defined networking (SDN). It helps to achieve reductions in forwarding state while avoiding false positive packet delivery. The BloomFlow extends the OpenFlow \cite{openflow} Forward action with a new virtual port called BLOOM$\_$PORTS to implement Bloom filter forwarding. When a flow specifies an output action to BLOOM$\_$PORTS forwarding Element (FE) implements an algorithm. The algorithm first reads from the start of the IP option field, the Elias gamma encoded filter length $b$, and the number of hash function of $k$ fields. Then the algorithm treats the rest of the bits of the IP option field as a Bloom Filter. And, this Bloom Filter is copied to a temporary cache for further processing. The remainder of IP options fields and the IP payload are shifted left to remove first stage filter from the packet header. Then the algorithm  iterates through all interfaces and check for membership test for each interface's bloom identifier in the cached bloom filter. Bloom identifier is a unique, 16 bit integer identifier. The Bloom identifier is assigned by the network controller to every interface on the network that participates in multicast forwarding. If the membership test returns true, the packet is forwarded from the matched interface.

\subsection{Dynamic Reordering Bloom Filter} % Sept 2017
Dynamic Reordering Bloom Filter \cite{DChang} is another type of Bloom Filter that saves the searching cost of Bloom Filter. It dynamically reorders the searching sequence of multiple Bloom Filter using One Memory Access Bloom Filter (OMABF) and the order of checking is saved in Query Index (QI). This approach considers two factors. First, policy of changing the query priority of Bloom Filter. Second, reduction of overhead caused due to change in the order. This approach reduces the searching time of the query by sorting and saving the query data in Bloom Filter based on popularity. Sorting is done based on the query order, i.e popularity of data. So when the request comes from that data it quickly gives the response. And, when the popularity of a data becomes more, its query order is made a level higher in the Bloom Filter. However, this change of query order imposes overheads. To solve this, Query Index (QI) is used. QI saves the query priority of each block. When membership is checked Bloom Filter are checked according to the order saved in QI.


% \section{Issues and Challenges}
% \label{issue}
% The simplicity and performance of Bloom Filter impact the research community and developers. However, there are still some issues and challenges in the Bloom Filter.

% \subsection{False Positive}
% The False Positive (FP) is a key issue in Bloom Filter data structure. The FP negatively impacts the Bloom Filter.The FP is an overhead to the Bloom Filter. The FP leads to unnecessary searching in the database and adds more steps. Hence, the key challenge is to reduce the number of false positive. However, it is impossible to bring down the FP probability to zero. So, there is no Bloom Filter available in the market to make $FP=0$. If $FP=0$, then there would be no overhead in the Bloom Filter. However, the researchers are still investigating on this issue.

% In duplicate key filtering, the False Positive introduces error, and it cannot be tolerated at any cost. The false positive filter out the wrong elements. On the other hand, false negative also introduces error in some applications. Conventional membership filter cannot tolerate False Negative depending on the applications, for example, HBA \cite{Zhu04}.

% \subsection{Scalability}
% The scalability is also a key issue in the Bloom Filter. The conventional Bloom Filter is non-scalable. The large number of entries causes more occurrences of FP. Let the set be $\mathcal{S}$ and the total number of elements in the set be $n$. Therefore, elements are $\varepsilon_1,~\varepsilon_2,~\varepsilon_3,~\ldots~\varepsilon_n$. During each element insertion, it get mapped to $k$ slots of the Bloom Filter. If the value of $n$ increases, then number of elements mapped to a slot increases. This lead to increases in the probability of FP . Therefore, the high scalability is the prominent challenge to achieve.

% \subsection{Space complexity}
% The Bloom Filter requires extra space from primary memory to hold the information of the elements. The space requirements for different kinds of Bloom Filter differs. For example, Counting Bloom Filter has an extra information in each slot i.e. the counter. This counter also require some memory. Therefore, the scalability of the Bloom Filter also differs. Thus, low space consumption is another challenge to achieve.

% \subsection{Deletion}
% The conventional Bloom Filter does not support deletion. Nowadays, most of the Bloom Filter supports deletion of an element from a set. However, it is also a great challenge to design an efficient deletion of an element from a set. Deletion of an element also increases the probability of True Negative for other existing elements. If a Bloom Filter variant does not support deletion, then the Bloom Filter array become full over a period of time. Thus, the FP becomes 100\%. Therefore, an efficient deletion operation of the Bloom Filter is essential.

% \subsection{Hashing}
% The Bloom Filter is a hashing data structure. Besides, the Bloom Filter requires more hashing functions to reduce the false positive probability. The complex hashing scheme is introduced to reduce the false positive probability, for example, Murmur hashing, Cuckoo hashing, SHA-1, SHA-2, SHA-3, MD5, and other cryptographic hashing. However, nested use of such complex hashing scheme introduces computational overhead. The challenge is to reduce the number of hash functions while maintaining the desired false positive probability. 



\section{Conclusion}
\label{con}
The Bloom Filter is the widely used data structure. The Bloom Filter also associates with a system to improve the performance dramatically. Moreover, it does not waste more spaces of main memory. The Bloom Filter provides a fast lookup system with a few KB of memory spaces. The Bloom Filter returns either 0 (False) or 1 (True). However, this Boolean value is classified into four categories, namely, TN, TP, FP, and FN. The TN and TP boost up the lookup performance of a system. On the contrary, the FP, and FN become an overhead to the system. Nevertheless, the FN is not common for all variants of Bloom Filter. The FP is the key barrier of Bloom Filter. Therefore, there are several kinds of Bloom Filters in the market. The key objective of the modern Bloom Filter is to reduce the probability of FP. In addition, the modern Bloom Filter also deals with high scalability, space efficiency, adaptability, and high accuracy. Besides, the Bloom Filter meets copious applications, and thus, extensive experiment has been done on Bloom Filter. The paper discusses a few selected applications to highlight the efficacy of the Bloom Filter. However, it is observed that the Bloom Filter is applied extensively in computer networking. Moreover, the efficiency, and accuracy of Bloom Filter depends on the probability of false positive. Therefore, reducing the false positive probability is a prominent challenge to achieve. Finally, the Bloom Filter will be able to reduce the false positive probability approximately to zero.

In this paper, we presented the theoretical and practical analysis of Bloom Filter. Moreover, there are abundant of Bloom Filter variants, those are discussed in this paper. Also, we have exposed the disadvantages of compressed bloom filter through a experiment. Moreover, the FP analysis is also shown through an experiment. 
\balance
\bibliographystyle{IEEEtran}
\bibliography{mybibfile}
%%
%% Note that you need to make sure that LaTeX (BibTeX) can find IEEEtrans.bst in your system.
%% If you are unsure about that, just place IEEEtrans.bst in the same directory where your LaTeX source files reside.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Below thebibliography environment will be automatically created in a different file (your_file_name.bbl) 
%%% if you use BibTeX and specify IEEEtrans.bst.


\end{document}

\begin{thebibliography}{10}
\providecommand{\url}[1]{#1}
\csname url@rmstyle\endcsname
\providecommand{\newblock}{\relax}
\providecommand{\bibinfo}[2]{#2}
\providecommand\BIBentrySTDinterwordspacing{\spaceskip=0pt\relax}
\providecommand\BIBentryALTinterwordstretchfactor{4}
\providecommand\BIBentryALTinterwordspacing{\spaceskip=\fontdimen2\font plus
\BIBentryALTinterwordstretchfactor\fontdimen3\font minus
  \fontdimen4\font\relax}
\providecommand\BIBforeignlanguage[2]{{%
\expandafter\ifx\csname l@#1\endcsname\relax
\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%
\typeout{** loaded for the language `#1'. Using the pattern for}%
\typeout{** the default language instead.}%
\else
\language=\csname l@#1\endcsname
\fi
#2}}

\bibitem{Bloom}
B.~H. Bloom, ``Space/time trade-o s in hash coding with allowable errors,''
  \emph{Comm. of the ACM}, vol.~13, no.~7, pp. 422--426, 1970.

\bibitem{Putze}
F.~Putze, P.~Sanders, and J.~Singler, ``Cache-, hash-, and space-efficient
  bloom filters,'' \emph{J. Exp. Algorithmics}, vol.~14, pp. 4:4.4--4:4.18,
  Jan. 2010.

\bibitem{Cuckoo}
B.~Fan, D.~G. Andersen, M.~Kaminsky, and M.~D. Mitzenmacher, ``Cuckoo filter:
  Practically better than bloom,'' in \emph{Proceedings of the 10th ACM Intl.
  Conf. on Emerging Networking Experiments and Technologies}, ser. CoNEXT '14,
  2014, pp. 75--88.

\bibitem{d-left}
F.~Bonomi, M.~Mitzenmacher, R.~Panigrahy, S.~Singh, and G.~Varghese, \emph{An
  Improved Construction for Counting Bloom Filters}.\hskip 1em plus 0.5em minus
  0.4em\relax Berlin, Heidelberg: Springer Berlin Heidelberg, 2006, pp.
  684--695.

\bibitem{Bender}
M.~A. Bender, M.~Farach-Colton, R.~Johnson, R.~Kraner, B.~C. Kuszmaul,
  D.~Medjedovic, P.~Montes, P.~Shetty, R.~P. Spillane, and E.~Zadok, ``{Don'T
  Thrash}: How to cache your hash on flash,'' \emph{Proc. VLDB Endow.}, vol.~5,
  no.~11, pp. 1627--1637, July 2012.

\bibitem{Almeida}
P.~S. Almeida, C.~Baquero, N.~Preguica, and D.~Hutchison, ``Scalable bloom
  filters,'' \emph{Information Processing Letters}, vol. 101, no.~6, pp.
  255--261, 2007.

\bibitem{Naor}
M.~Naor and E.~Yogev, ``Tight bounds for sliding bloom filters,''
  \emph{Algorithmica}, vol.~73, no.~4, pp. 652--672, 2015.

\bibitem{TinySet}
G.~Einziger and R.~Friedman, ``Tinyset- an access efficient self adjusting
  bloom filter construction,'' \emph{IEEE/ACM Transactions on Networking},
  vol.~25, no.~4, pp. 2295--2307, 2017.

\bibitem{Lim}
H.~Lim, J.~Lee, H.~Byun, and C.~Yim, ``Ternary bloom filter replacing counting
  bloom filter,'' \emph{IEEE Communications Letters}, vol.~21, no.~2, pp.
  278--281, 2017.

\bibitem{Adina}
A.~Crainiceanu and D.~Lemire, ``Bloofi: Multidimensional bloom filters,''
  \emph{Information Systems}, vol.~54, no. Supplement C, pp. 311 -- 324, 2015.

\bibitem{openflow}
N.~McKeown, T.~Anderson, H.~Balakrishnan, G.~Parulkar, L.~Peterson, J.~Rexford,
  S.~Shenker, and J.~Turner, ``Openflow: enabling innovation in campus
  networks,'' \emph{ACM SIGCOMM Computer Communication Review}, vol.~38, no.~2,
  pp. 69--74, 2008.

\bibitem{Craig}
A.~Craig, B.~Nandy, I.~Lambadaris, and P.~Koutsakis, ``Bloomflow: Openflow
  extensions for memory efficient, scalable multicast with multi-stage bloom
  filters,'' \emph{Computer Communications}, vol. 110, no. Supplement C, pp. 83
  -- 102, 2017.

\bibitem{Yang}
D.~Yang, D.~Tian, J.~Gong, S.~Gao, T.~Yang, and X.~Li, ``Difference bloom
  filter: A probabilistic structure for multi-set membership query,'' in
  \emph{2017 IEEE International Conference on Communications (ICC)}, 2017, pp.
  1--6.

\bibitem{DChang}
D.~C. Chang, C.~Chen, and M.~Thanavel, ``Dynamic reordering bloom filter,'' in
  \emph{2017 19th Asia-Pacific Network Operations and Management Symposium
  (APNOMS)}, 2017, pp. 288--291.

\bibitem{BigTable}
F.~Chang, J.~Dean, S.~Ghemawat, W.~C. Hsieh, D.~A. Wallach, M.~Burrows,
  T.~Chandra, A.~Fikes, and R.~E. Gruber, ``Bigtable: A distributed storage
  system for structured data,'' \emph{ACM Trans. Comput. Syst.}, vol.~26,
  no.~2, pp. 4:1--4:26, 2008.

\bibitem{Anitha15}
R.~Anitha and S.~Mukherjee, ``'maas': Fast retrieval of data in cloud using
  metadata as a service,'' \emph{Arabian Journal for Science and Engineering},
  vol.~40, no.~8, pp. 2323--2343, 2015.

\bibitem{Zhu04}
Y.~Zhu, H.~Jiang, and J.~Wang, ``Hierarchical bloom filter arrays (hba): A
  novel, scalable metadata management system for large cluster-based storage,''
  in \emph{CLUSTER '04, Proceedings of the 2004 IEEE International Conference
  on Cluster Computing}, 2004, pp. 165--174.

\bibitem{Zhu08}
Y.~Zhu, H.~Jiang, J.~Wang, and F.~Xian, ``Hba: Distributed metadata management
  for large cluster-based storage systems,'' \emph{IEEE transactions on
  parallel and distributed systems}, vol.~19, no.~6, pp. 750 -- 763, 2008.

\bibitem{Hua11}
Y.~Hua, Y.~Zhu, H.~Jiang, D.~Feng, and L.~Tian, ``Supporting scalable and
  adaptive metadata management in ultralarge-scale file systems,'' \emph{IEEE
  Transactions on Parallel and Distributed Systems}, vol.~22, no.~4, pp. 580 --
  593, 2011.

\bibitem{zhu}
D.~Zhu and M.~Mutka, ``Sharing presence information and message notification in
  an ad hoc network,'' in \emph{Pervasive Computing and Communications,
  2003.(PerCom 2003). Proceedings of the First IEEE International Conference
  on}.\hskip 1em plus 0.5em minus 0.4em\relax IEEE, 2003, pp. 351--358.

\bibitem{mesh}
L.~Maccari, R.~Fantacci, P.~Neira, and R.~M. Gasca, ``Mesh network firewalling
  with bloom filters,'' in \emph{Communications, 2007. ICC'07. IEEE
  International Conference on}.\hskip 1em plus 0.5em minus 0.4em\relax IEEE,
  2007, pp. 1546--1551.

\bibitem{Fernandez}
G.~Fernandez-Del-Carpio, D.~Larrabeiti, and M.~Uruena, ``Forwarding of
  multicast packets with hybrid methods based on bloom filters and shared trees
  in mpls networks,'' in \emph{2017 IEEE 18th International Conference on High
  Performance Switching and Routing (HPSR)}, 2017, pp. 1--8.

\bibitem{Grandi}
F.~Grandi, ``On the analysis of bloom filters,'' \emph{Information Processing
  Letters}, vol. 129, no. Supplement C, pp. 35 -- 39, 2018.

\bibitem{Tarkoma}
S.~Tarkoma, C.~E. Rothenberg, and E.~Lagerspetz, ``Theory and practice of bloom
  filters for distributed systems,'' \emph{IEEE Communications Surveys
  Tutorials}, vol.~14, no.~1, pp. 131--155, 2012.

\bibitem{Arash}
A.~Partow, ``C++ bloom filter library,'' Accessed on December, 02, 2017 from
  \url{http://www.partow.net/programming/bloomfilter/index.html} and
  \url{https://github.com/ArashPartow/bloom}.

\bibitem{Mitz}
M.~Mitzenmacher, ``Compressed bloom filters,'' \emph{IEEE/ACM Transactions on
  Networking}, vol.~10, no.~5, pp. 604--612, 2002.

\bibitem{ABF}
K.~Nikas, M.~Horsnell, and J.~Garside, ``An adaptive bloom filter cache
  partitioning scheme for multicore architectures,'' in \emph{2008
  International Conference on Embedded Computer Systems: Architectures,
  Modeling, and Simulation}, 2008, pp. 25--32.

\bibitem{peir}
J.-K. Peir, S.-C. Lai, S.-L. Lu, J.~Stark, and K.~Lai, ``Bloom filtering cache
  misses for accurate data speculation and prefetching,'' in \emph{ACM
  International Conference on Supercomputing 25th Anniversary Volume}.\hskip
  1em plus 0.5em minus 0.4em\relax ACM, 2014, pp. 347--356.

\bibitem{DyBF}
D.~Guo, J.~Wu, H.~Chen, Y.~Yuan, and X.~Luo, ``The dynamic bloom filters,''
  \emph{IEEE Transactions on Knowledge and Data Engineering}, vol.~22, no.~1,
  pp. 120--133, 2010.

\bibitem{DBF}
C.~E. Rothenberg, C.~A.~B. Macapuna, F.~L. Verdi, and M.~F. Magalhaes, ``The
  deletable bloom filter: a new member of the bloom family,'' \emph{IEEE
  Communications Letters}, vol.~14, no.~6, pp. 557--559, 2010.

\bibitem{Split}
K.~Huang and D.~Zhang, ``An index-split bloom filter for deep packet
  inspection,'' \emph{Science China Information Sciences}, vol.~54, no.~1, pp.
  23--37, Jan 2011.

\bibitem{knuth}
D.~E. Knuth, \emph{The art of computer programming: sorting and
  searching}.\hskip 1em plus 0.5em minus 0.4em\relax Pearson Education, 1998,
  vol.~3.

\bibitem{NameFilter}
Y.~Wang, T.~Pan, Z.~Mi, H.~Dai, X.~Guo, T.~Zhang, B.~Liu, and Q.~Dong,
  ``Namefilter: Achieving fast name lookup with low memory cost via applying
  two-stage bloom filters,'' in \emph{2013 Proceedings IEEE INFOCOM}, 2013, pp.
  95--99.

\bibitem{Cuckooh}
R.~Pagh and F.~F. Rodler, ``Cuckoo hashing,'' \emph{Journal of Algorithms},
  vol.~51, no.~2, pp. 122--144, 2004.

\bibitem{Backyard}
Y.~Arbitman, M.~Naor, and G.~Segev, ``Backyard cuckoo hashing: Constant
  worst-case operations with a succinct representation,'' in \emph{2010 IEEE
  51st Annual Symposium on Foundations of Computer Science}, 2010, pp.
  787--796.

\bibitem{thorup}
M.~Thorup, ``Timeouts with time-reversed linear probing,'' in \emph{Infocom,
  2011 Proceedings Ieee}.\hskip 1em plus 0.5em minus 0.4em\relax IEEE, 2011,
  pp. 166--170.

\bibitem{Trie}
G.~Holley, R.~Wittler, and J.~Stoye, ``Bloom filter trie: an alignment-free and
  reference-free data structure for pan-genome storage,'' \emph{Algorithms for
  Molecular Biology}, vol.~11, 2016.

\bibitem{Denis}
\BIBentryALTinterwordspacing
D.~Kleyko, A.~Rahimi, and E.~Osipov, ``Autoscaling bloom filter: Controlling
  trade-off between true and false positives,'' \emph{CoRR}, vol.
  abs/1705.03934, 2017. [Online]. Available:
  \url{http://arxiv.org/abs/1705.03934}
\BIBentrySTDinterwordspacing

\bibitem{rivest}
R.~L. Rivest and C.~E. Leiserson, \emph{Introduction to algorithms}.\hskip 1em
  plus 0.5em minus 0.4em\relax McGraw-Hill, Inc., 1990.

\end{thebibliography}