仕事に効くコンピュータサイエンス
積む・並ぶ・引く — データ構造読了目安 10分

積む・並ぶ・引く — データ構造という整理術

机の上に書類の山があります。上から順に手を付けると、下のほうにある古い依頼はいつまでも触れません。一方で受付窓口の列は、先に並んだ人から順に対応するのが普通です。同じ「たまった仕事」でも、扱い方の型が違います。なぜ違う型が必要なのでしょうか。このページでは、その違いを整理する入口を作ります。

「たまったもの」には型がある

仕事が増えると、たいてい何かが「たまり」ます。未読メール、依頼の列、資料の束、確認待ちの申請書。これらを雑に「タスク」とひとくくりにすると、扱い方を誤ります。たまり方には少なくとも3つの型があります

1つ目は、後から来たものを先に処理する型です。会議中に急ぎの電話が入り、電話を終えたらまた会議に戻る。戻る順番は「最後に中断したところ」からです。これは日常でごく自然にやっていることですが、コンピュータの世界ではスタックという名前がついた、はっきりした構造として扱われます。積み上げた本の山から本を取るとき、いちばん上から取るのが自然なのと同じ発想です。

2つ目は、来た順に処理する型です。問い合わせ窓口、順番待ちのチケット、依頼フォームの受付。先に来た人を後回しにすると不公平です。これはキューという構造に対応します。行列の先頭から順にさばく、あの窓口の動きそのものです。

3つ目は、来た順ではなく重要度で処理する型です。締切が近い依頼を、あとから来ても先に処理する。これは優先度付きキューという、来た順を無視して並べ替える構造です。救急外来のトリアージが分かりやすい例で、受付順ではなく緊急度順に呼ばれます。

さらに、たまったものを「探す」局面もあります。過去の資料の中から必要な1件を見つけ出す。毎回全部を見返していては時間がかかります。ここには索引という、探さずに引き当てる仕組みが関わります。辞書に見出しがあるおかげで、最初のページから順に読まなくても目的の語にたどり着けるのと同じです。

そして、たまったものが単純な列ではなく、枝分かれした構造を持つこともあります。組織図、フォルダの階層、議事のアジェンダ。これらは木構造と呼ばれる形で整理されています。上位から下位へ枝分かれしていく形は、家系図を思い浮かべると直感的です。

なぜコンピュータ科学で「構造」を教えるのか

コンピュータ科学の授業では、これらを「データ構造」という単元でまとめて学びます。最初に聞くと、プログラムを書く人だけに関係する話に思えるかもしれません。しかし実態は逆です。データ構造とは「たまったものをどう並べ、どう取り出すか」という設計の型そのものです。プログラムの世界でも、同じ量のデータでも構造の選び方ひとつで処理の速さが大きく変わります。これは仕事の現場での「同じ量の仕事でも、並べ方ひとつで進み方が変わる」という感覚と、そのまま重なります。

仕事の現場でも、私たちは無意識にこれらの型を選んでいます。ただし無意識であるがゆえに、型を誤って選んでいることがあります。たとえば、本来は来た順に処理すべき依頼を、声の大きい人や目についた案件から処理してしまう。これは無自覚にスタック的な扱いをしてしまっている例です。逆に、明らかに優先度が違う仕事を来た順に並べて処理してしまい、締切間近の案件が列の後ろで待たされることもあります。どちらも「悪気があって」起きるわけではなく、そのときどきの目についた仕事を反射的に拾っているだけです。型を意識していないと、反射的な拾い方がそのまま仕事の順番を決めてしまいます。

型を意識して選べるようになると、同じ量の仕事でも「詰まる」感覚が減ります。詰まりの多くは、仕事の量そのものではなく、並べ方の選択ミスから生まれているからです。量そのものを減らすのは簡単ではありませんが、並べ方を変える工夫は今日からでも試せます。

具体的な場面で見比べる

もう少し具体的な場面で3つの型を見比べてみます。

ある担当者が、上司から急ぎの資料作成を頼まれたとします。手元には昨日から続けている別の作業がありました。急ぎの依頼を受けたら、いったん今の作業を脇に置き、急ぎの資料を仕上げてから、脇に置いた作業に戻る。このとき「どこまでやったか」を覚えておく必要があります。戻る場所を正しく思い出せないと、作業をやり直す羽目になります。これがスタックの扱いにくさです。積み重ねが深くなるほど、いちばん下にあった仕事に戻るまでの道のりが長くなり、戻ったころには状況が変わっていることさえあります。

一方、問い合わせ対応の窓口では、先着順が原則です。3件目に来た問い合わせを先に片付けて、1件目を後回しにすると、1件目の相手は「なぜ自分だけ待たされるのか」と不満を持ちます。来た順を守ることそのものが、相手との信頼関係を保つ手段になっています。この型では、追い越しを許さないことが価値の源泉です。

さらに、病院の受付を思い浮かべてください。受付順ではなく、症状の重さで呼ばれる順番が決まります。先に来ていた人よりあとに来た人が先に呼ばれることもあります。これは不公平に見えて、実は「命に関わる順」という別の基準に切り替えているだけです。仕事の現場でも、締切や影響範囲の大きさで基準を切り替える場面は多くあります。基準を切り替えたなら、なぜ切り替えたのかを周囲に説明できることが、納得感を保つうえで欠かせません。

この章で扱う4つの視点

この章では、次の4つの視点を順番に見ていきます。

まず、割り込み仕事に向いたスタックと、順番仕事に向いたキューを対比します。2つの構造は仕組みとしては単純ですが、どちらを選ぶかで「誰が待たされるか」が真逆になります。次に、来た順ではなく重要度で並べる優先度付きキューを見ます。締切や重要度をどう数値化して並べ替えるかという、実務でつまずきやすい点も扱います。そのあとで、探さずに引き当てる索引の考え方を扱います。ファイル名や資料の置き場所を工夫するだけで、探す時間そのものをなくせるという話です。最後に、階層を持つものを整理する木構造を見て、組織やフォルダの設計に橋渡しします。

いずれも、コンピュータの中では「データをどう保持すれば、あとの操作が速く済むか」という効率の問題として設計されています。仕事の言葉に置き換えると、「たまったものをどう保持すれば、あとで困らないか」という整理の問題になります。形は違えど、問いの構造はよく似ています。

どの構造にも得意・不得意がある

ここで先回りして断っておきたいことがあります。この4つの構造のうち、どれか1つが「正解」で残りが「間違い」というわけではありません。スタックが向く場面、キューが向く場面、優先度で並べ替えるべき場面は、それぞれ別にあります。

たとえば、割り込みの多い技術サポート業務では、最後に受けた依頼から手を付けるスタック的な進め方が、実は合理的なこともあります。直前の依頼ほど状況が記憶に新しく、確認の手間が少なくて済むからです。一方で、公平さや透明性が問われる窓口業務では、来た順を守るキューでなければ信頼を損ないます。つまり「どの構造を選ぶか」は好みの問題ではなく、その仕事が何を優先しているかで決まります。優先しているものが「対応の速さ」なのか「公平さ」なのか「重要度への感度」なのかを、先に決めてから構造を選ぶ、という順番が大切です。

型を選び間違えると起きること

型の選択を誤ったときに起きる典型的な症状を、先に一言でまとめておきます。

来た順の依頼を割り込み型で扱うと、古い依頼がいつまでも処理されず、依頼主の信頼を失います。「言った者勝ち」「声の大きい人優先」という空気が生まれるのも、多くはこの型のずれが原因です。重要な仕事を来た順の型で扱うと、些末な仕事に埋もれて締切に間に合わなくなります。毎回全部を見返して探す型のまま資料が増え続けると、探す時間だけがどんどん伸びていきます。半年前は5分で見つかった資料が、今は15分かかる、というのはよくある話です。階層のあるものを1枚のフラットな一覧として扱うと、全体の構造が見えなくなり、似たものを二重に作ってしまう、担当の重複や抜け漏れに気づかない、といったことが起こります。

これらはどれも「仕事の能力が足りない」から起きるのではありません。たまったものの性質に合わない構造を選んでいるから起きます。逆に言えば、構造を選び直すだけで、同じ人・同じ仕事量のまま詰まりが解消することがあります

構造は目に見えないぶん、放置されやすい

机の上の書類の山は目に見えます。しかし、頭の中や共有フォルダの中にたまった仕事の並び方は、目に見えません。見えないものは点検されにくく、いったん悪い並び方が定着すると、誰も疑わずに使い続けてしまいます。「うちのチームは昔からこの順番で回している」という説明は、その順番がそもそも今の仕事の性質に合っているかを問い直していないことがほとんどです。

この章の狙いは、目に見えない並び方に名前を与え、点検できるようにすることです。名前がつくと「これはスタック的な扱いになっていないか」「本当は優先度付きキューにすべきではないか」と、具体的に問い直せるようになります。次のページから、それぞれの構造を1つずつ、仕事の場面に置き換えて見ていきます。

読み進め方

このあとの4ページは、それぞれ独立した1つの構造を扱います。p2ではスタックとキューを対比させ、割り込み仕事と順番仕事の違いを扱います。p3では優先度付きキューを扱い、締切や重要度をどう並べ替えの基準にするかを見ます。p4では索引を扱い、探す時間そのものをなくす工夫を見ます。p5では木構造を扱い、組織やフォルダのような枝分かれした情報の整理を見ます。どのページも「CS概念の直感」「仕事への翻訳」「具体場面」「落とし穴」という同じ流れで進みます。飛ばし読みをしても構いませんが、順番に読むと、前のページで得た見方が次のページの理解を助けます。

持ち帰り

  • たまった仕事には「後から先に処理する」「来た順に処理する」「重要度で処理する」という異なる型がある
  • 型を誤って選ぶと、仕事量が変わらなくても「詰まる」感覚が生まれる
  • この章ではスタック・キュー・優先度付きキュー・索引・木構造を仕事の場面で見ていく

やってみる

今日たまっているタスクを1つ選び、それが「割り込み型」「来た順型」「重要度型」のどれで扱われるべきかを、処理する前に1分だけ考えてみてください。