我正在开发一个树库,其中所需功能的一部分是能够搜索符合模式的子节点。'模式'是指规定了子树中节点的结构和属性的规范(或条件)。例如,假设一棵树表示有关一种鸟类的数据。进一步假设这样的树的节点具有以下属性:位置、性别、翼展、体重、育雏量。给定一个父节点,我想用简单明了的语言发出搜索请求:“找到所有生活在XXX城市且体重大于100克的雄性鸟类的后代。任何找到的这样的鸟类都应该至少有2个兄弟和一个姐妹,并且本身必须至少有一个孩子”。
为了澄清,我并不希望像上面那样使用普通英语查询。我只是用“普通英语查询”来说明我想在树上执行的匹配类型。实际上,我完全打算使用符号进行匹配(而不是纯文本)。
< /note >
我在考虑可能使用类似正则表达式的模式匹配来匹配树。一种方法是拥有每个节点的字符串表示,这样我就可以使用普通的正则表达式。但是这可能会非常低效,因为会有很多重复的数据 - 即子节点的字符串表示将是父节点表示的超集,而父节点的表示将是其父节点的表示形式的超集,依此类推,递归地向上遍历树 - 这很容易变得难以处理,即使对于规模适中的树也是如此 - 必须有更好的方法。
有人知道一种算法,可以让我基于模式选择节点(子树)吗?
尽管我要求一个通用算法,但我正在Python中实现它。如果有任何进一步说明这样的算法的代码片段(如果确实可以编写),那将非常有用。