Greedy Algorithem匹配数字

时间:2018-03-27 23:32:13

标签: algorithm sorting greedy correctness

我们有一个包含2n袜子的'S'组。该组中的每个袜子都有一种颜色。 颜色由实数正数表示。 [c:S - > R(+)] 该组中的2只袜子可能颜色相同。

- 我们定义了一双袜子(a,b)的“惩罚”: P(a,b)= | c(a)-c(b)|。 (换句话说,2种相同颜色袜子的“惩罚”是0)

我需要描述一个贪婪的算法,该算法将组S作为输入并返回包含袜子对的组A(来自S的每个袜子,恰好是A的一次)并且总结惩罚将最小化即可。 [总结惩罚=>小组中所有对的惩罚总和]

我需要证明算法是正确的。 我有证明我的算法是正确的问题, 我根据它们的数字颜色值对袜子进行了分类,并且每次从S中挑选出第一个。 我尝试用感应来证明它,但我不知道如何在最佳组中进行“切换”部分。

1 个答案:

答案 0 :(得分:0)

所以你的算法是正确的:)

证明: 想象一下,我们对我们的问题有不同的解决方案,这比我们的问题更好(我们只是排序和匹配最接近的一起)。因此必须至少存在两对(a

1) a在区间(c,d)中,b与它们不同或相似。
(否则我们会在我们的解决方案中使用这对)。

现在让我们来计算惩罚:惩罚是| a-b | + | c-d |

因为我们的 1)我们可以考虑我们数字的顺序,例如:

2 :a< c< b< d

3 :a< c< d< B'/ P>

4 :c< a< b< d

5 :c< a< d< B'/ P>

每个计算器的计算结果几乎相同: 我们可以很容易地证明

例如在( 2 )中表示| a-b | + | c-d | > | A-C | + | b-d |,

因为a-b&lt; a-c和a&lt; c&lt; b所以| a-b | &GT; | A-C | c-d&lt; b-d和c < b&lt; d所以| c-d | &GT; | B-d |

现在如果发生这种情况,交换这些值会将此解决方案更改为更好的解决方案,如我们的算法中所示:)