0

我正在尝试将长字符串的各个部分存储在一个有效的树状结构中,我已经搜索过,但大多数实现都是用于在单词中搜索......让我试着用一个例子来解释我的意思,如果我有:

/potato/carrot/tomato
/potato/carrot/pea
/potato/lettuce

我最初的想法是这应该看起来像这样

potato
 - carrot
   -tomato
   -pea
 - lettuce

据我搜索,真正有效的搜索树(例如 DAWG 和 Tries)用于将单词存储为字符,我不知道应该如何使用它。有任何想法吗?

提前非常感谢!

编辑:就持久性而言,我不需要存储树,所以我想只要程序运行就将它保存在内存中。

Edit2:就儿童的存储而言,我最终使用了HybridDictionaries,它比字典更有效,现在一切都运行得非常快,非常感谢大家!

4

2 回答 2

1

为了将其保存在内存中,您可以使用我最近遇到的这种模式:

class Vegetable : Dictionary<string, List<Vegetable>>

根据您想用它做什么(搜索、计数、排序),您可以在该类中实现辅助方法。

于 2014-03-24T09:08:58.447 回答
0

我认为 DAWG 是一个很好的方法......看看这个项目,虽然它可以在 C# 中进行一些优化,虽然它已经有几年历史了,但算法在那个时候没有改变。

道格夏普

它包含诸如 MakeDawg、FindNodeDepth 等方法

“该程序采用纯文本文件,仅包含 26 个小写英文字符的行。它生成一个前缀和后缀组合的树,比存储相同信息的许多数据结构更有效。这个生成器代码非常慢,但它确实有效。它可能需要几分钟。它需要优化,算法确实需要改进,但我没有投入太多精力,因为它在我的程序中不经常运行。

这是教程格式的另一种有趣的方法。

这是另一个有趣的故障

于 2014-03-24T09:21:28.100 回答