有10万个不相同的字符串,平均串长是7,只有字母和数字。想把他们hash成整数作为数组下标。要保证单射,不能重复。请问用什么方法比较好?
当然,希望映射的像集越小越好,节省空间。
当然,希望映射的像集越小越好,节省空间。
1
binux Nov 14, 2014
加一个冲突检测机制
不然告诉我最大串长 |
2
tts OP 加冲突检测怎么做?我不知道怎么映射到比如1到20万整数上。
最大串长比如20呢?这是用来做什么的? |
3
binux Nov 14, 2014
@tts http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8#.E5.A4.84.E7.90.86.E7.A2.B0.E6.92.9E
最大长度决定了你能不能找到单射函数,而不是平均长度 |
4
hourui Nov 14, 2014
就 10w 级别, 为啥非要用 hash 呢?
用 trie 树存就好了 |
5
cover Nov 14, 2014
是啊,单键映射是不可能的把,如果用数值hash的话。。否则要开多大的内存啊
|
6
cover Nov 14, 2014
hash算法 就用 php的hash算好好了 反正就是普通的字符串么http://www.laruence.com/2009/07/23/994.html
|