11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

メモリ、使い過ぎてない? アルゴリズムの空間計算量とは(Space Complexity)

Posted at

概要

パソコンが使えるメモリには限界があります。多くのパソコンで快適に動くプログラムを書くには空間計算量(Time Complexity)を意識する必要があります。

空間計算量とは、ある問題を解くためにパソコンが必要とするメモリのことです。通常はビッグオー記法を使ってO(1)O(n)などと表します。

空間計算量は小さいほど良いです。つまり空間計算量がO(1)のアルゴリズムはO(n)のアルゴリズムよりも優れている評価できます。しかしアルゴリズムを測る尺度として他にも時間計算量などがあり、空間計算量だけでアルゴリズムの全てを評価できるわけではありません。

ビッグオー記法の簡単な説明

空間計算量においてビッグオー記法とは、入力が使うメモリの大きさnに対して、パソコンが処理に必要とするメモリをざっくりと示すものです。パソコンが必要とするメモリが定数ならO(1)、入力に必要なメモリに比例する程度ならO(n)などと書きます。

空間計算量の種類

空間計算量には二種類あります。

  • Auxiliary Space Complexity
  • Total Space Complexity

Auxiliary Space Complexityとは、処理のために追加で必要になったメモリの空間計算量です。一方でTotal Space Complexityは「Auxiliary Space Complexity」と「入力に必要なメモリ」とを両方考慮したものです。

以下のバブルソートの例ではAuxiliary Space ComplexityはO(1)であり、Total Space ComplexityはO(n)です。

特に注意書きがない場合、Space ComplexityはAuxiliary Space Complexityの方を指している場合が多いです。

バブルソートの空間計算量

バブルソートとは

リスト内の数字を小さい順にならべるソートアルゴリズムの1つです。リストの最初の要素から始まり、隣り合った2つの要素を順に比較していき、もし小さい順に並んでいなかったらその2つの要素を入れ替えるということを繰り返します。

Bubble-sort-example-300px.gif
https://en.wikipedia.org/wiki/Bubble_sort#/media/File:Bubble-sort-example-300px.gif

バブルソートの空間計算量

バブルソートのAuxiliary Space ComplexityはO(1)です。処理を実行するために追加で必要になるメモリは定数だからです。バブルソートでは2つ要素の比較、交換だけできればいいので、比較用の変数left, rightや、交換のために一時的に使う変数tempを使うだけでこと足ります。

一方で入力に必要なメモリはnです。Auxiliary Space ComplexityのO(1)と、入力に必要なメモリO(n)の両方を考慮し、Total Space ComplexityはO(n)と決まります。

他のアルゴリズムの空間計算量を調べるには?

Wikipediaにアルゴリズムの空間計算量(Space Complexity)が記載されています。

例としてバブルソートについて書かれたWikipediaの記事をご覧ください。

11
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?