请教 Hash 选取问题

2014-11-14 17:25:17 +08:00
 tts
有10万个不相同的字符串,平均串长是7,只有字母和数字。想把他们hash成整数作为数组下标。要保证单射,不能重复。请问用什么方法比较好?
当然,希望映射的像集越小越好,节省空间。
2562 次点击
所在节点    程序员
7 条回复
binux
2014-11-14 17:41:00 +08:00
加一个冲突检测机制
不然告诉我最大串长
tts
2014-11-14 18:24:04 +08:00
加冲突检测怎么做?我不知道怎么映射到比如1到20万整数上。
最大串长比如20呢?这是用来做什么的?
binux
2014-11-14 18:39:21 +08:00
@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
最大长度决定了你能不能找到单射函数,而不是平均长度
hourui
2014-11-14 18:39:56 +08:00
就 10w 级别, 为啥非要用 hash 呢?
用 trie 树存就好了
cover
2014-11-14 18:44:47 +08:00
是啊,单键映射是不可能的把,如果用数值hash的话。。否则要开多大的内存啊
cover
2014-11-14 18:46:29 +08:00
hash算法 就用 php的hash算好好了 反正就是普通的字符串么http://www.laruence.com/2009/07/23/994.html
tts
2014-11-15 21:31:49 +08:00
@hourui 有道理。 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/146554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX