给定长度为n的数组x和一组数组S使得S中的每个数组具有长度n,在S中找到数组G的最大尺寸集合,使得对于所有1< = i< = n ,x [i]> = G中所有g的总和(g [i])。
e.x。如果x = [3,3]且S = {[3,0],[1,1],[2,1]},则最佳集合为{[1,1],[2,1]},因为和为[3,2],每个索引处的元素小于x中的对应元素。 {[3,0],[1,1]}不起作用,因为总和是[4,1],并且4> x [0] = 3。
是否存在运算时间为n且| S |?
的多项式的算法背景/上下文: 这个问题来自一个关于拼字游戏的问题。给定一个瓷砖列表和一个单词,你能用瓷砖形成这个单词吗?我将它扩展为给定一个瓦片列表和一个单词列表,列表中可以从瓦片中形成的最大单词数是多少?
答案 0 :(得分:3)
这是multi-dimensional knapsack problem。
为证明在n
和|S|
中都没有算法,多项式时间(或证明这是Strongly NP-hard problem),请简化此问题,仅允许值{ {1}}表示数组1
,数值x
或0
表示数组1
。在这种简化之后,我们得到了Set packing的优化版本,这是一个经典的NP完全问题。
与集合打包问题的关系表明,也没有良好的近似算法。
这留下了非常有限的算法选择: