Java 属性约简树
我有一个由数千个节点组成的树,由布尔属性装饰,类似这样(括号中的属性): 我想做的是找到保留属性值所需的最小数量的装饰,给定以下约束/信息:Java 属性约简树,java,recursion,tree,min,Java,Recursion,Tree,Min,我有一个由数千个节点组成的树,由布尔属性装饰,类似这样(括号中的属性): 我想做的是找到保留属性值所需的最小数量的装饰,给定以下约束/信息: 属性由子节点继承 只有叶节点的结果属性才重要(包括继承属性)。所以,如果在内部节点上设置一个“默认”属性可以让我在它的子节点上放置一组属性,那没关系 我们的模型中有一个速记,可以将所有属性设置为true或false。例如,(x=false,y=false,z=false)可以由一个装饰器表示,而(x=false,y=false,z=true)需要三个装饰器
(x=false,y=false,z=false)
可以由一个装饰器表示,而(x=false,y=false,z=true)
需要三个装饰器让我知道它是怎么回事。问题是什么?你不需要绝对最小的数字,是吗?@MelNicholson:问题是什么算法会产生最小数量的装饰。我的希望是,它可以简化为一个我从未见过的众所周知的问题,或者说这其实很容易,我只是很笨:)@JohnTangBoyland:不,这绝对是一个需要,而不是需要。我已经有了一个解决方案,可能已经解决了一半(分别解决每个属性),但我注意到,我可能会利用约束条件3扔掉更多的装饰。问题是什么?你不需要绝对最小的数字,是吗?@MelNicholson:问题是什么算法能使装饰的数量最少。我的希望是,它可以简化为一个我从未见过的众所周知的问题,或者说这其实很容易,我只是很笨:)@JohnTangBoyland:不,这绝对是一个需要,而不是需要。我已经有了一个解决方案,可能已经完成了一半(分别解决每个属性),但我注意到,通过利用约束,我可能会扔掉更多的装饰#3。嗯,我喜欢大多数人的想法。这不一定是最优的,但它会很快,这是一个额外的好处。下次有机会我会试试的,谢谢。上面的每一步都应该有一个警告,如果您要设置的值与您要继承的值匹配,请改为继承。这可以在构建树时暂时保存所有属性,然后丢弃任何与父级匹配的属性。@Melnocholson,冒着进入“聊天”的风险,我认为您建议的警告不适用,因为我描述的启发式是自下而上的。“删除现在多余的任务”步骤具有您所期望的效果。我们最终采用了与此类似的方法,感谢您的帮助。嗯,我喜欢大多数人的想法。这不一定是最优的,但它会很快,这是一个额外的好处。下次有机会我会试试的,谢谢。上面的每一步都应该有一个警告,如果您要设置的值与您要继承的值匹配,请改为继承。这可以在构建树时暂时保存所有属性,然后丢弃任何与父级匹配的属性。@Melnocholson,冒着进入“聊天”的风险,我认为您建议的警告不适用,因为我描述的启发式是自下而上的。“删除现在多余的任务”步骤具有您想要的效果。我们最终采用了与此类似的方法,感谢您的帮助。
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.