我有一个包含 100 万个英语单词的 txt 文件,其频率采用以下格式:
好 345667
坏 456777
...
我需要使用 Java 中的 HashMap 或 Trie 数据结构来存储它。稍后我需要从列表中查找单词而不进行其他操作。我的理解是,HashMap的查找比Trie慢,但是Trie会占用更多的内存,而且Trie的实现也很费力,而HashMap已经可以使用了。对于生产代码,您对哪种数据结构最适合这种情况有什么意见或建议吗?提前致谢。
此外,HashMap 允许“恒定时间”进行查找。它真的比英语单词的 Trie 慢吗?
我的理解是,HashMap的查找比Trie慢,但是Trie会占用更多内存
这是不正确的。假设有一个好的哈希函数,则 HashMap 中的查找将需要对主内存进行少量、恒定的随机访问,而不管表的大小或其键的长度。相比之下,特里结构需要访问主存储器来存储密钥中的每个字母。因此,trie 将导致更多的缓存未命中 - 并且缓存未命中将主导现代硬件上的整体查找成本。
如果键很长并且共享许多公共前缀,则 trie 可以节省内存。
trie 还支持前缀查询。
在您的情况下,键很短,并且您不需要前缀查询,因此您不会从 trie 中受益。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)