题目
三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自已划行,随从们密约,在河的任一岸,一旦随从的人数比商人多就杀人越货。但是如果乘船渡河的大权掌握在商人们手中,商人们怎样才能安全渡河呢?又若四名商人各带一个随从过河,商人如何才能安全渡河?一般地,有 n n n名商人带 n n n个随从过河,船每次能渡 k k k人过河,试讨论商人能安全过河时, n n n与 k k k应满足什么条件?
模型假设
- 小船总能正常工作,且过河过程中不会出现意外情况;
- 随从总是听从商人的安排;
- 小船返回时,必须有至少一人操作。
模型建立
设
S
i
=
{
a
,
b
}
S_i = \{a,b\}
Si={a,b}为执行第
k
k
k次决策后出发岸的状态,其中
a
,
b
a,b
a,b分别表示商人和随从的人数,
0
≤
a
≤
n
,
0
≤
b
≤
n
0\leq a\leq n, 0\leq b\leq n
0≤a≤n,0≤b≤n。容易知道在执行第
i
i
i次决策后,目的岸的状态为
S
i
′
=
{
n
−
a
,
n
−
b
}
,
S
0
′
=
{
0
,
0
}
S'_i = \{n-a, n-b\},S'_0 = \{0,0\}
Si′={n−a,n−b},S0′={0,0}。则对状态的约束为
{
a
≥
b
n
−
a
≥
n
−
b
(1)
\left\{\begin{aligned} a &\geq b \\ n-a &\geq n-b \end{aligned}\right. \tag{1}
{an−a≥b≥n−b(1)
或
{
S
i
=
{
n
,
b
}
∣
b
=
1
,
2
,
3
}
∪
{
S
i
=
{
0
,
b
}
∣
b
=
1
,
2
,
3
}
(2)
\{S_i=\{n,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{0,b\}\ |\ b = 1,2,3\} \tag{2}
{Si={n,b} ∣ b=1,2,3}∪{Si={0,b} ∣ b=1,2,3}(2)
(1)式表示在任意岸边,商人数量必须大于随从数量,解得
{
S
i
=
{
a
,
b
}
∣
a
=
b
}
\{S_i=\{a,b\}\ |\ a=b\}
{Si={a,b} ∣ a=b}。(2)式表明某一岸上只有随从而没有商人,随从无法越货。因此所有允许的状态集为
S
=
{
S
i
=
{
n
,
b
}
∣
b
=
1
,
2
,
3
}
∪
{
S
i
=
{
0
,
b
}
∣
b
=
1
,
2
,
3
}
∪
{
S
i
=
{
a
,
b
}
∣
a
=
b
}
(3)
\mathscr{S} = \{S_i=\{n,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{0,b\}\ |\ b = 1,2,3\} \cup \{S_i=\{a,b\}\ |\ a=b\} \tag{3}
S={Si={n,b} ∣ b=1,2,3}∪{Si={0,b} ∣ b=1,2,3}∪{Si={a,b} ∣ a=b}(3)
特别地,初始时状态
S
0
=
{
n
,
n
}
S_0 = \{n, n\}
S0={n,n},所有人过河完成的终止状态为
S
2
N
+
1
=
{
0
,
0
}
S_{2N+1} = \{0,0\}
S2N+1={0,0}。
我们定义从出发岸到目的岸的第
2
m
−
1
(
m
>
0
)
2m-1(m>0)
2m−1(m>0)次策略为
f
2
m
−
1
:
S
→
S
f_{2m-1}: \mathscr{S}\to\mathscr{S}
f2m−1:S→S,从目的岸返回出发岸的策略为
g
2
m
:
S
→
S
g_{2m}:\mathscr{S}\to\mathscr{S}
g2m:S→S,分为为一映射。我们的问题是找到一组策略使
f
2
N
+
1
g
2
N
…
f
3
g
2
f
1
(
S
0
)
=
{
0
,
0
}
f_{2N+1}g_{2N}\dots f_3 g_2 f_1(S_0) = \{0,0\}
f2N+1g2N…f3g2f1(S0)={0,0}
由此我们可以建立一个二维的状态转移表,在这个状态表中,设
S
2
l
=
{
a
,
b
}
(
l
>
0
)
S_{2l}=\{a,b\}(l>0)
S2l={a,b}(l>0),又设
S
2
l
+
1
=
{
a
′
,
b
′
}
S_{2l + 1} = \{a',b'\}
S2l+1={a′,b′},即
f
2
l
+
1
(
S
2
l
)
=
{
a
′
,
b
′
}
f_{2l+1}(S_{2l}) = \{a',b'\}
f2l+1(S2l)={a′,b′},有
a
′
≤
a
,
b
′
≤
b
a' \leq a, b' \leq b
a′≤a,b′≤b,因此策略
f
2
m
−
1
f_{2m-1}
f2m−1将导致状态在状态表中向左、下或左下方移动;再设
S
2
l
+
2
=
{
a
′
′
,
b
′
′
}
S_{2l+2}=\{a'',b''\}
S2l+2={a′′,b′′},即
g
2
l
+
2
(
S
2
l
+
1
)
=
{
a
′
′
,
b
′
′
}
g_{2l+2}(S_{2l+1}) = \{a'',b''\}
g2l+2(S2l+1)={a′′,b′′},有
a
′
′
≥
a
′
,
b
′
′
≥
b
’
a''\geq a', b''\geq b’
a′′≥a′,b′′≥b’,因此策略
g
2
m
g_{2m}
g2m将导致状态在状态表中向右、上或右上方移动。
模型求解
n = 3 , k = 2 n=3,k=2 n=3,k=2时,通过简单的遍历我们可以得到 { 3 , 3 } → { 3 , 1 } → { 3 , 2 } → { 3 , 0 } → { 3 , 1 } → { 1 , 1 } → { 2 , 2 } → { 0 , 2 } → { 0 , 3 } → { 0 , 1 } → { 0 , 2 } → { 0 , 0 } \{3,3\} \to \{3,1\} \to \{3,2\} \to \{3,0\} \to \{3,1\} \to \{1,1\} \to \{2,2\} \to \{0,2\} \to \{0,3\} \to \{0,1\} \to \{0,2\} \to \{0,0\} {3,3}→{3,1}→{3,2}→{3,0}→{3,1}→{1,1}→{2,2}→{0,2}→{0,3}→{0,1}→{0,2}→{0,0}是一组可行的策略。而 n = 4 , k = 2 n=4,k=2 n=4,k=2不存在任何可行的过河策略。
对于任意 n , k n,k n,k,我们定义三个允许的状态集 S 1 = { S i = { n , b } ∣ b = 1 , 2 , 3 } , S 2 = { S i = { 0 , b } ∣ b = 1 , 2 , 3 } , S 3 = { S i = { a , b } ∣ a = b } \mathscr{S}_1 = \{S_i=\{n,b\}\ |\ b = 1,2,3\}, \mathscr{S}_2 = \{S_i=\{0,b\}\ |\ b = 1,2,3\}, \mathscr{S}_3 = \{S_i=\{a,b\}\ |\ a=b\} S1={Si={n,b} ∣ b=1,2,3},S2={Si={0,b} ∣ b=1,2,3},S3={Si={a,b} ∣ a=b}.
若 k ≥ 4 k\geq 4 k≥4,因为 S 0 ∈ S 3 , S 2 N − 1 ∈ S 3 S_0 \in \mathscr{S}_3, S_{2N-1} \in \mathscr{S}_3 S0∈S3,S2N−1∈S3,容易证明存在映射 f 2 m − 1 : S 3 → S 3 , g 2 m : S 3 → S 3 f_{2m-1}: \mathscr{S}_3\to\mathscr{S}_3,g_{2m}: \mathscr{S}_3\to\mathscr{S}_3 f2m−1:S3→S3,g2m:S3→S3使所有人过河,即从初始状态表开始,状态总能在对角线上移动,最终到达终点。而 k = 1 k=1 k=1无意义。下面讨论 1 < k < 4 1<k<4 1<k<4的情况,即 k ∈ { 2 , 3 } k \in \{2,3\} k∈{2,3}。
首先,容易证明,总有映射 f 2 m − 1 : S 1 → S 1 , g 2 m : S 1 → S 1 f_{2m-1}: \mathscr{S}_1\to\mathscr{S}_1,g_{2m}: \mathscr{S}_1\to\mathscr{S}_1 f2m−1:S1→S1,g2m:S1→S1和 f 2 m − 1 : S 2 → S 2 , g 2 m : S 2 → S 2 f_{2m-1}: \mathscr{S}_2\to\mathscr{S}_2,g_{2m}: \mathscr{S}_2\to\mathscr{S}_2 f2m−1:S2→S2,g2m:S2→S2,即 S 1 \mathscr{S}_1 S1之间可以进行转换, S 2 \mathscr{S}_2 S2亦是如此。
又因为初始状态 S 0 = { n , n } S_0=\{n,n\} S0={n,n}而终止状态 S 2 N + 1 = { 0 , 0 } S_{2N+1}=\{0,0\} S2N+1={0,0},因此,若 n ≤ k n\leq k n≤k,则 S 2 l = { n , 0 } → S 2 l + 1 = { 0 , 0 } S_{2l}=\{n,0\} \to S_{2l+1} = \{0,0\} S2l={n,0}→S2l+1={0,0}或 S 2 l = { n , 3 } → S 2 l + 1 = { 0 , 3 } S_{2l}=\{n,3\} \to S_{2l+1} = \{0,3\} S2l={n,3}→S2l+1={0,3}是可行的。即从 S 1 \mathscr{S}_1 S1转换到 S 2 \mathscr{S}_2 S2。可以完成过河。
若 n > k n > k n>k 有过河策略,则由状态转移的方向决定了必有某 l > 0 l>0 l>0使得 S 2 l − 2 ∈ S 1 , f 2 l − 1 ( S 2 l − 2 ) = S 2 l − 1 ∈ S 3 S_{2l-2} \in \mathscr{S}_1, f_{2l-1}(S_{2l-2}) = S_{2l-1} \in \mathscr{S}_3 S2l−2∈S1,f2l−1(S2l−2)=S2l−1∈S3,且 g 2 l ( S 2 l − 1 ) = S 2 l ∈ S 3 g_{2l}(S_{2l-1}) = S_{2l} \in \mathscr{S}_3 g2l(S2l−1)=S2l∈S3(因为 g 2 l ( S 2 l − 1 ) ∈ S 1 g_{2l}(S_{2l-1}) \in \mathscr{S}_1 g2l(S2l−1)∈S1是循环的)。设此时 S 2 l − 1 = { x , x } S_{2l-1} = \{x,x\} S2l−1={x,x},则 k ≥ n − x k \geq n - x k≥n−x,即 n ≤ k + x n \leq k + x n≤k+x。由于 k ∈ { 2 , 3 } k \in \{2,3\} k∈{2,3},有 g 2 l ( S 2 l − 1 ) = S ( 2 l ) = { x + 1 , x + 1 } , f 2 l + 1 ( S 2 l ) = S 2 l + 1 ∈ S 3 ∪ S 2 g_{2l}(S_{2l-1}) = S(2l) = \{x+1, x+1\},f_{2l+1}(S_{2l}) = S_{2l+1} \in \mathscr{S}_3\cup \mathscr{S}_2 g2l(S2l−1)=S(2l)={x+1,x+1},f2l+1(S2l)=S2l+1∈S3∪S2.
同样,由状态转移的方向可知存在某 l ′ > l l'>l l′>l使得 S 2 l ′ ∈ S 3 , f 2 l ′ + 1 ( S 2 l ′ ) ∈ S 2 S_{2l'}\in \mathscr{S}_3,f_{2l'+1}(S_{2l'}) \in \mathscr{S}_2 S2l′∈S3,f2l′+1(S2l′)∈S2(否则状态一直循环),因此 k ≥ x + 1 k \geq x+1 k≥x+1,结合上一个条件,两式相加得 n ≤ 2 k − 1 n \leq 2k - 1 n≤2k−1。
我们也可以讨论在船上是否也需要保证商人数量大于随从数量的情况,但容易证明若某次船上出现随从数大于商人数后,必然导致对岸在下一状态中随从数大于商人数:对岸的允许状态只有商人数等于随从数或无商人。
综上所述, k ≥ 4 k\geq 4 k≥4或 n ≤ 2 k − 1 ( k = 2 , 3 ) n \leq 2k - 1(k = 2,3) n≤2k−1(k=2,3)时存在过河方案;而 k = 1 k = 1 k=1或 n > 2 k − 1 ( k = 2 , 3 ) n > 2k - 1(k = 2,3) n>2k−1(k=2,3)时不存在过河方案。
回到题目 n = 3 , k = 2 n=3,k=2 n=3,k=2满足条件,存在过河方案,而 n = 4 , k = 2 n=4,k=2 n=4,k=2不满足条件,因此不存在过河方案。