29.10.2013 Aufrufe

Skript zur Vorlesung Komplexitätstheorie im SS 1996

Skript zur Vorlesung Komplexitätstheorie im SS 1996

Skript zur Vorlesung Komplexitätstheorie im SS 1996

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2 TURING-MASCHINE 22<br />

2.6 Random Access Machine (RAM)<br />

Obwohl die Turing-Maschine ein ausreichendes Modell für Berechnungen<br />

aller Art ist (Churche These), erscheint sie für Algorithmen, wie wir sie in<br />

der Praxis lösen wollen, als reichlich unhandlich.<br />

Es hat daher verschiedene Bemühungen gegeben, Modelle von Maschinen<br />

zu entwickeln, die unserem Verständnis von Computern näherstehen. Ein<br />

solches Modell, das sich durchgesetzt hat, ist die Random Access Machine<br />

(RAM).<br />

Eine ihrer vielen ähnlichen Versionen soll hier kurz vorgestellt werden:<br />

Register<br />

0<br />

1<br />

2<br />

RAM Programm<br />

0 π0<br />

1 π1<br />

2<br />

. . .<br />

Die Register sind mit 0, 1, . . . , i, . . . durchnummeriert. Sie sind für die jeweilige<br />

Berechnung endlich, es gibt aber beliebig viele. Jedes Register kann<br />

beliebig große ganze Zahlen enthalten (Register i enthält ri ∈ Z).<br />

Das Programm ist eine Folge von Instruktionen Π = (π1, . . . , πm). κ ist ein<br />

Befehlszähler, der nach Ausführung eines Befehls, der kein Sprung und kein<br />

Halt ist, inkrementiert wird. Nach einem Sprung ist κ := j (wobei j die<br />

Sprungadresse angibt), nach einem Halt wird κ := 0 gesetzt. Im Berechnungsverlauf<br />

wird die jeweils aktuelle Instruktion (Befehl) πκ ausgeführt.<br />

Eine Eingabe ist ein Tupel I = (i1, . . . , in) mit ij ∈ Z in Register j. Die<br />

Länge von I ist n<br />

j=1 ⌈log(|ij| + 1)⌉<br />

Befehlssatz<br />

Instruktion Operand Semantik<br />

READ j r0 := ij<br />

READ<br />

STORE<br />

↑ j<br />

j<br />

r0 := irj<br />

rj := r0<br />

STORE<br />

LOAD<br />

↑ j<br />

x<br />

rrj := r0<br />

r0 := x<br />

ADD x r0 := r0 + x<br />

SUB<br />

HALF<br />

x r0 := r0 − x<br />

r0 := JUMP j<br />

r0<br />

2<br />

κ := j<br />

JPOS j if r0 > 0 then κ := j else κ := κ + 1<br />

JZERO j if r0 = 0 then κ := j else κ := κ + 1<br />

JNEG j if r0 < 0 then κ := j else κ := κ + 1<br />

HALT κ := 0<br />

m<br />

πm

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!