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

可変長配列で、容量が満杯のときに要素を追加すると、2倍の容量の領域を新たに確保して全要素をコピーする。容量1の空の配列に要素を1つずつ1,000個追加したとき、コピーされる要素の総数はいくつか。

  1. A10
  2. B1,023
  3. C499,500
答えと解説を見る

正解:B. 1,023

容量は1、2、4、…、512と満杯になるたびに2倍になり、そのたびにその時点の要素をコピーするので、コピーの総数は 1 + 2 + 4 + … + 512 = 1,023 です。1,000個の追加に対してコピーは要素数の約1倍なので、追加1回あたりの手間は平均すると一定、つまり償却 O(1) になります。容量を1ずつしか増やさないと、コピーは 1 + 2 + … + 999 = 499,500 となり O(n²) です。10は領域を確保し直した回数で、コピーされる要素の数ではありません。

  • A. 領域を確保し直した回数(1→2→…→1024の10回)で、コピーした要素の数ではありません。
  • B. 正しい。1 + 2 + 4 + … + 512 = 1,023で、追加1回あたり平均約1回のコピーです。
  • C. 容量を1ずつ増やした場合のコピーの総数です。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. 要素数が多く、負荷率を0.5程度に保ったハッシュテーブルで、線形探査のオープンアドレス法が、チェイン法(連結リストでつなぐ方法)より速くなりやすい理由として最も適切なものはどれか。
  2. GPUのような並列処理の装置で並べ替えを行うときに、バイトニックソートのような、比較・交換の手順が決まったソート(ソーティングネットワーク)が使われることがある。その理由として正しいものはどれか。
  3. 要素数 n の配列で、異なる2つの要素の組をすべて1回ずつ比べる処理(i 番目の要素を、それより後ろにあるすべての要素と比べることを、i を1つずつ進めて繰り返す二重ループ)の計算量はどれか。
  4. 計算量が O(n²) のプログラムで、データ数が1,000のときに処理時間が0.5秒だった。データ数を4,000にすると、処理時間はおよそ何秒になるか。
  5. 異なる100個の値が入った配列から、先頭から順に1つずつ比べる線形探索で目的の値を探す。目的の値は必ず配列の中にあり、どの位置にある確率も等しいとき、比較の回数の平均はいくらか。