我使用尝试数据结构来存储单词。现在,我有一个要求,如果某段短语出现在同一段落中,则需要找到一个段落。
这样做最有效的方法是什么?短语总数不会超过100个。
答案 0 :(得分:2)
如果我是你,我会首先使用boost :: multi_index_container将一些东西放在一起,因为如果你以后得到更多的要求,那么进一步扩展它将非常容易。如果稍后您测量并发现它没有充分执行,那么您可以用优化的数据结构替换它。
答案 1 :(得分:1)
指定的特里在许多方面都不是最理想的。
ALPHABET_SIZE
会增加侮辱伤害;不仅50个字节的短语需要50个节点,而且每个节点的大小可能超过100个字节......每个项目或"短语"使用该代码,长度为50个字节可能需要高达约5KB的存储空间!这甚至不是最糟糕的。malloc
,使得优化非常困难。每个节点都有自己的分配,使insert
非常malloc
- 很重。分配细节应与数据结构处理分开,如果不是为了优化的目的,那么为了简化使用。大量使用此代码的程序可能会遇到与内存碎片和/或缓存未命中相关的性能问题,除了用trie代替其他东西外,没有任何简单或重要的优化。<sarcasm>
这是最优的,对吗?</sarcasm>
我编写了一个PATRICIA trie实现,每个项目只使用一个节点,字母大小为2(它使用每个字符的位,而不是每个字符),并允许您使用您希望的任何分配。唉,我还没有花很多精力去重构它的界面,但它应该非常接近最优。您可以找到该实现here。您可以在patricia_test.c测试用例文件中查看插入(使用patricia_add
),检索(使用patricia_get
)和删除(使用patricia_remove
)的示例。