贪心算法将数字配对,最小化最大总和

输入是实数x1,x2,…,x2n的序列.我们想将这些数字配对成n对.对于第i对,(i = 1,2,…,n),让Si表示该对中的数字之和. (例如,如果将x(2i-1)和x2i配对作为第i对,则Si = x(2i-1)x2i).我们想要对这些数字进行配对,以使Maxi [Si]最小化.设计一个贪心算法来解决这个问题

问题.

这就是问题所在;我的解决方案是简单地对数字进行排序并配对前10个元素并添加一个/减去一个索引并重复.该算法尝试针对每对进行优化,以使其变得贪婪.我只是想知道是否有线性时间算法可以做到这一点?

PS:这不是作业,但我明白这看起来非常像.

最佳答案 没有.没有一个线性的时间算法来完成这项工作.输入数字可以是任何顺序,因此您无法立即使用min Maxi [Si]完成配对.您当前的解决方案简单而且好.

建议改善运行时间:

您可以使用输入数字创建二叉树(这需要O(nlog(n))时间).按顺序遍历树并从(first i,last-i)元素(i从0到n / 2)创建对

点赞