给定索引约束的最大和子数组

Maximum-sum subarray given constraints on indices

如果某些数组索引无法配对,我如何找到唯一正整数数组的最大总和?

例如,我们有这个数组:[8, 2, 1, 3, 9, 4]

索引 (0, 4) 和 (4, 5) 处的元素彼此不同。

在这种情况下,最大总和为:8+2+1+3+4= 18

假设这是 100 个条目的规模和最多一半的约束,您将如何解决这个问题?

有没有像图这样有用的数据结构或者DP?我主要关心的是高效的运行时间。

您要解决的是maximum-weight independent set问题。这是一道图论中的题。

数组索引对应于图形的顶点。每个顶点的权重是相应索引处的数组值。在您的示例中,顶点 0 的权重为 8,顶点 4 的权重为 9。

互不相同的数组索引对对应于图形的边。例如顶点0和4之间有一条边

您正在寻找一组数组索引,其中没有两个索引彼此不一致。就图形而言,您需要一组顶点,其中没有两个顶点通过边连接。这样的一组顶点称为独立集。

在所有独立集合中,您想要顶点权重之和最大的那一个。即最大权独立集问题

这个问题的蛮力方法会尝试 n 个顶点的所有 2n 个子集来确定最大权重。不幸的是,这个问题是NP-hard。人们认为 NP-hard 问题不能在多项式时间内解决。换句话说,没有比蛮力方法更好的方法了。