设置封面优化问题是:给定一个Universe U
和S
的子集U
(即S \ subsetof 2 ^ U),找到最小子集{{ 1 {} C
,使其元素的联合为S
。已知是NP难的。
我感兴趣的变体是,给定相同的内容(U
和U
),找到S
的最小子集C
,使{{1} }是一个封面,对于S
中的某些(未指定的)元素C
,u
中包含U
的所有集合都在S
。
我正在应用的问题是:给定一组我看到的症状(u
),我有可能导致这些问题的原因(C
- {{1}的每个元素对应于潜在多种症状的“原因”)。我想知道可以导致我看到的所有症状的原因最少,而且我还希望删除所有这些“原因”的结果也会导致至少一个症状得到解决。
有没有人对这是否比原始问题更容易有任何好的想法?
编辑包含解决方案(纳入评论)
至少和封面一样难。
U
可以通过S
解决,S
是SetCover(U,S)
以外的元素,SetCoverNew(U + {w}, S + {{w}})
表示集合联盟。
给定SetCoverNew实例的任何解决方案都必须包含集w
(否则它不是U
的集合封面。)
声称+
的解决方案是{w}
。首先,U + {w}
必须是SetCover(U,S)
的封面,否则X = SetCoverNew(...) \ {{w}}
不能成为X
的封面。其次,U
必须是X + {{w}}
的最小封面,否则U + {w}
是基数低于X
的封面。
答案 0 :(得分:3)
这也是NP-Hard,因为我们可以使用这个来解决原始的封面问题
假设我们提供了一种解决这个新问题的算法(称为SetCoverNew
)。
这是一个解决SetCover的算法。
SetCover(U, S)
1. build new universe U1 = {U + w} (w is not in `U`, and `+` means `union`).
2. build the new set S1 = S + {w}.
3. result = SetCoverNew(U1, S1, w)
4. return result - {w}.
修改强>
抱歉,我没有看到unspecified u
让我考虑一下:)
答案 1 :(得分:0)
前段时间,我根据节点的各种报告,研究了解决电信网络出现问题的问题。要求是分配一些可能导致大量警报(警报风暴)的根本原因。有许多(非常昂贵的)产品,采取了各种各样的方法。
我认为这个问题在理论上是难以处理的,唯一切实可行的方法就是安排收集数据,以便找出问题从哪里开始变得微不足道的问题(例如,确保每个节点报告它是如何思考的它正在做什么,是否它通过它所依赖的节点正在做他们的工作)。鉴于此,我认为您应该能够将大多数警报分配给根本原因,只需减去您希望由仪器告诉您显然存在的根本原因产生的警报。
我不知道您的问题域是什么,但我建议您花一些时间来查看收集正确的数据是否会使诊断更容易。