アルゴリズムとプログラミング

基本情報技術者試験整列アルゴリズムの特性」の問題

テクノロジ系アルゴリズムとプログラミング難易度:hard
ヒープソートの最悪計算量と安定性の組合せとして正しいものはどれか。
最悪O(n^2)で、安定なソートである
最悪O(n)で、安定なソートである
最悪O(n log n)で、等しいキーの順序を保つ安定なソートである
最悪O(n log n)で、安定ではないソートである
正解
最悪O(n log n)で、安定ではないソートである

ヒープソートはヒープ構築後に根(最大値)を末尾と交換し再構築する操作をn回行い、各再構築がO(log n)で全体O(n log n)。最悪でもこの上限を保ち、遠い要素を交換するため等しいキーの順序が崩れ不安定である。よって最悪O(n log n)かつ不安定が正しい。

?選択肢ごとの解説

ア ×最悪O(n^2)はクイックソートの最悪や単純ソートの量であり、ヒープソートは最悪でもO(n log n)を保つ。さらにヒープソートは安定ではない。
イ ×最悪O(n)では全要素の整列は不可能で過少である。安定との組合せも誤りである。
ウ ×計算量O(n log n)は正しいが、ヒープソートは離れた要素を交換するため安定ではなく『安定』が誤りである。
エ ○ヒープソートはヒープ構築後に根(最大値)を末尾と交換し再構築する操作をn回行い、各再構築がO(log n)で全体O(n log n)。最悪でもこの上限を保ち、遠い要素を交換するため等しいキーの順序が崩れ不安定である。よって最悪O(n log n)かつ不安定が正しい。

くわしく

ヒープソートは追加メモリがほぼ不要(in-place)で最悪O(n log n)を保証する点が強みだが、不安定でキャッシュ効率はマージソートに劣る。最悪を保証したい用途で選ばれる。安定が必要ならマージソートを用いる。

本番での押さえどころ

試験のコツ

安定ソートの覚え方『マ・ソ・バ(マージ・挿入・バブル)は安定』。ヒープ・クイック・選択は不安定と対で覚える。

覚え方

ヒープは遠くの要素を飛ばして交換する=並び順が飛んで崩れる=不安定、と動きで結びつける。

よくある誤り

O(n log n)は覚えても安定だと誤る人が多い。ヒープ・クイック・選択は不安定、マージ・挿入・バブルは安定と整理する。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0136

【基本情報技術者試験】整列アルゴリズムの特性の問題 — 解答・解説|ukamiru 過去問