货舱选址问题
例题链接
在一条数轴上有
n
n
n 家商店,它们的坐标分别为
a
1
−
a
N
a_1- ~a_N
a1− aN 。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
那么先假设这个仓库地址地址在
x
x
x 处,此时的距离和为:
∣
a
1
−
x
∣
+
∣
a
2
−
x
∣
+
.
.
.
+
∣
a
n
−
x
∣
\vert a_1-x \vert + \vert a_2 -x \vert + ...+ \vert a_n - x \vert
∣a1−x∣+∣a2−x∣+...+∣an−x∣
那么我们首先来看两个点的 ,对于两个点来说,一定有:
∣
a
−
x
∣
+
∣
b
−
x
∣
≥
∣
a
−
b
∣
\vert a-x \vert + \vert b -x \vert ≥ \vert a-b \vert
∣a−x∣+∣b−x∣≥∣a−b∣
这个不等式画线段即可证明,其最佳的
x
x
x 必然落在
[
a
,
b
]
[a,b]
[a,b] 中。
首先我们将
a
i
a_i
ai 从小到大排好序,那么我们现在将距离和的公式按首尾结合的形式变形:
距
离
和
=
{
(
∣
a
1
−
x
∣
+
∣
a
n
−
x
∣
)
+
(
∣
a
2
−
x
∣
+
∣
a
n
−
1
−
x
∣
)
+
.
.
.
(
a
n
+
1
2
−
x
)
n
为
奇
数
(
∣
a
1
−
x
∣
+
∣
a
n
−
x
∣
)
+
(
∣
a
2
−
x
∣
+
∣
a
n
−
1
−
x
∣
)
+
.
.
.
(
∣
a
n
2
−
x
∣
+
∣
a
n
2
+
1
−
x
∣
)
n
为
偶
数
距离和 = \begin{cases} (|a_1-x|+|a_n-x|)+(|a_2-x|+|a_{n-1}-x|)+...(a_{\frac{n+1}{2}}-x) & n为奇数 \\ (|a_1-x|+|a_n-x|)+(|a_2-x|+|a_{n-1}-x|)+... (|a_{\frac{n}{2}}-x|+|a_{\frac{n}{2}+1}-x|)& n为偶数 \end{cases}
距离和={(∣a1−x∣+∣an−x∣)+(∣a2−x∣+∣an−1−x∣)+...(a2n+1−x)(∣a1−x∣+∣an−x∣)+(∣a2−x∣+∣an−1−x∣)+...(∣a2n−x∣+∣a2n+1−x∣)n为奇数n为偶数
倘若我们每个小括号内都取最小值,那么整体将取得最小值,即:
奇数
M
i
n
Min
Min:
(
∣
a
1
−
a
n
∣
)
+
(
∣
a
2
−
a
n
−
1
∣
)
+
.
.
.
0
(
m
i
n
(
a
n
+
1
2
−
x
)
=
0
)
(|a_1-a_n|)+(|a_2-a_{n-1}|)+...0(min(a_{\frac{n+1}{2}}-x)=0)
(∣a1−an∣)+(∣a2−an−1∣)+...0(min(a2n+1−x)=0)
偶数
M
i
n
Min
Min:
(
∣
a
1
−
a
n
∣
)
+
(
∣
a
2
−
a
n
−
1
∣
)
+
.
.
.
(
∣
a
n
2
−
a
n
2
+
1
∣
)
(|a_1-a_n|)+(|a_2-a_{n-1}|)+...(|a_{\frac{n}{2}}-a_{\frac{n}{2}+1}|)
(∣a1−an∣)+(∣a2−an−1∣)+...(∣a2n−a2n+1∣)
那么我们能否保证取到这个最小值呢?答案是可以的,因为我们要取得每个小括号 ( ∣ a i − x ∣ + ∣ a j − x ∣ ) (|a_i-x|+|a_j-x|) (∣ai−x∣+∣aj−x∣) 的最小值的条件就是这个 x x x 选在 [ a i , a j ] [a_i,a_j] [ai,aj] 之间,那么有没有一个 x x x 可以保证在所有的 [ a i , a j ] [a_i,a_j] [ai,aj] 之间呢?显然如果 n n n 为奇数, x x x 只能选在 a [ ] a[\ ] a[ ] 的中位数,因为此时必须还要使得 ( a n + 1 2 − x ) (a_{\frac{n+1}{2}}-x) (a2n+1−x) 达到最小(0)。倘若 n n n 为偶数,选在 a [ ] a[\ ] a[ ] 的两个中位数之间(包含两个中位数)都等于最小值。这样问题就解决了。