計算理論(時間計算量)
前回の復習
ってどういう意味かと思ってたけど, をスター演算の結果の一例として, の両隣に同じ記号列があるということだったんですね.
big-O記法
時間計算量って高級言語だと, どの式や文がステップを消費してどの行為がステップを消費しないのか今ひとつわかりませんでしたが, チューリングマシンだと1ステップがハッキリしていて良いですね.
アルゴリズムの計算量は通常複雑な式になる. 漸近的解析と呼ばれる方法を用いて簡略化する. 最高次の項だけを考え, その項の係数やより低い次数の項を無視する.
なら にする.
の時, 前者は, 後者はになるが, の時, 前者は, 後者はで, を増やしていくと差がなくなっていく.
とを2つの関数とする. 全ての整数に対して正の整数とが存在して であるとき, と書く.
直感的に言えば, と書いた時定数倍を無視してはより小さいか等しいことを意味する.
のように書かれるとき, 対数の底を気にする必要はない. 底が変わっても値は定数倍しか変わらないのでオーダー記法の場合は無視されるため.
small-O記法
big-Oとは違い, のように等しくなく小さいことを意味する.
アルゴリズムの解析
次のようなTuring機械の時間計算量を調べる.
- テープを全て走査し, 1の右側に0があれば拒否する
- 0と1の両方がテープ状に残っているならば1つの0と1つの1をXで消すことを繰り返す
- 0と1のどちらも残っていなければ受理する, そうでなければ拒否する
この動作時間をそれぞれ調べる
- 左端から右端まで行って戻って来るため
- 一度0と1のペアを消すのに, これを最大で回繰り返す必要があるので
- 一度走査すれば良いため
以上をまとめるととなる.
言語のクラス分け
言語は, それを判定するために必要な時間計算量でクラス分けされる.
先程ので判定した言語はとなる.
が判定する言語を同じく判定するTuring機械が作れ, それはとなる.
はステップ2で0と1の総数の偶奇を調べ, 奇数なら拒否し, 偶数なら0と1を一つおきに消していく.
単一テープTuring機械ではこれ以上改良することは不可能である. 単一テープTuring機械で時間で判定する任意の言語は正規言語であることが知られているが, は正規言語ではないからである.