

中嶋悟
名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝
ヒープと二分探索木の基本的な違いを知ろう
データ構造にはいくつかの木の形があり、それぞれ「何を目的に作られているか」が違います。まずヒープとは何かを知ることから始めましょう。ヒープは完全二分木と呼ばれる形で作られます。つまり木全体をできるだけ埋めていく設計です。葉の並び方は規則的ですが、木の中の要素の「並び順」が全体として整列されているわけではありません。ヒープには「最小ヒープ」と「最大ヒープ」の2種類があり、根の値はそれぞれ最小値・最大値になります。
次に二分探索木 BST についてです。二分探索木は左の子はそのノードより小さく、右の子は大きいという順序を木の中で保つ仕組みです。これにより木の中をたどっていくと任意の値を効率よく探せるという特性が生まれます。BST は正確には「順序付き木」であり、挿入・検索・削除の計算量は理想的にはO(log n)ですが、木の形が悪いと最悪でO(n)になることもあります。これを防ぐのが平衡化された BST で、代表的なものに AVL木 や Red-Black木 があります。
この二つの構造は目的が違います。ヒープは「極値を素早く取り出す」ことを重視し優先度の管理に向いています。一方の BST は「値の検索・範囲の取得・順序付きの列挙」を行う場面に適しています。この違いを押さえておくことでプログラムの設計時にどちらを使うべきかが見えてきます。
ここまでのまとめとしてヒープは極値を効率良く取り出す設計、二分探索木は値の探索と順序付き列挙を得意とする設計という点を覚えておくとよいでしょう。ヒープと BST の違いを理解するだけでプログラムの構造設計がずっと楽になります。
今日は友達とカフェでデータ構造の話をしていてヒープという言葉を深掘りしました。ヒープは memory の話とは別物で、優先度をもつ仕事を順番にこなす道具みたいなものと考えるとわかりやすい。たとえば宿題の山を朝イチに一番大事なものから順に取り出して片づけるイメージ。ヒープの「完全二分木」という形は、どこにも空白ができないようにぎっしり詰める感じ。
この感覚を友達に説明すると、「たとえばゲームのミッションを難易度順に出していく」みたいな例えが生まれ、実際のプログラム設計にも使えると気づきました。ヒープは実際には優先度の高い要素をすぐ取り出すための道具であり、その力をうまく使えば複雑なスケジュール管理やイベント処理を効率化できます。