搜索树木集合的高效算法


9

我有大量的树木数据集,我想通过指定一个treelet(连接的子图)进行搜索。查询应返回数据集中所有小树的出现。

有有效的算法可以做到吗?

我想到的是后缀数组,但是,天真地将树编码为字符串(按其节点的固定遍历顺序)将不起作用,因为搜索小树可以是任意形状。

更新:

有关我期望的典型实例的一些详细信息:

数据集将至少包含数万棵树,每棵树包含约20至30个节点。树不会不是二叉树,但是每个节点的典型子节点数会很小(通常不大于4或5,尽管在某些退化的情况下可以达到约30)。标签的数量将是数万个。

对于NLP应用程序,我需要这样做:每棵树将成为句子的依存关系分析,每个节点代表一个单词出现,每个标签为一个字典单词(带有某种修饰)。


1
本书主要讨论子树同构的并行算法。
Anthony Labarre 2011年

1
抱歉,我想您正在寻找一个连接的子图,该子图一定是一棵树,出现在给定的树中。您能否说明您的问题在哪些方面与本说明有所不同?
Anthony Labarre 2011年

1
您事先对树木了解吗?二进制?您期望多少个不同的节点标签?对空间效率有任何限制吗?我问是因为如果您在同一个数据集上运行大量查询,则解决方案可能涉及某种类型的主动索引。
伊莱(Eli)

1
您熟悉XML树枝匹配吗?您的问题似乎是特例,因此您可以简单地使用任何现有算法和软件。
Marek Chrobak

2
我猜想最好是忽略图形结构。给定一个典型的查询,如果您放弃结构,那么您期望拥有所有这些词的树数是多少?您的查询中是否有通配符,或者它们是正确的?如果查询中的单词类似于“猫吃了帽子”,那么实际上有多少图同时包含“猫”和“帽子”两个词?如果仅将每个单词索引到一组树上,然后与所有树相交,则可能会天真地搜索结果而不会产生太多费用。
伊莱

Answers:



1

前一段时间,我写了罗纳德·雷德(Ronald Read)的树规范化算法,并将其放在Wikipedia上

我将为每个内部节点签名创建一个哈希表,并使用指向它们所来自的子树的指针列表来标记它们。但是,它仅适用于具有真实叶子的小树。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.