如果某些数组索引无法配对,我如何找到唯一正整数数组的最大总和?
例如,我们有这个数组:[8,2,1,3,9,4]
索引(0,4)和(4,5)处的元素彼此不相似。
在这种情况下,最大总和将是:8 + 2 + 1 + 3 + 4 = 18
假设这是100个条目的规模和最多一半的约束,你将如何处理这个问题?
是否有像图表这样有用的数据结构或某些DP?我主要担心的是有效的运行时间。
答案 0 :(得分:3)
您要解决的是maximum-weight independent set问题。这是图论中的一个问题。
数组索引对应于图形的顶点。每个顶点的权重是相应索引处的数组值。在您的示例中,顶点0的权重为8,顶点4的权重为9。
彼此不相似的数组索引对应于图的边缘。例如,顶点0和4之间存在边缘。
您正在寻找一组数组索引,其中没有两个索引彼此不喜欢。就图形而言,您需要一组顶点,其中没有两个顶点通过边连接。这样一组顶点称为独立集。
在所有独立集合中,您需要具有最大顶点权重总和的集合。这是最大权重独立集问题。
此问题的强力方法尝试n个顶点的所有2个 n 子集来确定最大权重。不幸的是,这个问题是NP-hard。人们认为NP-难问题不能在多项式时间内得到解决。换句话说,你不能比蛮力方法做得更好。