ボートの問題(中級編)
natsu (2004/08/04(Wed) 21:35:52)
ちょっと、ボートの問題をひねってみました。
こちら岸にボートが4隻あります。向こう岸にすべてのボートを移動させることが目的です。
一度に二隻まで移動することができます。(友達はつれてきちゃだめ。一人でやってw)。向こう岸についたら向こう岸にあるボートを使ってこちら岸に戻ってきます。それを繰り返し、できるだけ早く向こう岸に全部移動します。
4隻のボートは、それぞれ移動する時間が決まっています。2隻のボートを動かすときは、長い時間のボートと同じ時間がかかります。例えば、Aのボートが10分、Bのボートが5分移動にかかるとしたとき。AとBを2隻移動するときは、長い時間である10分かかるものとします。
(いわゆる有名なボート問題です。)
4隻のボートがそれぞれ何分かかるかは、わかっていません。
ただ、4隻のボートの時間の和が、20分であることと、
4隻ともすべて異なる時間であること、
4隻ともかかる時間が小数にならない(3.5分とかはなし。)し、もちろん0分なんていうあり得ないボートもありません。
たとえば、1分と3分と7分と9分とかです。(1+3+7+9=20分)
この条件で、
(1)最も向こう岸にすべてのボートを移動する時間が短くなる場合
と
(2)最も向こう岸にすべてのボートを移動する時間が長くなる場合
(もちろん、最短で移動しようという最大限の努力はします。)
は、それぞれ何分でしょうか。
Apollo (2004/08/05(Thu) 00:16:18)
こんにちは。参加します。
(1) 16分
(2) 24分
俺の計算だと、こうなりました。
LUMO (2004/08/05(Thu) 01:26:54)
私も考えてみましたが、どう解くのが良いかまだわかってません(汗
とりあえず例に出てる(1379)と同じ方法だと最短16分(1289)、最長24分(1568)ですね。
もうひとつ単純に「最も速い1隻ともう1隻で渡る→最も速い1隻で戻る」の繰り返しだと、
最短21分(最速1、他は任意)、最長23分(3467)になります。
この時点で最短16分、最長は23分となりますが、
23分かかる(3467)は、前者の方法ならば22分でできます。
前者の方法で23分のものは(3467)ではないので、後者の方法なら22分以下でできると思います。
これで良ければ(1)最短16分、(2)最長22分ということになりますが・・・。
(3467)を21分以下で渡せる方法があるのかな?
Apollo (2004/08/05(Thu) 09:05:24)
ふたたびどうも。
LUMOさんの解答を見て納得しました。
(1568)の最短は21分
(2567)の最短は22分
(3467)の最短は22分
よって(2)は22分。
公式は二つ必要だったんですね。
かむ (2004/08/05(Thu) 12:55:07)
こんにちわ^^
お二方の解答見て気付いたんですけど
(3458)の組み合わせの場合、最短が23分だと思うのですが
LUMOさんの前者のやり方が私の知ってるやり方であればですけど・・・。
前者も後者も23分かかります。
なんで(2)は23分?
BBQ (2004/08/05(Thu) 14:38:53)
どちらの方法でやればいいかは始めた時点ではわからないのだから、
最も運が悪かったときが(2)の答えになりますよね。
(1)16分
(2)24分
結局、最初のApolloさんと同じ答えですけど(笑)。
Apollo (2004/08/05(Thu) 15:20:43)
かむさんとBBQさんの解答を見て、両者にまたまた納得。
結局俺は二回答えて二回とも失敗していた訳で……。
この問題、深いなぁ。
natsu (2004/08/05(Thu) 18:01:47)
結構、レスがあったんで、うれしいです。特にApolloさん、何度も参加していただき、ありがとうございました。
BBQさんの「どちらの方法でやればいいかは始めた時点ではわからない」という発言には、びっくりです。すばらしいです。(出題者としては、始めた時点でもわかっていると考えていました。ごめんなさい。)
始めた時点でわかっている場合、最短16分、最長23分正解です。みなさんお見事です。
(1) (始めた時点でわかっている場合)どうしてそうなるか説明してください。全部の場合を考えるのもありですけど、違うやり方でお願いします。例えば、4隻の時間の和が100分とか全部考えるのは大変なときはどうしましょう。
(2) BBQさんのいう「始めた時点でわからない場合」、どうなるか考えてみてください。BBQさんの答えはどちらかが違っています。
Apollo (2004/08/05(Thu) 20:32:30)
よっしゃ、がんばろ。とりあえず(1)の最短の方だけ。
*****************
条件:
4隻の船が対岸に渡るために必要な時間は、自然数の整数。
4隻の速さはそれぞれ異なる。
仮定:
4隻の時間の和をTとする。
4隻の船が対岸に渡るために必要な時間を、短い順にA、B、C、Dとする。
仮定より、
0<A<B<C<D<T で、
T=A+B+C+D
五つの文字に入る数値が不明な時、最短を目指す渡り方は二通りある。
注釈:()内は一緒に渡る船。
AC
BD: CD : CD : B : B : :
: : : : : :
: ↓B(A): ↑B : ↓D(C): ↑A : ↓B(A):
: : : : : :
: : A : A : CD : CD :AB ……方法α
CD
AC
BD: CD : CD : D : D : :
: : : : : :
: ↓B(A): ↑A : ↓C(A): ↑A : ↓D(A):
: : : : : :
: : B : B : BC : BC :AC ……方法β
CD
この時、方法αに必要な時間は A+3B+D
方法βに必要な時間は 2A+B+C+D
つまり、方法αと方法βの差は 2BとA+Cの差。この両者のうち、小さい方を選択する。
ここで、ABCDの組み合わせの全てのパターンの中で、所要時間が最短になるものを考える。
方法αの場合、Bを最小化してCを最大化した時が最短になる。
方法βの場合、Aを最小化した時が最短になる。
方法αの最短を考える。
Aの最小値が1なので、Bの最小値は2。
Cの取りうる最大値はD−1。よってD=C+1
仮定より、 T=A+B+C+D
ここで、上記のA=1、B=2、D=C+1を代入。
T=1+2+C+C+1
T=2C+4
C=1/2T−2
ここで、D=C+1なので、D=1/2T−1
この問題の場合、T=20なので、方法αに必要な時間A+3B+Dは、
1+3×2+1/2×20−1=1+6+10−1
=16
方法βの最短を考える。
Aの最小値は1。
仮定より、 T=A+B+C+Dなので、B+C+D=T−A
ここでA=1を代入。
B+C+D=T−1
この問題の場合、T=20なので、方法βに必要な時間は2A+B+C+Dは、
2×1+(20−1)=21
方法αの16の方が方法βの21より小さいので、
この問題の場合、最短の時間は16分。
***************
とりあえず、ここまでです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
以下、LUMOさんの投稿の後に編集にて追加。
続いて、(1)の最長。
********************
ABCDの組み合わせの全てのパターンの中で、所要時間が最長になるものを考える。
方法αの場合、Bを最大化した上でCを最小化した時が最長になる。
方法βの場合、Aを最大化した時が最長になる。
方法αの最長を考える。
Bを最大化しようとすると、B以外を最小化する必要があるので、
A=1、C=B+1、D=C+1=B+2となる。
仮定より、 T=A+B+C+D
これに上記の式を代入。
T=1+B+(B+1)+(B+2)
T=3B+4
この問題の場合、T=20なので、
20=3B+4
3B=16
B=5.333……
ここで、Bは自然数であるので、少数以下を切り捨ててB=5
よって、A=1、B=5、C=6、D=7。
しかし、これだとA+B+C+D=19となり、1少ない。よってAに1を足し、
A=2、B=5、C=6、D=7。
よって方法αに必要な時間A+3B+Dは、
2+15+7=24
方法βの最長を考える。
Aを最大化しようとすると、A以外を最小化する必要があるので、
B=A+1、C=A+2、D=A+3となる。
仮定より、 T=A+B+C+D
これに上記の式を代入。
T=A+(A+1)+(A+2)+(A+3)
T=4A+6
この問題の場合、T=20なので、
20=4A+6
4A=14
A=3.5
ここで、Aは自然数なので、少数以下を切り捨ててA=3
すると、B=4、C=5、D=6
しかし、これだとA+B+C+D=18となり、2少ない。よってDに2を足し、
A=3、B=4、C=5、D=8。
よって、方法βに必要な時間は2A+B+C+Dは、
6+4+5+8=23
方法βの23の方が方法αの24より小さいので、
この問題の場合、最長の時間は23分。
*****************
とにかく、こんなかんじで。
LUMO (2004/08/05(Thu) 22:00:46)
こんばんは。私の解答も穴だらけでしたね。この問題奥が深すぎます(^^;
というわけで以下証明らしきもの。
Apolloさんの話に似てますが、ちょっと一般化してみました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|速い順にA、B、C、Dとする。
|片道の移動にかかる時間はA、B、C、Dのどれかなので、移動時間S=xA+yB+zC+wDと書ける。
|全行程は2往復半なのでx+y+z+w=5。
|Dの移動には必ずDだけ時間がかかり、Dを戻す事は考えにくいのでw=1として、x+y+z=4となる。
|
|S=xA+yB+zC+D ・・・(1)
|x+y+z=4 ・・・(2)
|
|また、全行程は行き3回(2隻で移動)、帰り2回(1隻で移動)から成っている。
|行きにAの時間が反映されることはなく、帰りにはAの時間が最低1回は反映される。
|(2回ともBで戻るようなら、Bの代わりにAを渡してAで戻れば良い)
|よって、x=1またはx=2。
|
|x=2のとき
|3回の行きにはすべてAが同行するので、それぞれB、C、Dの時間がかかる。
|S=2A+B+C+Dとなる。
|
|x=1のとき
|もう1回の戻りはBかCだが、遅いCを往復させるのは感心しないのでBを戻らせる。
|つまりy≧1かつz≦1となり、これと(2)を満たすのは(y,z)=(2,1)、(3,0)のみ。
|
| (y,z)=(2,1)のとき
| S=A+2B+C+Dとなり、明らかにx=2のときより遅いので却下。
| (これが上で言った「2回ともBで戻るようなら〜」に相当する)
|
| (y,z)=(3,0)のとき
| S=A+3B+Dとなる。
|
|以上より、Sが最小値を取りうるのは
|S=2A+B+C+D もしくは S=A+3B+D のとき。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
とりあえずこれでApolloさんの
>最短を目指す渡り方は二通りある
ということは示せたと思います。(いらなかったかな(汗
あとはA+B+C+D=T(定数)として、各方法での最大最小を比較すれば良いんですが
ちょっと長くなりそうなので結果(?)だけ。
最小値=T−[T/2]+6(分)
最大値=T+[(T−6)/4](分)
試しにT=20を代入すると、
最小値=T−[T/2]+6=20−[20/2]+6=20−10+6=16分
最大値=T+[(T−6)/4]=20+[14/4]=20+3=23分
一応合ってますが・・・うーん、どうでしょうか。
「始めた時点でわからない場合」の話は、最高に運が悪かった場合で48分となりました。
これは合ってるかな?
natsu (2004/08/06(Fri) 00:23:48)
Apolloさん、LUMOさん、どうもありがとうございました。二人ともすばらしい回答で、大変参考になりました。
Apolloさん、最小のときの答えは完璧です。最大のときは、おしいです。3、4、5、8のときがαで考えても23以下であるということを言わないといけません。
LUMOさん、わたり方の可能性が2通りしかないということの証明おみごとです。この部分は絶対必要で、私が答えてほしかった部分の一つです。Aが必ず1回入って、あとは、Bを入れるかどうかで、ぐちゃぐちゃやってると2通りしかないことがわかります。LUMOさんの例を参考にしてください。一般化した最小値と最大値の式も完璧です。[ ]の中は、割り切れなかったときは切り捨てですね。考え方のかけらだけ、教えてもらえるとうれしいな。
私の考えたのは、どんな場合でも絶対、最小値はαの行き方、最大値はβの行き方になるというところがみそです。だから、両方考えなくてもいいんです。もうちょっとしたら、私の解答を出します。
始めた時点でわからない場合、ちょっと考え違いしてました(どれが速くて、どれが遅いかはわかると思ってたけど、それもわからないんですね)。考え直します。ごめんなさい。
natsu (2004/08/06(Fri) 00:45:15)
始めた時点でまったくわからない場合、47分になりました(最大の場合)。LUMOさんと1分違うなあ。
ちなみに速さの順番だけがわかっているときには、最小16分、最大23分となり、最初の問題と同じになります。
奥が深いです(汗)
世奈 (2004/08/06(Fri) 21:49:24)
上にあげておきます。済じゃないみたいなので(´∀`;
LUMO (2004/08/06(Fri) 21:56:20)
私の解き方は書いた本人ですら読み返したくないほど
()と[ ]だらけの数式が入り乱れてぐちゃぐちゃになってます(汗
はっきり言って力技なので、もっとスマートな解き方があるのではないかと思います。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Apolloさんの表記にならって、
方法α:S=A+3B+D=T+2B−C
方法β:S=2A+B+C+D=T+A
(ただし、T=A+B+C+D)
とします。
方法αでの最大値と最小値、および方法βでの最大値と最小値を求めます。
この辺の考え方はApolloさんと同じなので省略します。
方法α:
S(最小)=T−[T/2]+6
S(最大)=T+[(T−4)/3]−1
方法β:
S(最小)=T+1
S(最大)=T+[(T−6)/4]
ここで各方法での最大最小を比較するのですが、
[ ]がついたままでは式の整理ができないので、ちょっと怪しい方法を採ります。
x≧yであれば[x]≧[y]である。逆もまた然り。故にx≧y⇔[x]≧[y]である。(うーん怪しい
これを使って式をこねくりまわしていると(この辺も省略)、
T≧10の範囲で最小値は方法α≦方法β、最大値は方法α≧方法βとなります。
(Tの定義から常にT≧10なので問題なし)
この時点で
最小値=T−[T/2]+6
最大値=T+[(T−6)/4]
ということになります。
私が先に書いた「結果」というのはこれのことですがまだ終わりではありません。
『方法βで最大値になる組み合わせの中に、方法αではそれより小さい値にならない場合がある』
ということを示す必要があります。とりあえず方法αでの最大値と比較しました。
方法αでSを最大にするのですから、Bを最大に、Cを最小にします。
ただしA=[(T−6)/4]が確定しています。ここが先の「最大値の比較」とは違う点です。
[(T−6)/4]+B+(B+1)+(B+2)≦A+B+C+D=T
⇔ [(T−6)/4]+3B+3≦T ⇔ B≦(T−[(T−6)/4])/3−1
Bは自然数なので、B=[(T−[(T−6)/4])/3]−1
Cの最小値はB+1ですから、C=[(T−[(T−6)/4])/3]
これを方法αの時間を求める式に代入すると、
S=T+[(T−[(T−6)/4])/3]−2
あとはこの値がT+[(T−6)/4]以上であることを示せば完了です。
T+[(T−6)/4]≦T+[(T−[(T−6)/4])/3]−2
⇔(T−6)/4≦(T−[(T−6)/4])/3−2
⇔3T−18≦4T−4[(T−6)/4]−24
⇔(T−6)/4≧[(T−6)/4]
[ ]の定義よりx≧[x]ですから、最後の式は常に成り立ちます。
これで晴れて最大値はT+[(T−6)/4]である、と言えるようになりました。
改めて解答です。
最小値=T−[T/2]+6
最大値=T+[(T−6)/4]
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
おつかれさまでした〜。
natsu (2004/08/07(Sat) 01:02:29)
LUMOさん。ありがとうございます。完璧です。
>『方法βで最大値になる組み合わせの中に、方法αではそれより小さい値にならない場合がある』ということを示す必要があります。
ここが、ポイントですよね。すばらしいです。
私は、そこをもう少し簡単に次のように考えました。
方法α:Sα=A+3B+D=T+2B−C
方法β:Sβ=2A+B+C+D=T+A
は同じです。ここで、B−A=a、C−B=bと差を考えました。a,bは1以上です。
Sα=T+A+a−b、Sβ=T+Aとなります。
最小値は、SαとSβの小さい方ですから。Aを小さく、aを小さく、bを大きくとればいいことがわかります。このときSαが最小値となります。この例では、A=1、a=1(B=2),bを最大にすなわち、Cをできるだけ大きくかつD≧C+1ということになります。
T=A+B+C+D≧1+2+C+C+1→(T/2)−2≧C → C=[T/2]−2
最小値は、Sα=T+2B−C=T+4−([T/2]−2)=T−[T/2]+6
最大値は、SαとSβの小さい方でかつなるべく大きくするということです。従って、Aを大きくかつa−b≧0ととれば、必ず、Sβが最大値となります。(『方法βで最大値になる組み合わせの中に、方法αではそれより小さい値にならない場合がある』ということを簡単に示しました。)B≧A+1、C≧A+2、D≧A+3より
T≧A+A+1+A+2+A+3=4A+6 → (T−6)/4≧A
Aをおおきくとるので、A=[(T−6)/4]
よって、最大値=T+[(T−6)/4]です。
世奈さん、あげてくれてありがと。
全くわからない場合は、次のようになります。
最初にわたったのが運悪く?1とDで、時間はD
次に、帰りも運悪くDに乗って帰ってしまったんで、またD。
次に、Dは避けて、?2と?3で、時間は?2
帰りは、?1で、時間は?1
最後は、Dと?1で、時間は、D
従って、3回Dと1回?1、1回?2で、最悪の場合は、3D+C+B
この場合、D=14、C=3,B=2,A=1が最大なので、
47分です。いかがでしょうか。
ちょっと、ここで問題なのは、
他のケースとして、
最初に(AまたはB)とC
次にC
次に?1と?2とするかCと?1とするか勝負のしどころです。
ここで、最悪のケースは、?1=Dです。
ここで、どちらにしても、最初の(AまたはB)を選べばいいので、
Dは、1回ですみます。よって、最大にはなりません。
よろしいでしょうか。とりあえず、済みにはしません。
ほんとにありがとうございました。また、おつかれさまでした。
LUMO (2004/08/07(Sat) 14:37:11)
>ここで、B−A=a、C−B=bと差を考えました。
>Sα=T+A+a−b、Sβ=T+Aとなります。
なるほど。スマートな解き方とはまさにこのことですか。
Sβの最小値はAが最小のとき。
Sαはさらにa−b≦0となるときにそれ以下の値になる。
→最小値はSα
Sβの最大値はAが最大のとき。
Sαはさらにa−b≧0となるときにそれ以上の値になる。(というか、なってしまう)
→最大値はSβ
あとはSαの最小値とSβの最大値を導くだけ、と。
>両方考えなくてもいいんです。
これってどうやるんだろうと不思議に思ってましたが、まさにその通りでしたね。お見事です。
続いて全くわからない場合の話。おそらくnatsuさんのが正解です。
私は向こう岸に?1、?2、?3がある時に、どれが一番速く戻れるボートかわからないので
えいやっと決めたらCだった、として考えてました。(トータル2C+2Dになります)
>次に、Dは避けて、?2と?3で、時間は?2
この時点で持ってきた2つのどちらかがCだと気づくわけですね。
そこで最悪でもBである?1を使って戻れば良いと。
natsuさんの解答は良ければ46分、悪くて47分ですが、
私の解答は良ければ46分、悪ければ48分です。
えいやっと決めたらいけませんね(^^;
natsu (2004/08/07(Sat) 23:43:09)
LUMOさん、どうもありがとうございました。一般的に考えていただいて、大変勉強になりました。(実は、最初は、一般的には考えていませんでした。)
また、この問題は、Apolloさんの解き方で、一番速い船を使いまくるか。遅い二つの船を一緒に運んでしまうかの2通りを比較して行くというのが一番いいかなと思います。
ではまた。
※ 問題中に使用されている人名、地域名、会社名、組織名、製品名、イベントなどは架空のものであり、実在に存在するものを示すものではありません。