【发布时间】:2013-04-18 13:48:47
【问题描述】:
我需要在 Haskell 中实现通用的 Trie,但我找不到。
我实现了my own functions(这里只有键,我不需要关于 Trie 的数据)但我想在 Haskell 中找到一个好的 Trie 实现以备将来使用(我是新手 Haskeller)。
我找到了 Data.Trie,但键是 ByteString。
Data.Trie 是正确的选项吗? (然后就不知道怎么用了)
谢谢!!! :D
【问题讨论】:
-
没有办法编写适用于任意键类型的 trie。你想用什么键?请注意,
Data.IntMap和Data.IntSet是使用Int键尝试的。 -
C.A. McCann,一个 Trie 只需要一个支持 Equality 运算符的类型来处理有序的源数据。有了它,你可以构建一个 Trie。如果你不知道底层类型有什么关系?我的实现不是 Trie 吗?谢谢! (但假设键类型是 [a])
-
是的,你需要的键要么是某种序列,要么是你可以变成序列的东西。例如,
Data.IntMap将Int视为位序列。能够直接对每个块进行排序或索引很好,但是可以比较是否相等的事物列表就足够了。无论如何,有a packagelist-triesout there,但它总是让我感到有点困惑。 -
@C.A.McCann 定义对近乎任意键类型的尝试本身没有任何问题。例如看这篇论文:citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.1.6342AFAIK,Conal 的
MemoTrie包中使用了这个想法,但用于记忆的特定目的。 -
@kosmikus:当然,但要强调“附近”。您不需要太多,但不会发生完全多态且没有类约束的 trie。