我有一个包含数千个节点的树,由布尔属性修饰,类似这样(括号中的属性):
Root (x=true, y=true, z=false)
Interior 1
Leaf 1 (x=false, z=false)
Leaf 2 (x=false, y=false, z=false)
Interior 2
Leaf 3
etc.
我想要做的是找到保留属性值所需的最少数量的装饰,给定以下约束/信息:
(x=false,y=false,z=false)
可以由一个装饰器表示,而(x=false,y=false,z=true)
则需要三个。由于我正在使用大型企业系统进行集成层,因此这些约束并不灵活,因此我所能做的就是尽量减少我们必须存储和传输的属性值的数量。
我认为约束#3会让我失去一个循环,因为没有它我就可以单独处理每个属性,这很简单(我已经实现了一个解决方案,然后才意识到更多属性的来临)。
我希望这足以描述一般问题。如果需要,我可以提供更多示例或信息。谢谢!
答案 0 :(得分:1)
我认为(3.)可以被忽略,因为我们只对叶子感兴趣。 以下是我的建议:
对于所有布尔单向的单叶,使用快捷方式(3。)。
然后,对于每个内部节点,将属性分配给下面的叶子的多数值,而不是由1处理,并删除现在冗余的分配。
对于更高的内部节点,请执行相同操作,查看直接子节点,直到根节点。
这是一种启发式方法,我没有尝试过,但如果我是你,那将是我的第一枪。 让我知道它是怎么回事。