首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hash表应用求教,该如何处理

2012-02-29 
hash表应用求教假设有1000万个数据,被按网格分成1000块,特别注意其中每个网格中的数据不均匀。对于每个数据

hash表应用求教
假设有1000万个数据,被按网格分成1000块,特别注意其中每个网格中的数据不均匀。
对于每个数据可通过(x, y)其中x为网格index, y为网格内的数据index唯一找到。
请问
1.如何选取一个输入为(x,y)合理hash函数来创建hash表
2.如何解决冲突,不希望通过链表来解决冲突,因为重复new,delete会增加大量内存碎片。

[解决办法]
1.如何选取一个输入为(x,y)合理hash函数来创建hash表
就是做一个函数把xy作为参数,返回的至尽量均匀分布,但这个函数不好确定
[解决办法]

探讨
假设有1000万个数据,被按网格分成1000块,特别注意其中每个网格中的数据不均匀。
对于每个数据可通过(x, y)其中x为网格index, y为网格内的数据index唯一找到。
请问
1.如何选取一个输入为(x,y)合理hash函数来创建hash表
2.如何解决冲突,不希望通过链表来解决冲突,因为重复new,delete会增加大量内存碎片。

[解决办法]

C/C++ code
x << 32 | y;// x,y均是ulong类型
[解决办法]
x为网格index, 10个二进制位可以解决;
y为网格内的数据index,极端情况下为1000万-1,所以24个二进制位可以解决,因此要想避免冲突:
C/C++ code
int Mask[2^34];//hash表结构//该数组索引为y << 10 + x,该索引需要占用34个二进制位 

热点排行