[英]How to get shortest representation of an enum flags value?
我想生成枚举字段的最短(或最短的)可能组合,这将导致特定的枚举值。 实现这一目标的最佳算法是什么?
例如,假设我有枚举:
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
Three | Four
也是一个有效的输出。
您基本上要求的是最小集合覆盖,已知为NP Complete的问题。 幸运的是,这并不意味着您无法解决此类小案例。 您还可以通过贪婪算法获得O(logn)
近似值。
如果你的枚举值没有特定的结构,那么对于一般的精确解,你将无法比蛮力做得更好。 如果您知道您的枚举具有特定结构,那么通常可以通过图形分区或CSP +回溯等方式获得更好的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.