仕事に効くコンピュータサイエンス
頑張りはスケールしない — 計算量読了目安 10分

先に整えておく価値 — 前処理とソート済みという資産

顧客からの問い合わせに対応するとき、過去のやり取りを1件ずつ遡って探した経験はないでしょうか。件数が少ないうちは苦になりませんが、件数が増えるほど、探す作業そのものが仕事の大半を占めていきます。

「前にも似た問い合わせがあった気がするけど、どこに記録したっけ」。こうつぶやきながらメールの受信箱を遡る時間は、対応そのものより長くなることさえあります。これは前ページまでで見た線形の増え方(O(n))そのものであり、件数が増えるほど確実に重くなっていきます。

このページの問いは、探す作業そのものを軽くする方法はあるかです。答えの1つが、あらかじめ整えておくという発想、前処理です。

「探す作業自体をなくせないか」という視点は、多くの職場で見落とされがちです。探すのが遅い担当者を責める前に、そもそも探しやすい状態が用意されているかを確認する価値があります。「探すのが遅い」という評価は、実は本人の能力ではなく、整理されていない環境のせいであることが少なくありません。

探す作業の増え方

整理されていないリストから、条件に合う1件を探すとします。最悪の場合、リストの端から端まで1件ずつ確認することになります。これは前ページで見た線形の増え方(O(n))です。件数が2倍になれば、探す手間も2倍になります。

「探しているものが見つかるまで、上から順に見ていく」という探し方を、専門的には線形探索と呼びます。特別な工夫をしない限り、探す手間は件数にそのまま比例し、データが増え続ける限り際限なく重くなっていきます。

一方、あらかじめ条件順に並べておいたリストなら話が変わります。真ん中を確認し、目当ての条件より大きいか小さいかで探す範囲を半分に絞り、また真ん中を確認する。これを繰り返すと、件数が2倍になっても、確認の回数は1回増えるだけで済みます。並び替えておくだけで、探す作業の増え方の型そのものが変わるのです。

手順を具体的に追ってみます。100件の顧客リストから、特定の1件を探すとします。日付順に並んでいれば、まず50件目を確認し、探している顧客がそれより前か後かを判断します。範囲を50件に絞り込んだら、また真ん中の25件目を確認します。これを繰り返すと、7回ほどの確認で1件に絞り込めます。並んでいなければ、最悪100回確認することになります。件数が1000件に増えても、並んでいれば10回程度の確認で済みます。探す手間が、件数の増加よりずっと緩やかにしか増えないのです。

前処理という考え方

これが前処理の考え方です。前処理とは、実際の作業に入る前に、データや資料をあらかじめ整えておくことで、後の作業を軽くする工夫を指します。

重要なのは、前処理そのものにも手間がかかるという点です。並び替えには一定の時間が必要です。しかし、その手間は1回で済みます。一方、探す作業は何度も繰り返されます。1回の前処理で、その後の何十回・何百回もの探す作業が軽くなるなら、投資として十分に見合います。

段階を追って整理すると、前処理には2つの手間があります。1つ目は「整える手間」、2つ目は「整った状態を保つ手間」です。1回並び替えて終わりではなく、新しいデータが増えるたびに正しい位置に挿入する作業が必要になります。この維持の手間を忘れると、前処理は「やっただけ」で終わってしまいます。

「今は忙しいから、整理は後回しにしよう」という判断もよく聞きます。この判断自体が間違っているわけではありません。問題は、後回しにした整理をいつまでも実行しないことです。探す手間が繰り返し発生している自覚があるなら、後回しにするたびに、その分の手間を払い続けていることになります。

具体場面1: 問い合わせ対応のFAQ整備

問い合わせが来るたびに、過去の対応記録を1件ずつ遡って似た事例を探しているなら、それは前処理をしていない状態です。よくある質問と回答をあらかじめ整理し、カテゴリ別に並べておけば、次に似た問い合わせが来たときの対応時間は大きく縮まります。

具体的な手順を考えてみましょう。まず過去の対応記録を「料金」「使い方」「不具合」といったカテゴリに仕分けます。次に、各カテゴリの中でよくある質問を上位から並べます。新しい問い合わせが来たら、担当者はまずカテゴリを判定し、そのカテゴリの上位から該当する回答を探すだけで済みます。

整備そのものには時間がかかりますが、問い合わせは繰り返し発生します。1回の整備で、その後の対応すべてが軽くなると考えれば、前処理の価値が見えてきます。逆に、整理を後回しにし続けると、担当者ごとに答えがばらつくという副作用も生まれます。整えておくことは、対応時間だけでなく、回答の一貫性という点でも効いてきます。

「どのカテゴリにも当てはまらない問い合わせはどうするのか」という疑問もあるでしょう。そうした例外は、無理に既存のカテゴリへ押し込まず、「その他」として別に集めておきます。その他の件数が増えてきたら、そこから新しいカテゴリを切り出す。これも維持の手間の一部です。

具体場面2: 顧客リストを条件でソートしておく

営業先の候補リストを、優先度や地域といった条件であらかじめ並べておくとします。何もしていない状態では、優先度の高い顧客を探すたびにリスト全体を見返す必要があります。

条件順に並べておけば、上から順に見ていくだけで優先度の高い顧客にすぐたどり着けます。並び替えという1回の作業が、その後の営業活動全体の効率を左右します。

たとえば、月曜の朝にその週の営業先を決める場面を思い浮かべてください。並んでいないリストなら、担当者は全件に目を通して優先度を判断し直します。並んでいるリストなら、上位10件をそのまま今週の訪問先として使えます。この差は、リストを見る回数が多い担当者ほど、積み重なって大きくなります。

ここでも維持の手間は残ります。新しい顧客が加わったとき、リストの末尾に追記するだけでは順序が崩れます。優先度を評価してから正しい位置に挿入する、という一手間を怠らないことが、並び替えの効果を保ち続ける条件です。

具体場面3: 会議資料のフォーマットを揃えておく

毎回異なる形式で作られる報告資料は、読む側が必要な情報を探すたびに時間がかかります。あらかじめ共通のフォーマットを決めておけば、どこに何が書いてあるかを探す手間そのものがなくなります。

フォーマットを決める作業も一種の前処理です。最初に整える手間をかけることで、以降のすべての報告と確認が軽くなります。

会議の場面で言えば、こういう違いです。フォーマットが揃っていない資料では、上司が「進捗はどこに書いてある」「課題は」と、資料ごとに探す場所が変わります。フォーマットが揃っていれば、「進捗は右上、課題は下段」と決まっているので、探す作業自体が発生しません。読む側の負担を減らすという意味でも、前処理は効いてきます。

フォーマットを決める前処理は、書く側の作業を一瞬減らすものではありません。むしろ書く側は最初、決められた枠に情報を当てはめる手間を感じるかもしれません。しかし、その報告を読む人数や回数が多いほど、読む側全体で見た手間の削減は、書く側の手間を上回ります。前処理は「誰にとっての手間が減るのか」まで含めて考えると、価値の見え方が変わります。

前処理の価値を測る考え方

前処理に投資すべきかどうかは、次の2つを比べて考えます。

  • 前処理にかかる一度きりの手間
  • 前処理をしない場合に、繰り返し発生する探す手間の合計

繰り返しの回数が多いほど、前処理の価値は大きくなります。逆に、1度しか使わないデータをわざわざ整理するのは、手間が見合わないこともあります。

数字で考えてみましょう。整理に30分かかるとして、整理しない場合に毎回5分余計にかかるとします。6回使えば整理の手間と釣り合い、7回目以降は整理したほうが得になります。1回しか使わない資料であれば、30分かけて整理するより、そのまま5分余計にかけて探すほうが合理的です。「整理すべきかどうか」は、精神論ではなく、この損益分岐点で判断できます。

この考え方は、線形の探索と、整理してから探す方法との比較にも当てはまります。1件あたりの節約が小さくても、参照回数が十分に多ければ、積み重なった節約は前処理の手間を追い抜きます。逆に、参照回数が少ないと分かっているものにまで前処理を求めるのは、やりすぎです。

判断に迷ったら、「このデータや資料は、今後何回参照する見込みか」を先に見積もる習慣が役に立ちます。見積もりが数回で終わりそうなら整理は後回しにし、何十回も参照しそうなら早めに前処理へ投資する、という切り分けが基本の指針になります。

落とし穴

前処理には2つの落とし穴があります。

1つ目は、整理そのものに時間をかけすぎることです。どれだけ美しく整理しても、その後ほとんど使わないなら、投資は回収できません。前処理は「繰り返し使われる」ことが前提であるという点を忘れてはいけません。

「せっかくやるなら完璧に整理したい」という気持ちは自然ですが、完璧さを求めるほど整理そのものの手間は膨らみます。多くの場合、探す手間を大きく減らすには、完璧な分類より「大まかなカテゴリ分け」で十分です。8割の効果を2割の手間で得られる整理から始め、必要に応じて後から精緻化するほうが、投資として見合います。

2つ目は、整えた状態を維持しないことです。ソート済みのリストに新しいデータを追加し続けると、いずれ順序が崩れます。崩れたことに気づかず「整理されているはず」と思い込んで探すと、見落としが起こります。これは4章で見たキャッシュ無効化の問題と同じ構造です。整えた状態は、更新のたびに保ち続けなければ、価値を失っていきます。

FAQの例で言えば、新しい種類の問い合わせが増えているのに、既存のカテゴリに無理やり押し込み続けると、カテゴリの境界があいまいになり、探しにくいFAQに戻ってしまいます。定期的に「今の整理の仕方は、今のデータに合っているか」を見直す機会を設けることが、前処理の価値を保ち続ける鍵です。

持ち帰り

  • 探す作業は、あらかじめ整えておくことで増え方の型そのものを変えられる
  • 前処理の価値は、それが何度繰り返し使われるかで決まる
  • 整えた状態は維持し続けなければ、いずれ崩れて価値を失う

やってみる

繰り返し「探す」作業を1つ選び、それが週に何回繰り返されているかを数え、あらかじめ並び替えておくだけで済むかを考えてみてください。