09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

12 Capítulo 1. Problemas, algoritmos y programas<br />

se conoce algoritmo que resuelva ese problema”; <strong>en</strong> cambio, establecer que un<br />

problema “no es computable” requiere demostrar que nunca se podrá <strong>en</strong>contrar<br />

ningún algoritmo para resolver el problema planteado.<br />

Los sigui<strong>en</strong>tes son ejemplos de problemas no computables:<br />

• Décimo problema de Hilbert.<br />

Resolver una ecuación diofántica con más de una incógnita.<br />

Esto significa <strong>en</strong>contrar soluciones <strong>en</strong>teras de una ecuación de la forma<br />

P (x1, x2, . . .) = 0, donde P es un polinomio con coefici<strong>en</strong>tes <strong>en</strong>teros.<br />

• Problema de la parada.<br />

Determinar si un algoritmo a finaliza o no cuando opera sobre una <strong>en</strong>trada<br />

de datos d:<br />

⎧<br />

⎨ Sí si a(d) ↓<br />

Stop(a, d) =<br />

⎩<br />

No si a(d) ↑<br />

donde a(d) ↓ (resp. a(d) ↑) expresa que el algoritmo a, aplicado al dato d,<br />

sí para (resp. no para).<br />

Examinaremos con más at<strong>en</strong>ción el problema de la parada, y después veremos<br />

cuán escurridizo puede resultar determinar si un algoritmo particular para o no<br />

considerando un s<strong>en</strong>cillo ejemplo. Claro está que esto no demuestra nada salvo,<br />

<strong>en</strong> todo caso, nuestra incapacidad para analizar este algoritmo <strong>en</strong> concreto. Por<br />

ello, incluimos seguidam<strong>en</strong>te una demostración de que es imposible hallar un<br />

algoritmo capaz de distinguir <strong>en</strong>tre los algoritmos que paran y los que no.<br />

Obsérvese que se plantea aquí estudiar “algoritmos que operan sobre algoritmos,<br />

vistos como datos”. Por extraño que parezca al principio, <strong>en</strong> Computación<br />

se desarrollan frecu<strong>en</strong>tem<strong>en</strong>te programas que manejan otros programas con diversos<br />

fines.<br />

El problema de la parada no es computable<br />

El problema de la parada, definido más arriba, se puede expresar como sigue:<br />

¿se puede examinar cualquier algoritmo y decidir si para? Demostraremos que<br />

no existe, ni puede existir, el algoritmo Stop que distinga si un algoritmo a para<br />

cuando se aplica a los datos d.<br />

Procederemos por reducción al absurdo: Suponi<strong>en</strong>do que existe ese algoritmo<br />

(descrito más arriba como Stop), a partir de él es posible construir otro similar,<br />

Stop’, que averigüe si un algoritmo a para cuando se aplica “a su propio texto”:<br />

Stop’(p) = Stop(p, p) =<br />

<br />

Sí si p(p) ↓<br />

No si p(p) ↑

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

Saved successfully!

Ooh no, something went wrong!