下面的问题是如何调用的,哪些算法可以解决它?
设置:我有一组项目(即旗帜),每个项目由一些未排序的元素(即颜色)组成。
问题:如何找到元素的最小集合,使每个项在最小集合中至少有一个元素也就是说,给我最少的颜色数,这样每面旗帜至少有一种颜色与我的最小颜色集相同。
这与this问题类似或相同,尽管(对我来说)答案没有给出可行的算法。
例子
假设我们有三个旗子,让我们将颜色的色调视为相同的颜色:
保加利亚、巴林和牙买加
可能的解决方案是:
[白色或红色]和[黄色、黑色或绿色]:因为白色和红色都在保加利亚和巴林,黄色、黑色和绿色都在牙买加。
最佳答案
这是minimum hitting set问题,它是np完全的。它相当于Set cover problem(即两者可以相互converted)。
由于它是NP完全的,所以没有已知的多项式算法维基百科给出了一个近似的结果。对于一个精确的最小值,您可能需要使用指数时间解,例如枚举所有可能性。