【发布时间】:2012-04-04 01:20:17
【问题描述】:
输入是一个实数序列 x1, x2, ..., x2n。我们想将这些数字配对成 n 对。对于第 i 个对 (i = 1, 2, ..., n),令 Si 表示该对中的数字之和。 (例如,如果将 x(2i−1) 和 x2i 作为第 i 对配对,则 Si = x(2i−1) + x2i)。我们希望将这些数字配对,以使 Maxi[Si] 最小化。设计一个贪心算法来解决这个问题 问题。
这就是问题;我的解决方案是简单地对数字进行排序并配对倒数第一的元素和加一/减一索引并重复。该算法尝试对每一对进行优化,从而使其变得贪婪。我只是想知道是否有线性时间算法可以做到这一点?
PS:这不是作业,但我知道这看起来很像。
【问题讨论】:
-
答案刚刚被删除,但我发布了这个:这里有一个link,适用于任何对基于任意元素排序的比较下限感兴趣的人。
-
我不知道那里发生了什么 - 答案似乎与我的评论一起消失了!感谢您的链接,我知道基于比较的任意元素排序的下限为 nlgn。我想知道是否有一种线性方法可以将这两个数字配对,以使它们的总和最小。我认为你想说的是,没有排序就没有其他方法,排序的下限是 nlgn?
-
您的解决方案是正确的。对数字进行排序并迭代地配对第一个和最后一个。如果你愿意,我可以提供证据。
标签: algorithm language-agnostic greedy