我想生成枚举字段的最短(或最短)组合,这将导致特定的枚举值。什么是实现这一目标的最佳算法?
例如,假设我有枚举:
enum MyEnum
{
One = 1,
Two = 2,
Three = One | Two,
Four = 4,
Six = Two | Four,
Eight = 8,
All = One | Two | Four | Eight
}
现在举例来说,值7
我想让我的函数输出"One | Six"
或"Three | Six"
。
编辑:当然Three | Four
也是有效的输出。
答案 0 :(得分:4)
你基本上要求的是最小集合覆盖,一个已知的NP完整问题。幸运的是,这并不意味着您无法解决此类小案例。您还可以通过贪婪算法获得O(logn)
近似值。
如果你的枚举值没有特定的结构,那么对于一般的精确解决方案,你不可能比蛮力做得更好。如果您知道您的枚举具有特定的结构,那么通常可以通过图形分区或CSP +回溯等方式获得更好的效果。