基本问题(均分纸牌)
有 n 个小朋友坐成一排,每人有 ai 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 1,求使所有人获得均等糖果的最小代价。
先抛出式子:
设ci=∣i∑j=1aj−i∗avg| , W=n∑i=1ci
证明:
首先第i个小孩一定是向第i+1个小孩那里索取或传递糖果,设交换值为 pi。
目标是使所有人手中的糖果数量为平均值(avg),那么经过n−1轮交换后,得出式子:
a1−p1=avg
a2+p1−p2=avg
a3+p2−p3=avg
……
an+pn−1=avg
以第i项为例,将pi移到等式左边,其他移到等式右边。
pi=pi−1+ai−avg
拆开pi−1得(这一步跳得大一点):
pi=i∑j=1aj−i∗avg
总代价就是所有交换的数量和(注意一次只能交换一):
W=n∑i=1|pi|
证毕。
环形纸牌均分(糖果传递)
有 n 个小朋友坐成一圈,每人有 ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 1,求使所有人获得均等糖果的最小代价。
与纸牌均分问题相比,变化的是首项和末项。
所有变量的意义和上一个问题相同。
首项:a1+pn−p1=avg
中间项:ai+pi−1−pi=avg
末项:an+pn−1−pn=avg
目标还是所有交换值(pi)之和。
这里需要一个技巧:将所有的p1作为一个单独的变量。
接下来的 p2 到 pn 可以表示为:
p2=a2−avg+p1
p3=(a2−avg)+(a3−avg)+p1
……
设: ci=i∑j=2aj−i∗avg , c1=0
则 p1=c1+p1 , p2=c2+p1 ,……
答案即: W=n∑i=1|ci+p1|
证毕。问题这个 p1 是多少呢?
这个式子可以继续变化:W=n∑i=1|ci−(−p1)|
这样就是标准的货仓选址问题了。
货舱选址中的最佳位置就是数轴上的点集位置中的中位数。
第一个小朋友可以传递的糖果数是任意整数个,只要使p1取所有ci的中位数就可以让传递代价最小。
所以解决的方案就是先预处理出所有的 ci ,然后取中位数,遍历一遍 c 计算结果。
总结
所有有关均值变换和选址问题且距离最短的,都可以在这个规律上变换式子解决问题。
重要的是能够灵活的运用中位数。
例题
供参考的例题: