我在Haskell中需要一个通用的Trie实现,但我找不到任何实现。
我已经实现了my own functions(这里只有密钥,我没有需要关于Trie的数据)但是我希望在Haskell中找到一个好的Trie实现以供将来使用(我是新手haskeller)
我找到了Data.Trie,但键是ByteString。
Data.Trie是正确的选择吗? (然后我不知道如何使用它)
谢谢!!! :d
答案 0 :(得分:7)
查看MemoTrie包on Hackage和on GitHub。 有关简单和背景的背景知识。美丽的基础理论,参见Haskell wiki page on memoization,包括Ralf Hinze的两篇论文,一篇由我和some blog posts。
另一个trie / memoization包是functor-combo,也是on Hackage和on GitHub。 该软件包包含Elegant memoization with higher-order types和其他博客文章中描述的创意实现。
其他一些相关套餐:
答案 1 :(得分:4)
按要求移动评论......
我所知道的唯一非常通用的trie实现是the list-tries
package。它总是让我觉得有点过度工作,但是一个人的“过于复杂”是另一个人的“全功能”,所以如果它适合你的目的就去做吧。此外,包装似乎得到积极维护,这很好。
哦,因为软件包没有明确说明我可以看到的任何地方:“Patricia trie”版本是一个trie,它将单分支节点的序列压缩成一个存储公共密钥前缀的节点。因此,对于键“aabb”和“aabc”,您将得到一个带有“aab”的节点,然后分支“b”和“c”。标准trie总是一次分支一个元素。
答案 2 :(得分:3)
http://hackage.haskell.org/package/TrieMap是我当天的一些工作。我不完全清楚你的意思是“泛型”,但是TrieMap
支持或多或少的任意(递归,偶数!)代数数据类型,例如:二叉树,作为特里键。