Registermaschine (Komplexitätstheorie)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Die Artikel Registermaschine, Registermaschine_(Berechenbarkeitstheorie), Registermaschine_(Komplexitätstheorie) und Verfeinerung (Informatik) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zusammenzuführen (→ Anleitung). Beteilige dich dazu an der betreffenden Redundanzdiskussion. Bitte entferne diesen Baustein erst nach vollständiger Abarbeitung der Redundanz und vergiss nicht, den betreffenden Eintrag auf der Redundanzdiskussionsseite mit {{Erledigt|1=~~~~}} zu markieren. Cormen (Diskussion) 18:55, 13. Mär. 2013 (CET)

Die Registermaschine (auch RAM für engl. random access machine) ist ein Rechnermodell der theoretischen Informatik, das einem realen Rechner (PC) sehr ähnlich ist.

Eine Registermaschine kann alles, was auch ein realer Rechner kann. Da man auch beweisen kann, dass sich die Registermaschine und die Turingmaschine gegenseitig mit polynomieller Laufzeit simulieren können, gelten Aussagen, die man für die Turingmaschine beweisen kann, auch für die Registermaschine und damit auch für reale Rechner. Dies ist in der theoretischen Informatik von Vorteil, da man viele Aussagen anhand der Turingmaschine leichter beweisen kann.

Die hier vorgestellte Registermaschine stammt aus dem Bereich der Komplexitätstheorie. Dies wird im weiteren Text nicht mehr erwähnt.

Definition[Bearbeiten | Quelltext bearbeiten]

Die Registermaschine besteht formal aus

  • einem Programm bestehend aus endlich vielen durchnummerierten Befehlen (beginnend mit Nummer 1)
  • einem Befehlszähler b
  • einem Akkumulator c(0)
  • und einem unendlich großen Speicher aus durchnummerierten Speicherzellen (Registern) c(1), c(2), c(3), …

Jedes Register (einschließlich b und c(0)) speichert eine beliebig große natürliche Zahl.

Zu Beginn enthält der Befehlszähler b den Wert 1, der Akkumulator den Wert 0. Die Speicherzellen ab Nummer 1 enthalten zu Beginn die endliche Eingabe. Die restlichen Speicherzellen enthalten den Wert 0.

Das Programm setzt sich aus folgenden Befehlen zusammen:

Befehl Wirkung
LOAD i c(0):=c(i) b:=b+1
CLOAD i c(0):=i b:=b+1
INDLOAD i c(0):=c(c(i)) b:=b+1
STORE i c(i):=c(0) b:=b+1
INDSTORE i c(c(i)):=c(0) b:=b+1
ADD i c(0):=c(0)+c(i) b:=b+1
CADD i c(0):=c(0)+i b:=b+1
INDADD i c(0):=c(0)+c(c(i)) b:=b+1
SUB i b:=b+1
CSUB i b:=b+1
INDSUB i b:=b+1
MUL i c(0):=c(0)*c(i) b:=b+1
CMUL i c(0):=c(0)*i b:=b+1
INDMUL i c(0):=c(0)*c(c(i)) b:=b+1
DIV i b:=b+1
CDIV i b:=b+1
INDDIV i b:=b+1
GOTO i b:=i
IF c(0) GOTO i
b:=i falls Bedingung wahr, b:=b+1 sonst.
END b:=b

Die Registermaschine führt dann nacheinander die Befehle des Programms aus. Es wird immer der Befehl mit der Nummer b als nächstes ausgeführt. Wie man aus der Tabelle entnehmen kann, erhöhen fast alle Befehle den Befehlszähler um 1, so dass nach einem solchen Befehl der darauf folgende Befehl, mit der nächsthöheren Nummer, ausgeführt wird. Die Registermaschine hält an, sobald der Befehlszähler b den Befehl END bezeichnet. Das Ergebnis der Berechnung steht dann in (zuvor) definierten Registern.