【发布时间】:2013-04-23 19:20:10
【问题描述】:
我有一棵由数千个节点组成的树,由布尔属性修饰,如下所示(括号中的属性):
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)需要三个。 - 子节点的数量将大大超过内部节点(至少25比1)
- 树的初始状态会有很多冗余。
- 我正在使用 Java,添加一个外部库来解决这个问题没什么大不了的。
这些限制并不灵活,因为我正在处理与大型企业系统的集成层,所以我所能做的就是尽量减少我们必须存储和传输的属性值的数量。
我认为约束 #3 让我陷入了一个循环,因为没有它我可以单独处理每个属性,这很简单(在我意识到更多属性即将到来之前,我已经实现了一个解决方案)。
我希望这足以描述一般问题。如果需要,我可以提供更多示例或信息。谢谢!
【问题讨论】:
-
问题是什么?
-
你不需要绝对最小的数,对吗?
-
@MelNicholson:问题是哪种算法会产生最少的装饰。我希望它可以简化为一个我没见过的众所周知的问题,或者这实际上很容易而且我只是很密集:)
-
@JohnTangBoyland:不,这绝对是需要而不是需要。我有一个解决方案,可能已经让我走到了一半(分别解决每个属性),但我注意到我可能会利用约束 #3 扔掉更多的装饰。