英语短语的哈希算法

时间:2013-03-18 08:23:38

标签: algorithm hash

我正在研究英语单词应用程序,我希望每个单词都有不同的int id,因为所有单词都彼此不同,我认为它们可以很容易地分配一个整数(或长?)。

我不想按照字母顺序连续给他们ID。我认为可能有一个现有的算法来满足这个要求,我不想发明自己的轮子,所以,请帮助我。

我更喜欢整数id,因为我希望结构紧凑,小到足以通过互联网传输,因为一个单词列表可能包含数百和数千个单词。

想象一下,我的数据结构如下:

struct word {
  int wordId;
  byte familiarity;
}
// I prefer the mapping like this
apple -> 0x1,  0x4
app   -> 0x2E, 0x2
ape   -> 0xEA, 0x1

更新

好吧,我正在尝试做的是为用户提供几个单词列表,每个单词列表包含几个单词,用户可能已经学习了一些单词(例如苹果),所以他/她想跳过那些言语,并希望他们永远不会再出现。因此,我想让用户跳过这些单词,并将所选单词发送到服务器或保存在本地文件中,可能没有必要发送整个单词或短语。 我在这里找到了一个问题:http://stackoverflow.com/questions/7700400/whats-a-good-hash-function-for-english-words,你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

是的,似乎找不到完美的无碰撞散列算法,我最终可能会维护一个映射文件。

我也找到了一个很好的问题和答案 here

实际上我不介意这个算法的性能,因为它全部在服务器上完成,并且在启动时只执行一次。我想要的只是每个单词/短语的id都是唯一的,尽可能短,就像指纹一样。我想知道我是否可以利用素数...

最后,我决定使用一个长期的我的身份

(8位)第一个单词的第一个字母 (8位)最后一个字的最后一个字
(4位)字数
(4位)短语
中最长单词的序列号 (8位)字符数,包含空格
(32位)MurmurHash3结果

你可以在这里找到murmurHash3 cs的实现:
https://gist.github.com/automatonic/3725443
我认为这种方法会为任何现有的单词和短语生成唯一的ID,而不会发生冲突。