Entwickler-Ecke

Algorithmen, Optimierung und Assembler - MOD-Berechnung mit einer Turing-Maschine


ApfelSandwich - Mo 26.11.12 22:37
Titel: MOD-Berechnung mit einer Turing-Maschine
'n Abend,

vielleicht nicht zuletzt wegen dieser späten Stunde habe ich grad irgendeine Denkblockade und zweifle bereits an mir selbst.

Ich wollte einfach eine mod-Funktion mit unären Zahlen umsetzen. Ich wollte einfach dividieren (zyklisch abziehen), bis es nicht mehr geht und dann gucken, was übrig ist. Ich habe meinen Entwurf leider auf dem Papier gemacht, hoffe ihr versteht, was ich meine.

Wie würdet ihr so ein Turingmaschinenprogramm bauen?

Danke für Eure Hilfe und einen schönen Abend noch
mfg ApfelSandwich

PS: Die Sektion heißt "Algorithmen", also sind auch Turingmaschinen hier am richtigen Platz, oder?


Mathematiker - Mo 26.11.12 22:46

Cross-Posting: http://www.delphipraxis.net/171820-mod-berechnung-mit-einer-turing-maschine.html
und zusätzlich: http://www.informatikforum.de/showthread.php?p=242047#post242047


ApfelSandwich - Mo 26.11.12 23:03

Hi Mathematiker, dankeschön für Deine Antwort. Leider konnte ich in den beiden Themen keine Antworten finden. Trotzdem Danke für Deine Mühe beim Suchen.

Ich bin recht verzweifelt, was das Finden einer Lösung angeht. Sry, dass ich nicht an das Verlinken gedacht habe. Jetzt hast du es ja getan.
Einen schönen Abend noch


Mathematiker - Mo 26.11.12 23:07

Es war keine Mühe. :wink:
Aus den Regeln
Zitat:
3.10 Crosspostings
Stellst du die gleiche Frage auch in einem anderen Forum, dann kennzeichne deine Frage bitte entsprechend und verlinke die Topics untereinander.

Ich habe nur das gemacht, was Du leider im Eifer des Gefechts vergessen hattest.

Beste Grüße
Mathematiker


Xion - Di 27.11.12 16:06

user profile iconApfelSandwich hat folgendes geschrieben Zum zitierten Posting springen:
Ich wollte einfach eine mod-Funktion mit unären Zahlen umsetzen. Ich wollte einfach dividieren (zyklisch abziehen), bis es nicht mehr geht und dann gucken, was übrig ist. Ich habe meinen Entwurf leider auf dem Papier gemacht, hoffe ihr versteht, was ich meine.

Wie würdet ihr so ein Turingmaschinenprogramm bauen?

So, wie du es beschrieben hast. Die einzige Schwierigkeit ist wohl, beim abziehen vorsichtig zu sein (weil du ja erst merkst, dass es nichtmehr geht, wenn du bei 0 angekommen bist). Mit einer 2-Band-Turingmaschine sollte das aber kein Problem sein.

a mod b

=>
a auf Band 1
b auf Band 2

=>
a und b gleichzeitig nach vorne laufen lassen (=1 abziehen)
b am Ende => du hast einmal b von a abgezogen => Kopf von Band 2 wieder nach vorne holen
a am Ende => diesesmal ist a 0 geworden. Die Kopfposition von Band 2 gibt dir an, wieviel du gelöscht hast, das addierst du also am Ende wieder auf Band 1. => Fertig

Es geht (natürlich) auch mit einem Band mit dem gleichen Prinzip, nur musst du dann die Bänder simulieren (ein Trennzeichen auf dem Band setzen). Ist nur etwas mehr schreib-/rechenaufwand.


Fiete - Di 27.11.12 16:32

Moin ApfelSandwich,
hier ein Tip: http://www.entwickler-ecke.de/viewtopic.php?p=510016#510016
mit dem Turingsimulator kannst Du TP's erstellen und testen.
Das m mod n TP könnte so aussehen, Alphabet aufbohren :wink: :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// repeat m:=m-n until m<n
// BmBnB... --> Bm1nBm1nB...
// z.B. BIIIIIIIIIIBIIIIIB... --> BIIB...
// 9 mod 4 = 1
01#B(REB)1(LIB)(DUP)(RE1)B(LIB)#02
02#B(DIF)R#03
03#BL(VZL)(RE1)BR#04
03#I(RE1)(LIB)R#06
04#IBR#04
04#B(LII)(LIB)#00
06#IBR#06
06#1B(LII)R(VZL)(LIB)#01

Gruß Fiete