カウントシンボルの計算の複雑さ
-
29-09-2020 - |
質問
カウント関数 $ \ {x \} ^ * \ {x \} ^ * \ {x \} ^ * \ rightarrow \ mathbb n $ $ x $ 。
この関数を計算する(漸近的な)複雑さについて混乱しています。は、出力が単数以外のシステム(例えば、バイナリ)で表現されるべきです。私の直感は、これが線形であるべきであること、つまり $ O(n)$ ここで、 $ n $ 入力内のシンボル $ x $ の発生数です。
私の理解が行われる限り、計算の解釈 - 例えば、
- 私の最善のアイデアが実行時間を実行したシングルバンドのチューリングマシン $ \ omomega(n ^ 2 \ log n)$ 私は(スパンクラス="math-container"> $ \ log n $ は、バイナリ後続関数が $ \ omomega(n)$ の実行時間を持つという仮定から来ます。 $ n $ は、自然数の2進表現の長さ、 $ n ^ 2 $ チューリングマシンは、現在のカウントに達するためのすべての $ x $ のすべての上に移動しなければならないという仮定から来ます)、
- マルチバンドチューリングマシン、ランタイムのアイデアがあると思う $ \ omma(n \ log n)$ 、
- ランダムアクセスマシン、まったくわかりません。
だから私の質問は以下のものです。
様々な計算モデルにおけるカウント関数の計算の複雑さは何ですか?それらのいずれかに線形ですか?
関連性がある場合、私は抽象代数の観点から尋ねます。
解決
チューリングマシンは、いくつかの利点を持つ素晴らしいモデルです。ほとんどの単純さは、アルゴリズムを分析するときの最初の選択ではありません。アルゴリズムは通常、RAMマシンモデルで暗黙的に分析され、場合によっては BSSモデル。
ここにはさまざまなモデルのカウントの計算量の複雑さに関するいくつかのコメントがあります:
シングルテープチューリング機:これらはそれらの上限が低いことが比較的簡単であるため、考慮されます。マルチテープチューリングマシンよりも現実的な計算モデルです。
所属していません cs.stackexchange