葡萄酒交易贪婪解决方案(SPOJ)的正式正确性证明?

时间:2014-06-27 11:58:59

标签: algorithm greedy proof-of-correctness

在网上法官上发布有关问题的问题,请不要误解我。我只想知道如何证明解决方案的正确性。以下是问题Wine trading problem。它说单位距离有连续房屋,每个房子要么出售或购买葡萄酒。总需求=总供应量。在交易中完成的工作是涉及距离的葡萄酒量。问题是在最低限度的工作中满足所有房屋的需求。建议的解决方案是第一个卖方(比如从行的右侧开始)卖给第一个买方(金额=最小(卖方,买方))(这是贪婪的选择),然后解决剩余的问题。如何正式证明这是正确的?

1 个答案:

答案 0 :(得分:2)

不确定它是否像你想要的那样正式,但这是对证据的直觉。

为了简化,我会将供应商记录为' +'而其他人则是' - '。

WLOG,我将从左侧的供应商开始。所以你可以选择买家。

+         -    -

假设你没有选择第一个。

+         -    -
<==============>

然后你必须由另一个供应商喂养第一个,而你可以选择他的唯一原因是他更接近第一个买主。他可以在第一个买家的左边或右边。

LEFT

+      +  -    -
<==============>
       <==>

嗯,距离与贪婪的解决方案完全相同。

+      +  -    -
<=========>
       <=======>

RIGHT

+         - +  -
<==============>
          <=>

嗯,贪婪的解决方案会更好(因为它避免重叠)。

+         - +  -
<=========>
            <==>

换句话说,贪婪只在必要时重叠,如果没有,它会从重叠距离的2倍中受益。