繁体   English   中英

如何获得枚举标志值的最短表示?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM