【问题标题】:Data Structure for Representing Paths of a Tree Without Redundancy表示无冗余树的路径的数据结构
【发布时间】:2016-04-25 04:00:36
【问题描述】:

考虑一下 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}}

【问题讨论】:

    标签: data-structures clojure tree clojurescript


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的链接。不过这篇文章很笼统。您能否在 Clojure 中提供一个示例?也许突出了嵌套哈希映射方法的优势。文章称路径为“字符串”——这很有趣。它让我想起了正则表达式:上面可以表示为“(23[01]|40)”,但是我不确定这是否是一个实际的实现。
      • 很遗憾,我没有例子,我只是觉得这个解决方案值得一提。我想更简单的解决方案(如 OlegTheCat 提供的解决方案)对你来说就足够了。 DAWG 用于以非常紧凑的方式表示整个字符串字典(来自某些字母表的单词,在您的情况下,整数作为路径中的索引)。如果您想表示大量此类路径,DAWG 可能是一个不错的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多