本发明专利技术提出一种对多阶哈希进行优化的方法及装置,其中方法包括:向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测;如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。本发明专利技术能够提高多阶哈希的填充率。
【技术实现步骤摘要】
【专利摘要】本专利技术提出一种对多阶哈希进行优化的方法及装置,其中方法包括:向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测;如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。本专利技术能够提高多阶哈希的填充率。【专利说明】一种对多阶哈希进行优化的方法及装置
本专利技术涉及多阶哈希
,尤其涉及一种对多阶哈希进行优化的方法和装置。
技术介绍
多阶哈希是一种优秀的数据结构,其具有高性能、可重入、稳定、健壮、多执行流安全、可自淘汰等优点。多阶哈希的实现过程如下: 预设N个大素数,每一个大素数作为每一阶哈希桶的长度; 需要存储新的数据时,使用该新数据的键值对当前阶哈希桶的长度取余,得到寻址位置,如果该寻址位置上已经保存有冲突数据,则向下一阶进行哈希计算;否则,将该新的数据保存在该寻址位置中; 向多阶哈希存储数据时,最大可冲突次数为多阶哈希的阶数。 如图1为现有技术中一个多阶哈希的存储结构示意图。该多阶哈希的阶数为6阶,由上至下的阶数依次增大。每一阶哈希桶包括多个存储位置,其中斜线格表示已保存有冲突数据的位置(即已用位置),空白格表示没有保存冲突数据的位置(即可用位置)。 向该多阶哈希插入新的数据A时,根据A的键值(记为KeyA)计算A在第I阶的寻址位置,发现该寻址位置为已用位置,则继续向第2阶寻址;根据KeyA计算A在第2阶的寻址位置,发现该寻址位置为已用位置,则继续向第3阶寻址;根据KeyA计算A在第3阶的寻址位置,发现该寻址位置为可用位置,则将A保存在该第3阶的可用位置中。如果对A —直寻址到最高阶,发现最高阶的寻址位置仍为已用位置,则判定对数据A的插入失败。 由以上过程可见,现有的哈希算法在对需要插入的新数据寻址时,如果每一阶的寻址位置均不可用,则直接判定对新数据的插入失败;然而,此时可能多阶哈希中尚存在空闲的位置没有使用,这就导致现有多阶哈希的填充率低。
技术实现思路
本专利技术提出一种多阶哈希进行优化的方法及装置,能够提高多阶哈希的填充率。 本专利技术的技术方案是这样实现的: 一种对多阶哈希进行优化的方法,包括: 向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测; 如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。 向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测; 如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。 一种对多阶哈希进行优化的装置,包括: 探测模块,用于当向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测; 保存模块,用于当存在探测成功的冲突数据时,将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述新的数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。 可见,本专利技术提出的对多阶哈希进行优化的方法和装置,在对需要插入的新数据寻址时,如果每一个寻址位置均不可用,则判断其所有寻址位置上的冲突数据是否能够向更高阶转移,如果能,则将该冲突数据向更高阶转移,并将新的待插入数据插入该冲突数据的初始位置。通过这种方式,能够提高多阶哈希的填充率。 【专利附图】【附图说明】 图1为现有技术中一个多阶哈希的存储结构示意图; 图2为本专利技术提出的对多阶哈希进行优化的方法流程图; 图3为本专利技术实施例一的示意图1 ; 图4为本专利技术实施例一的示意图2 ; 图5为本专利技术实施例一的示意图3 ; 图6为本专利技术实施例一的示意图4 ; 图7为本专利技术实施例二的示意图1 ; 图8为本专利技术实施例二的示意图2 ; 图9为本专利技术实施例二的示意图3 ; 图10为对现有的多阶哈希、本专利技术提出的基于探测的多阶哈希、进一步改进后的基于探测的类Cuckoo哈希的填充率比较结果示意图; 图11为对现有的多阶哈希、本专利技术提出的基于探测的多阶哈希、进一步改进后的基于探测的类Cuckoo哈希的写效率(每秒)比较结果示意图; 图12为对现有的多阶哈希、本专利技术提出的基于探测的多阶哈希、进一步改进后的基于探测的类Cuckoo哈希的读效率(每秒)比较结果示意图; 图13为对数据规模为2700W的20阶普通多阶哈希、数据规模为700W的5阶基于探测的类Cuckoo哈希和数据规模为2700W的5阶基于探测的类Cuckoo哈希的填充率的比较结果示意图; 图14为对数据规模为2700W的20阶普通多阶哈希、数据规模为700W的5阶基于探测的类Cuckoo哈希和数据规模为2700W的5阶基于探测的类Cuckoo哈希的写效率(每秒)的比较结果示意图; 图15为对数据规模为2700W的20阶普通多阶哈希、数据规模为700W的5阶基于探测的类Cuckoo哈希和数据规模为2700W的5阶基于探测的类Cuckoo哈希的读效率(每秒)的比较结果示意图。 【具体实施方式】 本专利技术提出一种对多阶哈希进行优化的方法,如图2为该方法实现流程图,包括: 步骤201:向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测; 步骤202:如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。 上述过程中,将冲突数据向更高阶进行探测的方式具体可以为:根据所述冲突数据的键值计算该冲突数据在更高阶上的寻址位置,当发现空闲的寻址位置时,判定该冲突数据探测成功,将该空闲的寻址位置作为该冲突数据探测成功的位置。 具体实现时,将所有寻址位置上的冲突数据向更高阶进行探测时,可以维护一个变量,该变量的初始值为所述多阶哈希的阶数加I ;如果冲突数据探测成功,则判断该冲突数据探测成功位置的阶数是否小于该变量,如果小于,则将该变量的值修改为该从今天数据探测成功位置的阶数,继续对更高阶冲突数据的探测;当所有冲突数据探测完毕之后,如果所述变量的值不大于所述多阶哈希的阶数,则判定存在探测成功的冲突数据。 也就是说,对于一个新插入的数据,根据其键值key计算该数据在每一阶的寻址位置,如果每一阶哈希都没有空位予以插入的话,那么将每一阶与key产生冲突的值去其更高阶的地方尝试,看是否有空位予以插入。如果有,则取出一个可替换阶数最低的进行替换,再将替换出的值放到探测的位置上。 以下举具体的实施例对上述方法做详细介绍。 实施例一: 在本实施例中,需要将新的数据A插入一个6阶哈希。如本文档来自技高网...
【技术保护点】
一种对多阶哈希进行优化的方法,其特征在于,所述方法包括:向多阶哈希插入新的数据时,如果该待插入数据所有寻址位置上均已保存冲突数据,则将所述所有寻址位置上的冲突数据向更高阶进行探测;如果存在探测成功的冲突数据,则将探测成功位置的阶数最低的冲突数据转移至该探测成功的位置进行保存,并将所述待插入数据保存在该探测成功位置的阶数最低的冲突数据的初始位置。
【技术特征摘要】
【专利技术属性】
技术研发人员:万林佳,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。