わかりやすく 問題 分割 考え方
前に、アルゴリズムは「問題を解くための決まった手順」だと話しました。でも大きな問題を前にすると、その手順がなかなか思い浮かびません。秘訣は一つです。一口に入らなければ、同じ形の小さなかけらに分けるのです。
一口に入らない
部屋をまるごと片づけなさいと言われると、途方に暮れます。
どこから手をつければいいのか、順番が思い浮かびません。
大きな問題はもともとそういうもので、一つのかたまりとして見ると、大きすぎて一口に入らないのです。
大きな問題のかたまりを押すと、小さなかけらに分かれます。部屋を片づける → 机 · ベッド · 床 · 本棚。
部屋をまるごと見ると途方に暮れたのに、机、ベッド、床、本棚に分けると、急にできそうに見えてきます。
大きな問題を解く第一歩は、まさにこれ、小さく分けることです。
同じ形の、もっと小さな問題
分けたかけらをよく見ると、おもしろいことがあります。
かけらも結局は「片づけ」なのです。部屋を片づける仕事が、机を片づける仕事に小さくなっただけです。
かけらは、もとの問題と同じ形の、もっと小さな問題です。
かけらを一つ押すと、中が見えます。その中も結局、同じ形のもっと小さな問題です。机の片づけも = 片づけ。
これがよいのは、大きな問題を解く方法さえわかれば、小さなかけらも同じ方法で解けるからです。
新しい方法を学ぶ必要はありません。
同じ形なので、使っていた方法をそのまま小さく使えばよいのです。
かけらに順番をつける
分けるだけで終わりではありません。かけらにも順番があります。
床に物が散らばっているのに床から掃くと、上から落ちてきたものでまた散らかります。
机とベッドの上を先に片づけ、最後に床を掃くのが正しい順番です。
かけらを処理する順番どおりに押します。上(机・ベッド・本棚)を先に、床を最後にすれば正解です。
順番を正しく決めると、かけらどうしがぶつかりません。
前のかけらが散らかしたものを、後のかけらがまた片づけることもなくなります。
第1回で見たとおり、同じかけらでも順番が違えば結果が違うのです。
かけらの答えを合わせる
かけらを一つずつ全部解いて、机もベッドも床もきれいになりました。
でも、かけらを解いただけで、部屋はまだ終わっていないのでは?
そうではありません。かけらが全部解ければ、それが集まって部屋がきれいになったのです。
解いたかけらを順に押すと、一つに合わさります。かけらの答えが全部そろえば、それが大きな問題の答え、つまりきれいな部屋です。
つまり、合わせることもひとりでにできるわけではありません。
かけらの答えを集めて一つにつなぐのも、れっきとした一つの段階です。
分けて、順番どおりに解いて、合わせる。これが全部そろって、はじめて大きな問題が本当に解けます。
まとめ:分ける、同じ形、順番、合わせる
大きな問題を前に途方に暮れたら、この四つの拍子を思い出してください。
一つ目、同じ形の小さなかけらに分ける。二つ目、かけらも同じ問題だと知る。
三つ目、正しい順番を決める。四つ目、かけらの答えを合わせる。
これがコンピューティング的な考え方の出発点です。
四つの拍子を順に押すと、要点がまとまります。分ける → 同じ形 → 順番 → 合わせる。大きな問題を扱うための一枚の図です。
これで、どんな大きな問題に出会ってもこわがる必要はありません。一口に入らなければ、分ければよいのですから。
ただ、かけらがいくつもあるなら、どれを先にするか、その順番がとても大切になります。
次のレッスンでは、その並べ方、つまり並べ替えを扱います。