用于表示没有冗余的树的路径的数据结构

时间:2016-04-24 19:25:08

标签: data-structures clojure tree clojurescript

在Clojure代码中考虑以下树结构:

(def tree [7 9 [7 5 3 [4 6 9] 9 3] 1 [2 7 9 9]])

例如,树中所有偶数的路径都是:

[[2 3 0] [2 3 1] [4 0]]

这是一份清单。每个“内部”列表代表从树的根到感兴趣的叶子的绝对路径。

我现在正在寻找一种数据结构来表示没有冗余的结果。如您所见,例如[2 3]的片段在两个条目中重复。我想出了一个嵌套的哈希映射,但也许有一些更简单的东西:

{2 {3 {0 true 1 true}
 4 {0 true}}

2 个答案:

答案 0 :(得分:3)

我相信DAWG对你的问题有点过分。您的路径的后缀几乎不会被共享。因此trie的使用应该足够了(这实际上是您的嵌套哈希映射方法)。它也是pretty easy to generate it in clojure

答案 1 :(得分:1)

我认为您可以使用"deterministic acyclic finite state automaton (DAFSA) also called a directed acyclic word graph (DAWG)"

在您的数据中,所有路径都包含一组字符串(或单词)。叶子的每条路径都代表一条偶数路径。