戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2024年 午前203


問題文

関係データベースのテーブルにレコードを1件追加したところ、インデックスとして使う木のリーフノードCがノードC1とC2に分割された。ノード分割後の木構造はどれか。ここで、矢印はノードへのポインタとする。また、中間ノードAには十分な空きがあるものとする。
データベーススペシャリスト 2024年 午前2 問03の問題画像データベーススペシャリスト 2024年 午前2 問03の選択肢の画像

選択肢

(正解)

🔒 解説は解答すると表示されます

B+木リーフ分割【午前2解説】

正解の理由

リーフノードが分割されると、分割後の2つのリーフは同じレベルに残り、隣接するリーフ間は双方向の兄弟ポインタで連結されます。分割によって生じた新しいリーフへ親ノードは新たな子ポインタ(と対応する区切りキー)を追加する必要があります。問題で「中間ノードAには十分な空きがある」とあるため、Aは追加の子ポインタを単純に受け入れられます。したがって、Aの子ポインタは左から順に B, C1, C2, D となり、リーフ間の双方向リンクも B ⇔ C1 ⇔ C2 ⇔ D となる構成が妥当です。これに一致するのが選択肢 です。

解法ステップ

  1. B+木の性質を確認:リーフは同一レベルにあり、隣接リーフ間は双方向の兄弟ポインタでつながれている。
  2. リーフ分割の結果:元のリーフCはC1とC2に分かれる。分割後は両者とも同じレベルに存在する。
  3. 親ノード処理:親Aに空きがあるなら、分割で生じた新しいリーフ(C2)へのポインタをAに挿入し、子ポインタの並びはキー順に並べる。
  4. 正しい構成と図を照合:Aのポインタ数が増え、リーフの双方向リンクが整合している選択肢を選ぶ(これが )。

選択肢別の誤答解説

  • ア:誤り。図示されたアでは親Aから出ているポインタが B、C1、C2 の3つしかない一方、葉レベルには B, C1, C2, D の4つのノードが存在します。つまりAがDを指していないため、子ポインタ数が不足しておりB+木の整合性を満たしません。葉の双方向リンクだけ整っていても、親が全ての葉を指していない構成は不正です。
  • :正しい。AはB, C1, C2, Dの順で子ポインタを持ち、葉は B ⇔ C1 ⇔ C2 ⇔ D の双方向リンクで接続されています。Aに空きがある条件とも整合します。
  • ウ:誤り。Aの子ポインタ順が B, C1, D, C2 となっており、葉順序と親のポインタ順が一致していません。B+木では内部ノードのポインタは葉の順序と一致させる必要があり、キー順を乱すこの配置は不正です。
  • エ:誤り。C2がC1の下(下位の子)として描かれており、葉ノードが同一レベルにない構成になっています。B+木ではすべての葉が同一レベルであり、分割後の新しいリーフは親の隣接ポインタとして扱われるため、縦接続は誤りです。また親AはC2を直接指していないためポインタ不整合も発生します。

よくある誤解

  • 親ノードは「古いCを指すポインタを更新すればよいだけ」と考える誤り:新しいリーフができたら親に新しい子ポインタを追加(または再配置)する必要があり、単に片方を上書きするだけでは子ポインタ数が合わなくなる場合がある。
  • リーフのつながり(兄弟ポインタ)と親の子ポインタを混同する誤解:葉の双方向リンクは範囲検索のためのもので、親のポインタ並びはキー順序に一致していなければならない。両者は別の仕組みで保持される。
  • 分割後の新しいノードを「親の子ではなく子の子にする」誤り:リーフ分割で生成されるノードは同じレベルのリーフであり、親の直接の子になる。

補足コラム

  • 分割時のキー昇格:リーフを分割すると、通常は右側ノードの最小キーを親に挿入して区切りにします。内部ノードは区切りキーのみを保持し、データ本体はリーフに残ります。
  • 内部ノードのポインタ数とキー数の関係:内部ノードが持つキー数を とすると、ポインタ数は です。分割により葉が1つ増えれば親のポインタ数も1増えます。
  • 親が満杯だった場合:親に空きがないときは親自体を分割し、分割で上位ノードへキーを昇格させる処理が再帰的に発生します。最終的に根が分割されると木の高さが1増えます。

FAQ

Q. 親に空きがなければどうなる?
A. 親を分割して新たな区切りキーを上位に昇格させる。これが再帰的に発生し得る。根が分割されれば新しい根が作られ木高が増える。
Q. リーフの双方向ポインタは必須か?
A. 実装によるが、範囲検索(レンジクエリ)を効率化するため通常は双方向リンクを持つ。これにより隣接リーフへ定数時間で移れる。
Q. 分割時にどちら側に何個のキーを残すかはどう決まる?
A. 通常はほぼ半分に分けるが、実装や最小充足条件により左に ⌈n/2⌉、右に ⌊n/2⌋ のように決定される。

関連キーワード: B+木、リーフ分割、兄弟ポインタ、ノード分裂、中間ノード、キー昇格、ポインタ数、範囲検索
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について