1

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

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

我更喜欢整数 id,因为我希望结构紧凑且足够小以通过 Internet 传输,因为一个单词列表可能包含成百上千的单词。

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

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,你有更好的解决方案吗?

4

1 回答 1

0

是的,似乎不可能找到一个完美的无冲突哈希算法,我最终可能会维护一个映射文件。我也在这里

找到了一个很好的问题和答案 。

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

最后,我决定使用 long 作为我的 id

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

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

于 2013-03-19T07:38:46.250 回答