仕事に効くコンピュータサイエンス
大きい問題を小さく割る — アルゴリズム設計読了目安 10分

分けてから合わせる — 分割統治

三十ページの企画書を一人でチェックするのと、三人で十ページずつ分担してチェックするのと、どちらが早く終わるでしょうか。単純に三分の一の時間で終わりそうに思えますが、実際には最後にひとつの文書へまとめ直す作業が発生します。まとめ直す作業に手間取ると、分担した意味が薄れ、結局一人でやり直したほうが早かった、ということも起こります。このページの問いは、分けて合わせるというやり方が、いつ得でいつ損になるのか、です。

分割統治とは何か

分割統治とは、大きな問題を同じ形をした小さな問題にいくつか分割し、それぞれを解いたあとで結果を組み合わせて全体の答えを得る考え方です。コンピュータの世界では、大量のデータを並べ替える処理や、大きな数の掛け算などで使われています。たとえば大量の伝票を金額順に並べる作業を考えます。全体を一度に並べ替えるのではなく、半分ずつに分けてそれぞれを並べ替え、最後に二つの並んだ束を突き合わせながらひとつにまとめる、という手順を踏みます。分けた束はさらに半分に分けられるので、最終的にはごく少数の伝票の束を並べ替える作業まで小さくなります。

ここで大事なのは二つの条件です。ひとつは、分けた部分が互いにほぼ独立して解けること。もうひとつは、分けて解いた結果を、最後に無理なく組み合わせられることです。この二つがそろって初めて、分割統治は効果を発揮します。片方でも欠けると、分けた意味がなくなるか、最後の組み立てで余計な手間がかかるかのどちらかになります。

伝票の並べ替えの例をもう少し追うと、この考え方の強さが見えてきます。仮に千枚の伝票があるとすると、一人で先頭から順に並べる位置を探していく方法では、枚数が増えるほど確認する組み合わせが急に増えていきます。ところが半分ずつに割って並べ替え、最後に二つの束を突き合わせる方法なら、割る回数が増えても各段階の作業は単純な比較の繰り返しで済みます。大きな問題をひとつの塊のまま扱おうとすることが、実は一番効率の悪いやり方だという点は、5章で見た計算量の考え方に通じます。

仕事の言葉に訳すと

仕事の場面に置き換えると、分割統治とは「大きな仕事を、独立して進められる部分に切り分け、それぞれを別々に片付けてから、最後にひとつにまとめる」という進め方になります。ポイントは「独立して進められる」という条件です。ある部分の作業結果が別の部分の前提になっているなら、それは独立していません。その場合は先に片方を終わらせてから次に進む必要があり、並行して進める分割統治の利点が薄れます。

独立しているかどうかを見極める簡単な方法は、「この部分だけを他の人に渡して、途中経過を聞かずに進めてもらえるか」を自問することです。答えが「いいえ」であれば、その部分は他のどこかに依存しています。依存先を先に洗い出してから分担を決めると、あとから「実はこの二つは同時に決めないといけなかった」という手戻りを防げます。

分割統治が特に効くのは、参加できる人手が複数いる場面です。一人で三十ページを見るより、三人で十ページずつ見るほうが速いのは、各自が独立して読める前提があるからです。逆に一人しかいない場合でも、分割統治には意味があります。三十ページを一気に見ようとすると集中力が続きませんが、十ページずつ三回に分けて見れば、各回で扱う範囲が明確になり、抜け漏れの点検もしやすくなります。

人手が複数いる場合と一人の場合とでは、分割統治から得られる利益の種類が違うことにも注意が必要です。複数人なら作業を並行して進められるので、かかる時間そのものが短くなります。一人の場合は時間そのものは変わりませんが、扱う範囲が小さくなることで一度に抱える情報量が減り、間違いに気づきやすくなります。どちらの利益を狙っているのかを意識しておくと、分け方の粒度も判断しやすくなります。

具体的な場面で見る

分割統治の流れを図にすると、次のようになります。大きな仕事をいったん複数の部分に分け、それぞれを別々に解いてから、最後にひとつへ合わせます。

大きな仕事 分ける 部分Aを解く 部分Bを解く 合わせる 統合して完成

分けるところまでは誰でも思いつきますが、実務でつまずくのは合わせる側です。図の下半分、つまり統合の設計をどこまで具体的に決めておけるかが、分割統治がうまくいくかどうかを左右します。

まず資料チェックの場面です。三十ページの企画書を三人で分担する場合、章立てに沿って十ページずつ担当を割り振ります。各自がコメントを書き込んだあと、最後に一人がとりまとめ役になり、全員のコメントに矛盾がないか、同じ指摘が重複していないかを確認しながら統合します。この統合作業を最初から見積もりに入れておかないと、「分担したのに、まとめる人だけ最後に徹夜する」という事態が起こります。分割統治の見積もりには、分ける作業だけでなく、合わせる作業の時間も必ず含める必要があります

次に、複数拠点の売上集計です。本社が全拠点の伝票を一枚ずつ集計するのではなく、各拠点でまず自拠点の合計を出してもらい、本社はその拠点別合計を受け取って足し合わせるだけにします。これも分割統治の一種です。各拠点の集計はほかの拠点の状況に関わらず進められるため、独立性の条件を満たしています。本社側の作業は、拠点別の合計を集めて足すだけという単純な統合作業に縮小されます。

三つめは、業務マニュアルの作成です。ひとつの大きな業務マニュアルを、機能ごとに複数の担当者へ割り振って執筆してもらいます。「問い合わせ受付」「見積作成」「請求処理」というように、業務の切れ目に沿って分けると、担当者同士のやり取りが少なくて済みます。最後に全員分の原稿を集め、目次と用語の使い方をそろえて一冊に統合します。この統合作業を担当する人を最初から決めておくことが、成功の分かれ目になります。

落とし穴 — 分け方を間違えると高くつく

分割統治の落とし穴は、分割の境界を業務の実態と合わない場所に引いてしまうことです。先ほどの業務マニュアルの例で、もし「問い合わせ受付」の手順の中に「見積作成」への引き継ぎ判断が含まれているなら、この二つの担当を完全に切り離すことはできません。境界をまたぐ判断が残ったまま別々の担当者に割り振ると、両者の原稿に矛盾が生じ、統合の段階で書き直しが発生します。分けた部分がじつは独立していなかった、というケースです。

もうひとつの落とし穴は、統合コストを甘く見積もることです。三人で分担した資料チェックで、各自の指摘の書き方や粒度がばらばらだと、統合担当者は単純に集めるだけでなく、表現をそろえる作業まで引き受けることになります。分ける前に、指摘の書き方や粒度についてひとこと申し合わせておくだけで、統合の手間は大きく減ります。

三つめの落とし穴は、分ける粒度そのものを誤ることです。三十ページを三人で分けるのは適切でも、三十ページを三十人に一ページずつ配るとどうなるでしょうか。担当者一人あたりの作業は一瞬で終わりますが、三十人分の指摘を統合する担当者の負担が跳ね上がります。分割統治は、分ける数を増やせば増やすほど速くなるわけではありません。分ける手間と統合する手間の釣り合いが取れる粒度を探す必要があります。分割統治は「分ければ速くなる」という単純な話ではなく、「独立させられる形に、釣り合いの取れた粒度で分け、統合の手順まで決めておいて、初めて速くなる」という考え方です。分けることだけに気を取られると、この統合の設計が抜け落ちてしまいます。

持ち帰り

  • 分割統治は、独立して解ける部分に分け、最後に結果を組み合わせる考え方です。
  • 分ける作業だけでなく、合わせる作業の時間も見積もりに含める必要があります。
  • 部分同士に依存関係が残っていると、分割の効果は薄れ、統合で手戻りが起きます。

やってみる

今取り組んでいる仕事をひとつ選び、独立して進められる部分がどこにあるかを探し、最後に誰がどう統合するかまで決めてから着手してみてください。