Elementos básicos de programación Tres reglas de oro para ...blopez/ProgramacionEstru... ·...
Transcript of 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
Tres reglas de oro para la
construcción de algoritmos:
Preciso
Definido
Finito
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:
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.
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.
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).
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.
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.
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?
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.
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 ?
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).
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?
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.
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
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
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
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).
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.
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.
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.