本文へ移動

基本情報技術者試験 · 学習ガイド

整列・再帰と計算量

整列とは

整列とは、データを決まった順に並べ替える処理で、再帰や分割の仕方によって計算量が変わります。

エルくんが基準4の仕切りを置き、数値タイル2を左、6と8を右へ仕分ける図。
考え方の例:基準値4の前後へ値を分けます。一般には分けた部分にも同じ処理を繰り返します。図はこの入力例の分割を示します。

探索の前にデータを整列すると検索しやすくなりますが、整列自体にも処理時間が必要です。交換や分割の手順から、使うメモリと比較回数を考えます。

基本の仕組み

基本の仕組みの図解。上に元の並び「6、2、8、4」を置き、中央の「4」を基準に縦の仕切りを設ける。矢印で左の小さい側「2」、右の大きい側「6、8」へ分け、下で結んだ結果「2、4、6、8」へつなぐ。
覚えること:基準値で分け、各側を整列して結ぶ

6、2、8、4を4を基準に分けると、小さい側は2、大きい側は6、8です。それぞれをさらに整列して結ぶと2、4、6、8になります。このように基準値で分割するのがクイックソートの考え方です。

クイックソートは平均的にはO(n log n)ですが、分割が極端に偏るとO(n²)になります。マージソートは部分列を整列して併合し、一般的な配列実装では作業領域を使います。バブルソートは隣接要素を比較・交換するため、多数の比較が必要です。

再帰は自分と同じ処理を小さい問題へ適用する方法です。階乗ならf(0)=1を終了条件にf(n)=n×f(n−1)とします。終了条件だけでなく、そこへ近づく引数の更新が必要で、呼出しの情報はスタックへ積まれます。

整列・再帰の費用

整列・再帰の費用の図解。上段にクイックソートの「平均O(n log n)」を置き、中央には一列の要素を配置する。中央の列を端寄りで分けた偏った分割から、下段の「最悪O(n²)」へ下向き矢印を引き、上段と中央を細線で仕切る。
覚えること:クイックは分割が偏ると最悪O(n²)

バブル・選択・挿入ソートは基本形の最悪計算量がO(n²)です。マージソートはO(n log n)で補助領域を使い、ヒープソートもO(n log n)です。クイックソートは平均O(n log n)でも、分割が偏ると最悪O(n²)です。再帰は停止条件と呼出しごとの状態を確認します。

整列・再帰の費用
方法計算量の目安
バブル・選択・挿入最悪O(n²)
マージO(n log n)
ヒープO(n log n)
クイック平均O(n log n)、最悪O(n²)

試験に出る

  • クイックソートは平均O(n log n)だが分割が偏るとO(n²)。
  • マージソートは併合で整列し、配列実装では作業領域を使う点。
  • バブルソートは隣接比較・交換で比較回数が多いこと。
  • 再帰は終了条件と、そこへ近づく引数の更新の両方が必要。
  • 再帰呼出しの情報がスタックに積まれること。

重要な言葉

クイックソート
基準値で分割しながら整列する方法。
マージソート
部分列を整列して併合する方法。
再帰呼出し
自分と同じ処理をより小さい問題へ呼び出すこと。
計算量
処理に必要な手間を要素数との関係で表した量。

確認問題

確かめようクイックソートはどんな入力でもO(n log n)?

いいえ。分割の偏りによる最悪の場合と、平均的な場合を分けます。

クイックソートは、どの入力でも必ずO(n log n)である。

再帰には終了条件と、そこへ近づく引数の更新が必要。

分割が極端に偏るとO(n²)になる整列法は?

再帰呼出しの情報が積まれる場所は?

探索の前にデータを整列すると検索しやすくなりますが、整列自体にもが必要です。交換や分割の手順から、使うメモリとを考えます。

6、2、8、4を4を基準に分けると、小さい側は2、大きい側は6、8です。それぞれをさらに整列して結ぶと2、4、6、8になります。このようにで分割するのがの考え方です。

クイックソートは平均的にはO(n log n)ですが、分割が極端に偏るとO(n²)になります。は部分列を整列して併合し、一般的な配列実装では作業領域を使います。は隣接要素を比較・交換するため、多数の比較が必要です。

は自分と同じ処理を小さい問題へ適用する方法です。階乗ならf(0)=1をにf(n)=n×f(n−1)とします。終了条件だけでなく、そこへ近づく引数の更新が必要で、呼出しの情報はスタックへ積まれます。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について