Rechenkomplexität der Zählung von Symbolen
-
29-09-2020 - |
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.
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:
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