Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... ·...

20
Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada Tres reglas de oro para la construcción de algoritmos: Preciso Definido Finito

Transcript of Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... ·...

Page 1: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Tres reglas de oro para la

construcción de algoritmos:

Preciso

Definido

Finito

Page 2: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Ser preciso

• Especificar claramente el orden de ejecución de las diferentes acciones, en cada uno de los casos que se puedan presentar.

No hay que dejar ningún caso suelto.

• Cualquier situación que no fue prevista desde el primer momento será una segura fuente de problemas.

… Reglas de oro para la construcción de algoritmos:

Page 3: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

… Reglas de oro para la construcción de algoritmos:

Ser definido

• Independientemente del número de veces que se ejecute el algoritmo, el resultado siempre debe ser el mismo.

Equivale a decir que el algoritmo no puede arrojar resultados aleatorios o inesperados.

• En caso contrario, no serviría para nada porque no se puede confiar en su correcto funcionamiento.

Page 4: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

… Reglas de oro para la construcción de algoritmos:

Ser finito

• Debe tener un número concreto de acciones.

• Hay que asegurarse que finalizará en algún momento.

Page 5: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Teoría de la Computabilidad

Su propósito es hacer precisa la noción

intuitiva de función calculable.

• esto es una función cuyos valores pueden ser

calculados de forma automática o efectiva

mediante un algoritmo.

Es una teoría que produce resultados

positivos y negativos (resultados de no

computabilidad o de indecibilidad).

Page 6: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

…Teoría de la Computabilidad

Puede caracterizarse como la búsqueda de respuestas

para las siguientes preguntas:

• ¿Qué pueden hacer las computadoras? (sin restricciones de

espacio, tiempo o dinero )

• ¿Cuales son las limitaciones inherentes a los métodos

automáticos de cálculo?

Su interés es expresar problemas como

algoritmos sin tener en cuenta la

información que necesita de los recursos.

Page 7: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Así los problemas matemáticos se pueden

dividir en:

Problemas indecidibles o no computables:

• No admiten un algoritmo que los resuelva.

Problemas decidibles o computables:

• Los que al menos con un algoritmo los resuelve satisfactoriamente.

Page 8: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

¿como saber si un problema es decidible

o indecidible?

En la práctica no es tan sencillo saber si un algoritmo resuelve el problema.

¿Por qué?

1. Si no encontramos un algoritmo, no quiere decir que éste no exista.

2. Si encontramos un algoritmo, ¿se detendrá para toda posible entrada y nos dará la respuesta correcta?

Page 9: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Problemas decidibles o computables:

Cuentan al menos con un algoritmo que los resuelve.

el cual se detiene en algún momento, y para todos los posibles valores que lleguen a tomar las variables de entrada, dará como salida la solución correcta al problema.

Page 10: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Una vez que sabemos que un problema es

computable es necesario saber:

¿cuántos recursos de computación

va a emplear el programa que

implementa el algoritmo de

solución ?

Page 11: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Los dos recursos principales que se

analizan son:

• Tiempo - uso del procesador (pasos,

operaciones elementales, etc.).

• Espacio – uso de memoria y disco (celdas,

posiciones de memoria).

Page 12: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Antes de utilizar un algoritmo debemos estimar el

tiempo que tardará en solucionar el problema y ver

si este tiempo es razonable.

¿Cuándo un tiempo es razonable?

• Supongamos que estamos ante un problema decidible y conocemos el algoritmo que lo resuelve.

¿De qué nos sirve este algoritmo

si tarda cien años en darnos la solución?

Page 13: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Esto permite separarlos en dos tipos:

tratables:

• Aquellos para los que existe al menos un

algoritmo capaz de resolverlo en un tiempo

razonable.

intratables:

• Aquellos para los que no es factible obtener su

solución con la tecnología actual.

Que un problema sea decidible no implica

que se pueda encontrar su solución.

Page 14: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Problemas intratables.

Estos se pueden solucionar, pero se complican

mucho más con cada elemento que se añada,

siendo de orden exponencial, factorial, o peor.

La dificultad es obvia cuando se considera que un sencillo

algoritmo exponencial que

terminara en un minuto con 10 elementos

podría tardar mil minutos (17 horas) con 20 elementos y

miles de millones de eones1 con 100 elementos,

corriendo en la misma computadora.

[1] Cada uno de los tres periodos en que los

geólogos dividen la historia de la Tierra. http://www.bookstaber.com/david/opinion/GASAEsp.pdf

Page 15: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

El juego de las torres de Hanoi:

“El juego consiste en mover los N anillos de la torre A a la

torre B o C, usando la otra como ayuda, pero sin que haya

un disco de mayor diámetro sobre otro de menor.”

La cota mínima de complejidad para este problema

es (2N).

• Esto significa que un ordenador capaz de hacer 1 millón de

operaciones por segundo, tardaría 1 msg en resolver el

juego con 10 anillos y casi 36 años si le colocamos 50

anillos.

http://avellano.fis.usal.es/~lalonso/CTS/computacion.pdf

Page 16: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

La naturaleza muchas veces se enfrenta con problemas de

magnitud intratable que logra solucionar.

Un fenómeno de este tipo es la evolución.

• Del espacio de todos los conjuntos químicos posibles con masa menor de una tonelada (el peso de un elefante, digamos),hay sumamente poquísimos que tienen la capacidad de no sólo sobrevivir en un ambiente dinámico sino también reproducirse.

Sin embargo, por medio de simples operaciones aleatorias como la mutación, el cruce entre organismos semejantes, y la selección natural, han surgido organismos complejísimos y altamente adaptados para sobrevivir en sus ambientes.

http://www.bookstaber.com/david/opinion/GASAEsp.pdf

Page 17: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

El conjunto de problemas que un computador jamás podrá resolver (por

rápido y grande que sea) es mucho más amplio que el conjunto de problemas “computables” (o decidibles).

Page 18: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Actualmente se conocen muchos problemas

algorítmicamente indecidibles.

NOTA: Tener presente que podrían existir métodos no algorítmicos para resolver el problema en cuestión. Esto nos lleva al concepto usual de indecidible matemático, para el cual no existe ningún medio de probar su verdad o falsedad.

Ejemplos de problemas indecidibles:

•El Entscheidungsproblem (problema de decisión en

alemán): “Dada una frase del cálculo de predicados de

primer orden, decidir si ella es un teorema.” •Church y Turing demostraron independientemente que este

problema es indecidible.

Page 19: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

Problemas indecidibles

El Problema de la Vaciedad.

• “Sea una Máquina de Turing M. “. Para estudiarlo, se trabaja con el lenguaje

asociado que es el conjunto de los códigos de

todas las Máquinas de Turing que aceptan al menos una cadena y su lenguaje complementario.

Un número computable es un número real que puede ser aproximado por un algoritmo con un nivel de exactitud arbitrario. • Turing demostró que casi todos los números no son computables. Por

ejemplo, la Constante de Chaitin no es computable aunque sí que está bien definido.

Page 20: Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... · Elementos básicos de programación M. C. Bertha López Azamar Programación Estructurada

Elementos básicos de programación

M. C. Bertha López Azamar Programación Estructurada

El problema de la parada: “Dado un programa y su entrada, decidir

si ese programa terminará para esa entrada o si correrá indefinidamente.”

Turing demostró que se trata de un problema indecidible.

Ejemplo, sea:

El problema de la detención pregunta si R se detendrá cuando lo ejecutamos dándole a

X como entrada.

• Supongamos que existe un programa Q que acepta como entrada pares (R,X):

Si R se detiene cuando lo ejecutamos con la entrada X, entonces Q nos responde

"si" cuando lo ejecutamos con la entrada (R,X).

Si R no se detiene con X, entonces Q nos responde "no".

• Sea S un programa que espera a que Q termine:

Si Q responde "si", S entra en un bucle infinito (no se detiene), y

si Q responde "no", S se detiene.

• Si ejecutamos Q dando (S,S) como entrada y:

Si Q responde "si", quiere decir que S se detiene pero entonces S no se detiene.

Si Q responde "no" es porque S no se detiene pero entonces S se detiene.

Esto es contradictorio y, por lo tanto el problema de la detención es indecidible.

L un lenguaje de programación,

R un programa escrito en el lenguaje L y

X una posible entrada de R.