【问题标题】:Selecting an integer from each of the given n sets of integers such that the sum of their pairwise distances is minimized从给定的 n 组整数中的每一个中选择一个整数,使得它们的成对距离之和最小化
【发布时间】:2013-07-13 07:29:23
【问题描述】:

我不知道这是一个众所周知的问题还是可以简化为一个问题,但这是我最近几天以来一直在努力解决的问题。

令 X_1, X_2, X_3 .. X_n 为整数集。

在每个集合 X_i 中,我们有 m 个(等于所有集合)元素 x_i,j : j = 1...m。

我的目标是从每个集合中选择一个单个元素,这样所有选定元素之间的成对差异之和是最小的。

我从一个稍微不同的问题开始,即最小化序列差之和(即从连续集合中选择的元素之间的差之和)。DP 中的前向计算如下:

令 F(i, j) 为从集合 i 中选择元素 j 的成本。

F(i, j) = min_k F(i - 1, k) + |x(i-1,k) - x(i, j)|

也就是说,我们在前一个集合中选择第 k 个元素,然后评估在当前集合中选择第 j 个元素的成本。当前步骤的成本等于集合 i-1 中的第 k 个元素与集合 i 中的第 j 个元素之间的绝对差。

但是,我真正的问题不取决于集合 X_1,... X_n 的顺序。从本质上讲,动态规划给了我一些东西,但正如我所说,这是一个相关但不同的问题,即从每个集合中找到元素的“链”,以使“串行”差异的总和最小化。

从基本分析中,我发现这个问题的一个简单的解决方案是生成 n 个集合的所有排列,然后对每个排列使用动态规划来解决它。这是棘手的,但当 n 足够小时 - 我们甚至可以采用这种愚蠢的穷举方法。

我无法弄清楚这个问题是否可以使用多项式算法来解决,或者是否可以将其简化为已知的 NP-hard/complete 问题之一,在这种情况下,我将使用近似算法通过将其建模为二次程序。

请给我建议或指出一些阅读材料。

谢谢。

[编辑 1]

为了方便讨论,这里添加一个例子:

X = [[11, 24, 38], [12, 21, 33], [13, 22], [15, 23]]

解决方案是 24、21、22、23(可能不相关,但我的 DP 给了我 11、12、13、15,我构建了这个示例,特别是为了让我的 DP 失败。

[编辑 2]

我猜这不是一个 NP 完全问题。我们可以从DP扩展的解决方案如下[不确定是否正确,但似乎是这样]:

解决方案至少包含每个集合中的一个元素。

所以,让我们选择任何一组(最好是最小的,如果大小不同),然后将其从列表中删除。

我们称它为 X\Xp,其中 Xp 是移除的集合。

现在对于 \Xp 中的每个元素 x,构造一个新集合 X' = X\Xp U {x}。

我们求解 DP m 次并计算目标函数(成对距离之和),然后我们可以从中选出最好的。

DP 本身需要 O(nm^2) 并且我们运行这个 m 次,所以我们有 O(nm^3)。

【问题讨论】:

  • 好问题。 (+1)闻起来 NP-Hardish,但我现在想不出减少的味道。希望有人能提出一个(或多项式解决方案)
  • 谢谢;不幸的是,它看起来像是一个 np-complete!幸运的是,SO 可以让您知道这一点!
  • 我认为这不是 NP-Hard,最多可以在 O(nnm) 时间内解决:只需从每个集合中取出一个最小元素并插入一些容器,然后获取该容器的中值,并不断将某个集合的元素替换为下一个集合,使其与中值的距离与其他集合相比减少最多(或增加最少);在每次迭代之后,将得到的距离总和与迄今为止的最佳结果进行比较,并在必要时对其进行更新。我没有最优性的证据。另外我怀疑如果数据结构合适,这可能会改进到 O(n*log(n)*m)。
  • @EvgenyKluev 将此应用于我的示例,我选择 [11, 12, 13, 15]。中位数为 12.5;从这一点上我不明白 - 因为这是与中位数距离最小的集合,用其他任何东西替换只会增加目标。如果我理解正确,请告诉我。
  • 首先将 12 替换为同一集合中的下一个元素 (21),从而得出到中位数 12 的距离总和:[11,13,15,21]。然后你替换其他值:[11,15,21,22],然后是 [15,21,22,24],然后是 [21,22,23,24],最后是 [22, 23,24,33]。这些选择之一给出了最佳结果。至于最优性的证明,我认为归纳证明应该在这里有效,但它会相当复杂。

标签: algorithm dynamic-programming


【解决方案1】:

这可以减少以在加权图中找到最小权重团。 不同集合中的任何两个节点的权重等于它们差异的绝对值。

【讨论】:

  • 谢谢。看起来是这么回事。请看看我是否理解正确:给定 3 个集合 X1、X2、X3,每个集合有 m 个元素,我们构建一个 3m x 3m 的 adj。矩阵,其中m x m(对应集合)的块对角线是无穷大,并且从不同集合中选出的任意两个元素之间,权重等于abs。元素之间的区别?换句话说,通过从每个集合中选择一个元素来组成所有可能的派系?
  • 要显示一个问题是 NP-Complete,您需要显示从 NP-Hard 问题到您的问题的简化,而不是相反。请记住,NP 中的每个问题都有一个归约 SAT。这并不意味着 NP 中的每个问题都是 NP-Hard。
  • @user1669710 是的,我认为和你一样。
  • @xjchengo +1 了解您对连接的见解;我仍然对减少最大集团为此感到头疼。
  • 原来我可以在 O(nm^3) 中做到这一点 - 在上面发布我的解决方案作为编辑。不知道是不是对的,我就放出来了。
【解决方案2】:

我不认为这是 NP 完全的,因为我认为我们可以找到并识别最多 O(n^2m^2) 次猜测的解决方案。

为了不担心平局,从整数到实数并添加非常少量的抖动。我认为这是随机的,但我认为您可以选择确定性抖动来达到相同的效果。

把这个问题想象成从布置在实线上的一组彩色点中进行选择,以便从每种颜色中选取一个点,并使它们之间的绝对差之和最小化。

我只考虑 n 为偶数的情况。解点集的中值出现在两个中心点之间。对于解集中的每个点,它与两个中心点之间没有相同颜色的点(或者我们可以改进解)。出于同样的原因,如果我们将其从解决方案集中移除,每个点都是该颜色与我们得到的 n-1 个点的中位数最近的点。

使用我们的 (nm)^2 猜测,我们猜测解集中两个中心点的身份。这让我们找到 n-2 个点,我们可以将可能性减少到每种颜色中的两个,即离这两个点两侧的两个中心点最近的点。

现在考虑从解集中删除一个点形成的中位数。如果我们删除的点位于两个中心点的右侧,则中位数是这两个点的左侧。如果我们删除的点在左侧,则中位数是这两个点的右侧。在解决方案集中,我们刚刚删除的点比该颜色的任何其他点更接近新中值,并且新中值是距离它的两个中心点中较远的一个。所以我们可以将它与相同颜色的另一个候选区区分开来 - 它是两者中最接近两个中心点中的另一个。

因此,通过最多 O(n^2*m^2) 的猜测,我们可以为每个 get 找到一个可能的解集,并从这些解集中选择目标最小的一个来获得全局最小值。每个猜测都需要一些工作 - 可能是 O(m),所以这很可能是一个 O(n^2m^3) 的完全幼稚实现 - 也许主要是一种理论方法。

也许这好得令人难以置信,但我们能否将其转化为简单地检查数据中的每个点以及最接近它的其他颜色的点的证明?一个论点是,如果我们有两个点,并且我们可以将解中的每个点识别为最接近两个点中的最远点,那么该点也必须最接近该点对中的另一个点。因此,猜测这对中的任何一个点并找到最接近它的点可能会起作用。这开始看起来很像 Evgeny Kluev 解决方案的证明

【讨论】:

  • 谢谢。现在检查一下。我同意 O(n^2m^2 部分)。我正在努力了解您的解决方案。但是,我很高兴,因为我还有另一个看起来像 O(n^2m^2) 的解决方案。我会将其添加为编辑。
  • 我的结果是 O(nm^3),但可能是我错了。仍在计算您的解决方案。
  • 除了显示它是多项式之外,我还没有真正考虑过该顺序。我计算了猜测,每个猜测可能需要 O(m) 的工作,但我没有考虑更有效的实现方法。也许这太好了,但我已经编辑了我的答案,建议您可能只需要猜测一个点,在这种情况下,它看起来很像 Evgeny Kluev 的解决方案 - 将每个点与彼此最接近的一个点一起尝试作为一种可能的解决方案。
猜你喜欢
  • 2019-11-07
  • 2015-06-13
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多