データ構造とアルゴリズム

要素数 n の配列で、異なる2つの要素の組をすべて1回ずつ比べる処理(i 番目の要素を、それより後ろにあるすべての要素と比べることを、i を1つずつ進めて繰り返す二重ループ)の計算量はどれか。

  1. AO(n)
  2. BO(n log n)
  3. CO(n²)
答えと解説を見る

正解:C. O(n²)

比べる組の数は (n−1) + (n−2) + … + 1 = n(n−1)/2 で、n = 10 なら45回、n = 1000 なら499,500回です。計算量のオーダーは n が大きくなったときの増え方だけを見るので、係数の1/2や低い次数の項を省いて O(n²) と表します。n が2倍になると回数はおよそ4倍になります。O(n) は全要素を1回ずつ見るだけの処理、O(n log n) はマージソートのように半分に分けることを繰り返す処理の計算量です。

  • A. 全要素を1回ずつ見るだけなら O(n) ですが、ここでは要素ごとに残りの要素すべてと比べています。
  • B. 半分に分けることを繰り返すマージソートなどの計算量で、すべての組を比べる処理より小さくなります。
  • C. 正しい。比較は n(n−1)/2 回で、n² に比例して増えます。
この分野を解く 分野ページへ

関連する計算ツール

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データ構造とアルゴリズムのほかの問題

  1. 計算量が O(n²) のプログラムで、データ数が1,000のときに処理時間が0.5秒だった。データ数を4,000にすると、処理時間はおよそ何秒になるか。
  2. 異なる100個の値が入った配列から、先頭から順に1つずつ比べる線形探索で目的の値を探す。目的の値は必ず配列の中にあり、どの位置にある確率も等しいとき、比較の回数の平均はいくらか。
  3. 配列と比べたときの連結リスト(各要素が次の要素の位置を指すポインタを持つリスト)の特徴として正しいものはどれか。
  4. 空のスタックに対して、push 1、push 2、pop、push 3、push 4、pop、pop の順に操作した。pop で取り出された値を順に並べたものはどれか。
  5. 空のキューに A、B、C の順に要素を入れ、1つ取り出し、D を入れて1つ取り出し、E を入れて1つ取り出した。取り出された要素を順に並べたものはどれか。