Page 446 - 《软件学报》2025年第7期
P. 446

李猛 等: 代价敏感的指纹可变哈希布谷鸟过滤器                                                         3367


                 3.1.2    构造时间复杂度分析

                    指纹可变哈希布谷鸟过滤器的构造过程主要涉及将集合                     P 和  N  内的元素先插入辅助布谷鸟哈希表, 然后根
                                                                                                O(1), 这就
                 据每个哈希桶内元素频率分布情况选取最优的哈希函数. 首先, 布谷鸟哈希表的插入复杂度平摊下来是
                 使得插入集合     P 内的元素的复杂度为       O(|P|), 而插入集合   N  内元素的复杂度为     O(|N|). 此外, 在搜寻最优哈希函数
                 时, 需要遍历所有候选指纹哈希函数, 然后找到最优的哈希函数. 由于候选的哈希函数数目取决于每个桶内哈希索
                                    d
                 引单元的比特数      d, 也即  2  个候选指纹哈希函数. 因此, 搜索最优哈希函数复杂度为:

                                                      
                                              b−1
                                             ∑        
                                                  d          d          d
                                            O    N i ·2 ·c  = O(2·|N|·2 ·c) = O(|N|·2 )            (3)
                                                       
                                                      
                                               i=0
                                                                         d
                    将所有步骤的复杂度合并后可知, 最终的构造复杂度为                  O(|P|+|N|·(2 +1)).

                 3.1.3    空间复杂度分析
                    对于空间复杂度, 过滤器的空间复杂度通常用                BPK (bits-per-key) 指标衡量, 即每个元素占用的比特数目, 该
                 参数通常是由用户指定. 因此, 在给定          BPK  和总元素个数的情况下, 空间复杂度为            p· BPK. 此外, 空间复杂度也可
                 以表示为   b·(d +c·e), 其中  b 是  VHCF  内包含的哈希桶个数,  c 是  VHCF  单个哈希桶可存储的指纹单元数,       d 是  VHCF
                 单个哈希桶内哈希索引单元比特数,            e 是  VHCF  哈希桶内指纹单元的指纹长度.
                    复杂度分析总结: 在时间复杂度分析方面, VHCF             的查询复杂度是常数级别, 与标准布谷鸟过滤器查询复杂度
                 相同. 但由于引入哈希索引单元, 略慢于标准布谷鸟过滤器. 在构造时间复杂度方面, VHCF                         的构造复杂度正比于
                 集合   P 和集合  N  的总大小, 同样由于引入了最优哈希函数搜索的步骤, VHCF               的构造时间复杂度高于标准布谷鸟
                 过滤器.

                 3.2   误判率分析
                    本文先计算在不考虑哈希索引单元的情况下的误判率, 即映射到相同哈希桶内的同时并且映射的桶内有相同
                                                                                                    c 个长
                 的指纹信息. 因此, 由于本文只考虑静态场景下已经映射到同一个桶内的元素, 只需要考虑在同一个桶内和
                 度为  e 的指纹冲突的概率, 误判率表示为:

                                                              c
                                                          p =                                         (4)
                                                             2 e
                                                                                      N  的元素内映射进入哈
                    进一步地, 本文继续考虑引入了哈希索引单元后的误判率, 为了分析方便, 本文将集合
                                                                                                d
                 希桶   B i  内的元素集合记为  , 并简记    |N i | = n. 由于引入了指纹哈希单元, 我们允许一个单元最多使用            2  个哈希函
                                      N i
                                                                           2  个哈希函数中误判元素个数最少的
                                                                            d
                 数, 并且只选择误判率最低的哈希函数. 因此, 上述问题可以转化成为求解
                 哈希函数对应的误判个数, 即求解下列式子的期望:
                         1  2   2 d  ,   i
                      min(h ,h ,...,h ) h  指代第  i 个哈希函数误判的元素个数.
                                     i                                           Y  且
                    这里, 首先可以发现      h  都是独立同分布的变量, 为了求解方便, 引入一个新变量

                                                                   2 d
                                                            1
                                                              2
                                                    Y = min(h ,h ,...,h )                             (5)
                                                         1
                                                                          i
                                                             2

                    首先求解    Y  的累计概率分布,    Pr(Y ⩽ i) = 1−Pr(h > i,h > i,...) . 由于  h  是独立同分布变量, 因此该式子可以简
                 化为:

                                                                    2 d
                                                                                1
                                                  1
                                                          2
                                    Pr(Y ⩽ i) = 1−Pr(h > i)·Pr(h > i)·... ·Pr(h > i) = 1−Pr(h > i) 2 d  (6)
                                                                                            1
                                    1
                                 Pr(h > i), 即单个哈希函数误判个数的累计概率分布函数. 通过分情况讨论,                  h  有如下几种情
                    下面, 继续求解
                                                                        (  )
                                                                         n
                                                1
                       1
                                                                   n
                 况: (1)   h = 0 的概率为  p 0 = (1− p) ; (2)  h = 1 的概率为  p 1 = (1− p) p 1 =  p(1− p) n−1 ; (3) 拓展至一般情况时, 误
                                           n
                                                                         1
                                   (  )
                                    n
                                             n−i
                                        i
                        i 的概率,  p i =  p (1− p) . 因此, 可以得知:
                 判个数为
                                     i
                                                                ∑
                                                        1
                                                     Pr(h > i) = 1−  p j                              (7)
                                                                j∈[0,i]
                              1
                    因此, 将  Pr(h > i) 代入下列式子, 可得:
   441   442   443   444   445   446   447   448   449   450   451