V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tts
V2EX  ›  程序员

请教 Hash 选取问题

  •  
  •   tts · Nov 14, 2014 · 2930 views
    This topic created in 4183 days ago, the information mentioned may be changed or developed.
    有10万个不相同的字符串,平均串长是7,只有字母和数字。想把他们hash成整数作为数组下标。要保证单射,不能重复。请问用什么方法比较好?
    当然,希望映射的像集越小越好,节省空间。
    7 replies    2014-11-15 21:31:49 +08:00
    binux
        1
    binux  
       Nov 14, 2014
    加一个冲突检测机制
    不然告诉我最大串长
    tts
        2
    tts  
    OP
       Nov 14, 2014 via iPhone
    加冲突检测怎么做?我不知道怎么映射到比如1到20万整数上。
    最大串长比如20呢?这是用来做什么的?
    binux
        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
    最大长度决定了你能不能找到单射函数,而不是平均长度
    hourui
        4
    hourui  
       Nov 14, 2014
    就 10w 级别, 为啥非要用 hash 呢?
    用 trie 树存就好了
    cover
        5
    cover  
       Nov 14, 2014
    是啊,单键映射是不可能的把,如果用数值hash的话。。否则要开多大的内存啊
    cover
        6
    cover  
       Nov 14, 2014
    hash算法 就用 php的hash算好好了 反正就是普通的字符串么http://www.laruence.com/2009/07/23/994.html
    tts
        7
    tts  
    OP
       Nov 15, 2014
    @hourui 有道理。 :)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2585 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:07 · PVG 00:07 · LAX 09:07 · JFK 12:07
    ♥ Do have faith in what you're doing.