我需要存储'/'在c#的树状结构中分隔字符串,我该怎么做呢?
本文关键字:分隔 结构 字符串 我该怎么做 存储 | 更新日期: 2023-09-27 17:52:16
我试图将长字符串的部分存储在一个有效的树状结构中,我已经搜索了,但大多数实现都是在单词内搜索…让我用一个例子来解释我的意思,如果我有:
/potato/carrot/tomato
/potato/carrot/pea
/potato/lettuce
我最初的想法是它应该看起来像这样
potato
- carrot
-tomato
-pea
- lettuce
,就我所搜索的而言,真正有效的搜索树(如DAWG和Tries)是用于将单词存储为字符,我不确定我应该如何使用它。什么好主意吗?
提前感谢!
编辑:就持久性而言,我不需要存储树,所以我认为只要程序运行,就把它保存在内存中。
Edit2:就孩子的存储而言,我最终使用了HybridDictionaries,它比字典更有效,现在一切都工作得很快,谢谢很多家伙!
为了将它保存在内存中,您可以使用我最近遇到的这种模式:
class Vegetable : Dictionary<string, List<Vegetable>>
根据你想用它做什么(搜索,计数,排序),你可以在类中实现辅助方法
我认为DAWG是一个很好的方法…看看这个项目,虽然它可以做一些优化,它是在c#中,虽然它已经有几年的历史了,但算法并没有改变。
DawgSharp
包含MakeDawg, FindNodeDepth等方法
"该程序接受一个纯文本文件,仅由26行小写英文字符组成。它生成一个前缀和后缀组合的树,它比存储相同信息的许多数据结构更有效。这个生成器代码非常慢,但它确实可以工作。这可能需要几分钟。它需要优化,算法确实需要改进,但我并没有在这方面投入太多精力,因为它在我的程序中并不经常运行。"
这是另一个有趣的教程格式的方法。
这里还有一个有趣的分解