如何解决选择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的小猫配对)。
解决方法
最优贪婪算法是:
- 从小到大对小狗进行排序(关系被任意打破)。表示这样的列表
P
。 - 从最小到最大对小猫进行排序(关系被任意打破)。表示这样的列表
K
。 - 根据对索引
(P[0],K[0])
,(P[1],K[1])
,...,(P[n - 1],K[n - 1])
选择对。
可以使用交换参数将这种选择证明是最佳的。
定义:如果存在两对 (a,d)
和(b,c)
,则列表具有倒置,使得{ {1}}和a < b
。
引理1 :所有没有倒置的排列都具有相同的∆。 (您的任务:P,比较在c < d
和a = b
,c < d
和a < b
的情况下发生的情况)
声明:存在一个没有倒置的最佳安排。
证明。至少存在一个最优安排,我们称其为c = d
。
如果O
没有取反,我们就完成了。
将O
和(a,d)
交换为(b,c)
和(a,c)
之后,我们得到了一个优化的方案,其反演少了。初始排列最多可以具有C n 2 个反转,因此,在最多C n 2 个交换之后,我们得到无反转的最佳安排。
我们知道(b,d)
和a < b
。强迫其他不平等:
-
c < d
和a <= c
:b <= d
-
|a - d| = max(|a - d|,|b - c|) >= max(|a - c|,|b - d|)
和c <= a
:b <= d
和|a - d| >= |b - d|
然后|b - c| >= |a - c|
-
max(|a - d|,|b - d|)
和a <= c
:d <= b
和|a - d| >= |a - c|
然后|b - c| >= |b - d|
-
max(|a - d|,|b - d|)
和a >= c
:d <= b
在所有情况下,互换安排都不会增加∆值,并且我们知道初始安排具有最佳∆值,因此我们的主张是正确的。
通过引理1 和声明,贪婪算法是最佳的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。