31.07.2013 Views

Denkende Machines -- Computers, rekenen, redeneren - CWI

Denkende Machines -- Computers, rekenen, redeneren - CWI

Denkende Machines -- Computers, rekenen, redeneren - CWI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3.4. REKENTIJDEN 83<br />

Kortom, een programma HALT dat voor elk programma bepaalt of het stopt of niet, startend<br />

met lege registers, kan niet bestaan. Wat hier direct uit volgt, en wat van groot belang is om te<br />

weten, is dat niet alles berekenbaar is.<br />

Misschien vind je het Q programma nogal vreemd, omdat er in Q een verwijzing zit naar<br />

het programma zelf, in de vorm van de getalscode q. Er zijn echter ook problemen die er op<br />

het eerste oog veel onschuldiger uitzien, en die eveneens niet berekenbaar zijn. Een bekend<br />

voorbeeld is het volgende. Stel we hebben te maken met twee verschillende manieren om een<br />

eindig aantal symbolen met 0-en en 1-en te coderen. Bijvoorbeeld:<br />

a b c d<br />

eerste codering 11 01 01110 1001<br />

tweede codering 101 011 1010 01<br />

De vraag is nu of er een rijtje symbolen te geven is dat na codering volgens de twee verschillende<br />

methoden toch dezelfde rij van 0-en 1-en oplevert. In het geval hierboven kunnen we<br />

het positief beantwoorden, want babcd geeft voor beide coderingen hetzelfde resultaat, namelijk<br />

011101011101001. De vraag is nu of er een programma te schrijven valt dat voor een willekeurig<br />

alfabet van symbolen en voor twee willekeurige binaire coderingen voor dat alfabet berekent of<br />

er een gemeenschappelijk rijtje zoals in het geval hierboven te geven is. Het antwoord op die<br />

vraag is ‘nee’, en daarmee is dit zogenaamde correspondentieprobleem van Post (genoemd naar<br />

de logicus die het probleem verzonnen heeft) een onberekenbaar probleem. Als het gaat om<br />

het stopgedrag van programma’s moeten mensen het trouwens ook nog wel eens laten afweten.<br />

Neem het volgende programma.<br />

while (!(x = 1)) {<br />

if (x % 2 = 0) { x := x/2 }<br />

else { x := 3*x + 1 }<br />

}<br />

Starten met bijvoorbeeld x = 9 levert de rij<br />

9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 4, 2, 1<br />

op. Indien dit programma voor verschillende positieve gehele getallen x wordt uitgevoerd blijkt<br />

het steeds te eindigen (soms met verrassend hoge tussenwaarden). Echter, tot op heden is er<br />

niemand in geslaagd te bewijzen dat dit programma altijd eindigt.<br />

Opdracht 3.27 Voor de regenachtige zaterdagmiddag: probeer dit programma eens na te <strong>rekenen</strong><br />

voor x = 27 (een rekenmachine is handig).<br />

3.4.2 Tijdscomplexiteit<br />

Ook al is een probleem berekenbaar volgens de Turing these, dan nog kan het computationeel<br />

onhanteerbaar zijn. De complexiteit van een probleem kan dusdanig zijn dat er alleen maar<br />

programma’s te schrijven zijn die wel stoppen, maar pas na een enorme lange wachttijd. In de

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!