微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择n对以使对中的最大Δ尽可能小的贪心算法是什么?

如何解决选择n对以使对中的最大Δ尽可能小的贪心算法是什么?

我有 n 个大小的小狗和 n 个大小的小猫,我想配对一对小猫。特别是,我希望一对小猫和小猫之间的尺寸差异尽可能小。

什么是有效的贪婪算法,它选择 n 个小狗-小猫对,以使它们之间的大小差异 尺寸差异最大的一对越小越好?更准确地说,用s_i表示幼犬i的大小,而s_j表示小猫j的大小。给定一对,令∆(i,j)= | s_i − s_j |。该算法应选择配对,以确保所有配对中最大的∆(i,j)尽可能小。

这里是一个例子:有三只大小为6、4和9的小狗,以及三只大小为8、7和3的小猫。如果将它们配对为,,,则最大Δ为6,而如果将它们配对,,,则最大Δ为1,这显然是最佳的(例如,小狗尺寸6只能 与一只比小狗大≥1的小猫配对)。

解决方法

最优贪婪算法是:

  1. 从小到大对小狗进行排序(关系被任意打破)。表示这样的列表P
  2. 从最小到最大对小猫进行排序(关系被任意打破)。表示这样的列表K
  3. 根据对索引(P[0],K[0])(P[1],K[1]),...,(P[n - 1],K[n - 1])选择对

可以使用交换参数将这种选择证明是最佳的

定义:如果存在两对 (a,d)(b,c),则列表具有倒置,使得{ {1}}和a < b

引理1 :所有没有倒置的排列都具有相同的∆。 (您的任务:P,比较在c < da = bc < da < b的情况下发生的情况)

声明:存在一个没有倒置的最佳安排。
证明。至少存在一个最优安排,我们称其为c = d
如果O没有取反,我们就完成了。
O(a,d)交换为(b,c)(a,c)之后,我们得到了一个优化的方案,其反演少了。初始排列最多可以具有C n 2 个反转,因此,在最多C n 2 个交换之后,我们得到无反转的最佳安排。

我们知道(b,d)a < b。强迫其他不平等:

  1. c < da <= c
    b <= d
  2. |a - d| = max(|a - d|,|b - c|) >= max(|a - c|,|b - d|)c <= a
    b <= d|a - d| >= |b - d|然后|b - c| >= |a - c|
  3. max(|a - d|,|b - d|)a <= c
    d <= b|a - d| >= |a - c|然后|b - c| >= |b - d|
  4. max(|a - d|,|b - d|)a >= c
    d <= b

在所有情况下,互换安排都不会增加∆值,并且我们知道初始安排具有最佳∆值,因此我们的主张是正确的。

通过引理1 声明,贪婪算法是最佳的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。