如何证明以下算法的正确性?

时间:2014-11-09 14:38:33

标签: algorithm

一家家具店正在进行销售:购买两件商品的价格 更贵的一个。刚搬到新房子的约翰冲进了商店 并选择2k家具:f1,f2,...,f2k-1,f2k。这些物品的价格是p1,p2,...,p2k-1,p2k, 分别。帮助约翰成对安排家具,使2k的总成本 物品很少。建议在O(klogk)中运行的算法,证明其正确性 和运行时间。

好的,所以听起来并不复杂:首先,我会将所有2k家具按其价格排序到阵列,然后每个单元格和他的下一个是一对夫妇。请O(klogk)。

我如何证明我建议的正确性? 我认为假设有更多的最小解决方案,并得到一个矛盾,但我不知道如何证明这一点。 tnx很多!

1 个答案:

答案 0 :(得分:2)

你想购买所有2k件家具,每件都只需一对。现在让我们按照价格的降序来考虑这些碎片。最昂贵的一件需要成对出售,因为它最昂贵,它将比这对中的另一件更昂贵。因此,您可以免费购买任何家具。让我们假设最好的解决方案将最昂贵的一块用一块价格X组合在一起,让我们进一步假设这件作品不是价格方面的第二件(让我们来表示第二件价格S)。现在S将是它自己的一对,这对的价格不可能高于S的价格。现在,如果我们改变S和X的位置所有对的价格,但是X曾经是S过去的那个将保持不变。由于S现在是最昂贵元素的组合,这一对的价格也保持不变。至于现在X的那对 - 它不可能增加,因为这意味着X比S更贵,这是一个矛盾。

因此,新的解决方案也是最佳的,因此始终存在一种解决方案,其中最昂贵的元素与倒数第二个分组。现在,您可以使用归纳法来证明您的方法的正确性。