创建哈希表的方法和设备的制造方法

文档序号:9375600阅读:384来源:国知局
创建哈希表的方法和设备的制造方法
【技术领域】
[0001]本发明涉及通信领域,具体涉及一种创建哈希表的方法和设备。
【背景技术】
[0002]哈希(hash)表具有较高的查找性能,在通信技术领域应用十分广泛。2-left哈希算法将一个哈希函数分成两个独立的哈希函数hashl和hash2,两个哈希函数分别对应等大的哈希子表,两个哈希子表对应的哈希函数hashl和hash2的最大输出通常是2的正整数次幂,生成的哈希子表空间也是等大的2的正整数次幂,比如2兆(2097152)、4兆(4194304)、8 兆(8388608)、16 兆(16777216)、32 兆(33554432)等等,因此 2-left 哈希表空间为两个哈希子表空间之和,也为2的正整数次幂。而实际的需求的表项个数通常不是2的正整数次幂,比如5 000 000,20 000 000,24 000 000等等。
[0003]为了满足非2的正整数次幂的哈希表项需求,最常用的方法是寻找和它最接近的2的正整数次幂空间来完成,即使用大的空间来满足现有表项需求。比如24 000 000表项的哈希表,通常采用32兆的表项的哈希表来实现。
[0004]使用大的哈希表来实现非2的正整数次幂的空间,以32兆表项来实现24 000 000的空间为例,大约8 000 000的空间被浪费掉,即大约25%的表项空间是冗余的,造成空间的浪费,增加了实现的代价。

【发明内容】

[0005]本发明实施例提供一种创建哈希表的方法和设备,能够生成非2的正整数次幂空间的哈希表,减少空间浪费,降低了实现的代价。
[0006]第一方面,提供了一种创建哈希表的方法,包括:根据哈希表的N个哈希子表中第η个哈希子表的空间确定至少两个哈希子表子空间,其中,第η个哈希子表的空间的大小为非2的正整数次幂,至少两个哈希子表子空间的大小为2的正整数次幂,其中,N为大于或等于2的整数,η = 1,2,…,N ;根据第η个预处理哈希函数将当前键值映射到至少两个哈希子表子空间之一,第η个预处理哈希函数用于将多个键值映射到至少两个哈希子表子空间中;根据至少两个哈希子表子空间之一对应的哈希函数和当前键值生成第η个哈希子表的哈希桶地址;根据针对N个哈希子表生成的N个哈希子表的哈希桶地址对应的空闲分片数目将当前键值存储在N个哈希子表中的一个哈希子表中。
[0007]结合第一方面,在第一种可能的实现方式中,至少两个哈希子表子空间包括M个哈希子表子空间,至少两个哈希子表子空间之一为第m个哈希子表子空间,其中,M为大于或等于2的整数,m为1,2,…,M中的数,根据至少两个哈希子表子空间之一对应的哈希函数和当前键值生成第η个哈希子表的哈希桶地址,包括:根据第m个哈希子表子空间对应的哈希函数和当前键值生成当前键值对应于第m个哈希子表子空间的哈希桶地址;计算第I个哈希子表子空间至第m-Ι个哈希子表子空间的大小之和;将当前键值对应于第m个哈希子表子空间的哈希桶地址与第I个哈希子表子空间至第m-Ι个哈希子表子空间的大小之和相加,得到第η个哈希子表的哈希桶地址。
[0008]结合第一方面或第一种可能的实现方式,在第二种可能的实现方式中,第η个预处理哈希函数为循环冗余校验(Cyclic Redundancy Check, CRC)函数,根据第η个预处理哈希函数将当前键值映射到至少两个哈希子表子空间之一,包括:根据第η个预处理哈希函数和当前键值得到预处理结果;将预处理结果对至少两个哈希子表子空间中的各空间的比例之和做取模运算;根据取模运算的结果将当前键值映射到至少两个哈希子表子空间之
O
[0009]结合第一方面或第一种和第二种可能的实现方式中的任一种可能的实现方式,在第三种可能的实现方式中,根据针对N个哈希子表生成的N个哈希子表的哈希桶地址对应的空闲分片数目将当前键值存储在N个哈希子表中的一个哈希子表中,包括:确定N个哈希子表生成的N个哈希子表的哈希桶地址中的空闲分片数目最多的哈希桶地址和空闲分片数目最多的哈希桶地址对应的第P个哈希子表;获取当前键值对应于第P个哈希子表的指纹值;将当前键值存储在哈希子表的原始键值表中;将当前键值对应于第P个哈希子表的指纹值和当前键值的索引信息存储在空闲分片数目最多的哈希桶地址对应的空闲分片上,其中,索引信息指示当前键值存储在原始键值表中的地址,P为1,2,…,N中的数。
[0010]结合第三种可能的实现方式,在第四种可能的实现方式中,获取当前键值对应于第P个哈希子表的指纹值;包括:根据第η个预处理哈希函数和至少两个哈希子表子空间之一对应的哈希函数生成当前键值的第η个指纹值;将第η个指纹值作为当前键值对应第P个哈希子表的指纹值,其中η不等于P。
[0011]结合第三种可能的实现方式,在第五种可能的实现方式中,获取当前键值对应于第P个哈希子表的指纹值;包括:确定第η个指纹值生成函数;根据第η个指纹值生成函数和至少两个哈希子表子空间之一对应的哈希函数生成当前键值的第η个指纹值;将第η个指纹值作为当前键值对应于第P个哈希子表的指纹值,其中η不等于ρ。
[0012]结合第一方面或第一和第二种可能的实现方式中的任一种可能的实现方式,在第六种可能的实现方式中,根据针对N个哈希子表生成的N个哈希子表的哈希桶地址对应的空闲分片数目将当前键值存储在N个哈希子表中的一个哈希子表中,包括:确定N个哈希子表生成的N个哈希子表的哈希桶地址中的空闲分片数目最多的哈希桶地址和空闲分片数目最多的哈希桶地址对应的第P个哈希子表;将当前键值存储在空闲分片数目最多的哈希桶地址对应的空闲分片上,P为1,2,…,N中的数。
[0013]结合第一方面或第一至第六种可能的实现方式中的任一种可能的实现方式,在第七种可能的实现方式中,N = 2,哈希子表为2-left哈希子表。
[0014]第二方面,提供了一种创建哈希表的设备,包括确定单元,用于根据哈希表的N个哈希子表中第η个哈希子表的空间确定至少两个哈希子表子空间,其中,第η个哈希子表的空间的大小为非2的正整数次幂,至少两个哈希子表子空间的大小为2的正整数次幂,其中,N为大于或等于2的整数,η = I, 2,…,N ;映射单元,用于根据第η个预处理哈希函数将当前键值映射到至少两个哈希子表子空间之一,第η个预处理哈希函数用于将多个键值映射到至少两个哈希子表子空间中;生成单元,用于根据至少两个哈希子表子空间之一对应的哈希函数和当前键值生成哈希子表的哈希桶地址;存储单元,用于根据针对N个哈希子表生成的N个哈希子表的哈希桶地址对应的空闲分片数目将当前键值存储在N个哈希子表中的一个哈希子表中。
[0015]结合第二方面,在第一种可能的实现方式中,至少两个哈希子表子空间包括M个哈希子表子空间,至少两个哈希子表子空间之一为第m个哈希子表子空间,其中,M为大于或等于2的整数,m为1,2,…,M中的数,生成单元根据第m个哈希子表子空间对应的哈希函数和当前键值生成当前键值对应于第m个哈希子表子空间的哈希桶地址,计算第I个哈希子表子空间至第m-Ι个哈希子表子空间的大小之和,并将当前键值对应于第m个哈希子表子空间的哈希桶地址与第I个哈希子表子空间至第m-Ι个哈希子表子空间的大小之和相加,得到哈希子表的哈希桶地址。
[0016]结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,第η个预处理哈希函数为CRC函数,映射单元根据第η个预处理哈希函数和当前键值得到预处理结果,将预处理结果对至少两个哈希子表子空间中的各空间的比例之和做取模运算,并根据取模运算的结果将当前键值映射到至少两个哈希子表子空间之一。
[0017]结合第二方面或第二方面的第一和第二种可能的实现方式中的任一种可能的实现方式,在第三种可能的实现方式中,存储单元确定N个哈希子表生成的N个哈希子表的哈希桶地址中的空闲分片数目最多的哈希桶地址和空闲分片数目最多的哈希桶地址对应的第P个哈希子表,获取当前键值对应于第P个哈希子表的指纹值,将当前键值存储在哈希子表的原始键值表中,并将当前键值对应于第P个哈希子表的指纹值和当前键值的索引信息存储在空闲分片数目最多的哈希桶地址对应的空闲分片上,其中,索引信息指示当前键值存储在原始键值表中的地址,P为1,2,…,N中的数。
[0018]结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,存储单元根据第η个预处理哈希函数和至少两个哈希子表子空间之一对应的哈希函数生成当前键值的第η个指纹值,并将第η个指纹值作为当前键值对应第ρ个哈希子表的指纹值,其中η不等于P。
[0019]结合第二方面的第三种可能的实现方式,在第五种可能的实现方式中,存储单元确定第η个指纹值生成函数,根据第η个指纹值生成函数和至少两个哈希子表子空间之一对应的哈希函数生成当前键值的第η个指纹值,并将第η个指纹值作为当前键值对应于第P个哈希子表的指纹值,其中η不等于P。
[0020]结合第二方面或第二方面的第一和第二种可能的实现方式中的任一种可能的实现方式,在第六种可能的实现方式中,存储单元确定N个哈希子表生成的N个哈希子表的哈希桶地址中的空闲分片数目最多的哈希桶地址和空闲分片数目最多的哈希桶地址对应的第P个哈希子表,并将当前键值存储在空闲分片数目最多的哈希桶地址对应的空闲分片上,P为1,2,…,N中的数。
[0021]结合第二方面或第二方面的第一至第六种可能的实现方式中的任一种可能的实现方式,在第七种可能的实现方式中,N = 2,哈希表为2-left哈希表。
[0022]基于上述技术方案,通过根据哈希表的N个非2的正整数次幂空间的哈希子表中的每个哈希子表的空间确定至少两个2的正整数次幂的哈希子表子空间,进而对当前键值做分析,根据针对该N个哈希子表生成的哈希子表的哈希桶地址对应的空闲分片数目将当前键值存储在N个哈希子表中的一个哈希子表中,能够生成非2的正整数次幂空间的哈希子表,使得该N个哈希子表构成的非2的正整数次幂空间的哈希表可以更好的匹配表项的需求,减少空间浪费,降低了实现的代价。
【附图说明】
[0023]为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0024]图1是为本发明一个实施例的创建哈希表的方法流程示意图。
[0025]图2是为本发明另一实施例的创建哈希表的方法流程示意图。
[0026]图3是为本发明实施例的哈希表的示意图。
[0027]图4是为本发明一个实施例的创建哈希表的设备示意性框图。
[0028]图5是为本发明另一实施例的创建哈希表的设备示意性框图。
【具体实施方式】
[0029]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1