Frage

Betrachten Sie die Zählfunktion $ \ {X \} ^ * \ Rightarrow \ MathBB N $ Das zählt die Anzahl der Ereignisse des Symbols $ x $ .

Ich bin verwirrt über die (asymptotische) Komplexität der Berechnung dieser Funktion, wobei die Leistung in einem nicht-unarmartigen System (z. B. binär) dargestellt werden sollte. Meine Intuition schlägt stark darauf hin, dass dies linear sein sollte, dh $ o (n) $ wo $ n $ ist die Anzahl der Ereignisse des Symbols $ x $ in der Eingabe.

Soweit mein Verständnis gibt es mehrere Interpretationen der Berechnung - z. B.

    .
  • Single-Band-Turing-Maschinen, für die meine beste Idee mehr Zeit hat $ \ Omega (N ^ 2 \ log N) $ Ich denke (die $ \ log n $ kommt von der Annahme, dass die binäre Nachfolgerfunktion $ \ Omega (n) $ Laufzeit von $ hat, wo $ n $ die Länge einer binären Darstellung einer natürlichen Zahl und der $ n ^ 2 $ kommt von der Annahme, dass die Turing-Maschine über den gesamten $ x $ ist, um seine aktuelle Zählung zu erreichen),
  • Multi-Band-Turing-Maschinen, für die ich glaube, ich habe eine Vorstellung von Run-Zeit $ \ omega (n \ log n) $ ,
  • zufällige Zugangsmaschinen, die ich überhaupt nicht kenne.

, also ist meine Frage das folgende.

Wie ist die rechnerische Komplexität der Zählfunktion in den verschiedenen Berechnungsmodellen? Ist es in einem von ihnen linear?

Wenn überhaupt relevant, frage ich nach Sicht der abstrakten Algebra, wo ich versuche, die rechnerische Komplexität des Wortproblems in einer bestimmten Gruppe zu beurteilen.

War es hilfreich?

Lösung

Turing-Maschinen sind ein schönes Modell mit mehreren Vorteilen, meistens ihre Einfachheit, aber sie sind nicht die erste Wahl, wenn sie Algorithmen analysieren. Algorithmen werden typischerweise implizit auf dem RAM-Maschinenmodell analysiert, und in einigen Fällen auf dem BSS-Modell .

Hier sind einige Kommentare zu der rechnerischen Komplexität des Zählens in verschiedenen Modellen:

Single-Tape-Turing-Maschine: Diese werden nur berücksichtigt, da es relativ einfach ist, unter den unteren Grenzen zu beweisen. Sie sind noch weniger realistisch ein Berechnungsmodell als Multi-Band-Turing-Maschinen.

Multi-Tape-Turing-Maschine: Es ist ein Standardbeispiel in fortgeführter Komplexität, dass ein zunehmender Zähler mit $ O (1) $ Amortisierte Bitoperationen. Dies liegt daran, dass die Hälfte der Zeit, nur ein Bit ändert, ein Viertel der Zeit, nur zwei Bits usw. für eine Gesamtzahl der geänderten Bits, die $ 1/2 + 2 ist / 4 + 3/8 + \ CDs= 2 $ . Die Turing-Maschinenkomplexität ist dabei linear, und so kann das Zählen in $ o (n) $ implementiert werden.

RAM-Maschine: Eine RAM-Maschine besteht aus endlich vielen Registern und einem Zufallszugriffsspeicher. Die Register sind $ O (\ log n) $ -bits lang, wobei $ n $ die Größe ist der Eingabe. Angemessene Vorgänge in den Registern treffen konstante Zeit. Insbesondere erhöht die Erhöhung eines Zählers, der bis zu $ \ mathit {poly} (n) $ zählen kann $ o (1 ) $ schlechteste Fall Zeit. Insbesondere wird Ihre Funktion in $ O (n) $ ausgeführt.

BSS-Maschine: man muss vorsichtig sein, wenn Sie Arithmetik auf großer Anzahl erfolgen. Auf der RAM-Maschine nimmt Arithmetik nur ständige Zeit an, wenn die Größe der Operanden $ \ mathit {poly} (n) $ ist. Eine BSS-Maschine ermöglicht den Zugriff auf spezielle Register, die Werte in einem Feld speichern, sagen die realen Zahlen. Sie können Konstant-Time-Arithmetik und Vergleiche durchführen, funktioniert jedoch nicht wie Boden. Sie dürfen auch keine solchen Werte für die Indexierung verwenden. (Wenn Sie sich nicht genug einschränken, werden Sie in der Kürze in der Polynomzeit sanisiert.) Sie können an eine BSS-Maschine als Aufnahme von Floating-Point-Operationen denken, was in der Praxis ständige Zeit annehmen, während Sie die endliche Genauigkeit ignorieren, die an ihnen beteiligt sind .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top