Tema 5 computabilidad y algoritmos

13
Mario Alberto Domínguez Bobadilla TAREA 4 17 de Septiembre de 2013

Transcript of Tema 5 computabilidad y algoritmos

Page 1: Tema 5 computabilidad y algoritmos

Mario Alberto Domínguez Bobadilla

TAREA 4

17 de Septiembre de 2013

Fundamentos De Algoritmos

Page 2: Tema 5 computabilidad y algoritmos

COMPUTABILIDAD

El concepto de "computabilidad" es uno de los pilares fundamentales de la

matemática moderna. Se han elaborado diferentes teorías, todas ellas

equivalentes, para precisar el concepto de computabilidad pero me interesa

resaltar por su simplicidad y accesibilidad la teoría que Alan Turing elaboró en los

años 30.

El proceso de elaboración de la teoría de lo computable arranca y completa otra

teoría matemática más antigua y fundamental: la teoría de los algoritmos.

Inicialmente un algoritmo era una secuencia ordenada de operaciones que

resolvían determinados problemas matemáticos de un mismo tipo. Por ejemplo,

utilizamos frecuentemente en matemáticas básicas el algoritmo (el procedimiento)

para multiplicar dos números dados, o también el que permite extraer la raíz

cuadrada o el algoritmo que resuelve ecuaciones de segundo grado.

Cualquier algoritmo se define en términos matemáticos empleando símbolos de un

conjunto dado y aplicando determinadas reglas de combinación entre los mismos.

Con ello obtenemos un "mensaje" compuesto por una cadena de símbolos que

tiene un determinado significado. LA cadena de símbolos puede a su vez

traducirse a una cadena meramente numérica aplicando un sistema dado de

codificación. De esta forma entonces cualquier algoritmo escrito en cualquier

sistema de símbolos puede ser transformado en un mensaje puramente numérico.

Si tenemos algoritmos para determinar las raíces de ecuaciones de segundo

grado porqué no buscar un algoritmo que determine las raíces de una ecuación de

grado n. De esta forma se intentaba dar respuesta a la pregunta de si existía un

superalgoritmo que diese respuesta a cualquier problema matemático. Pero los

matemáticos se toparon con la evidencia de que ni siquiera para determinados

problemas parecía existir algoritmo. Además del lado de la lógica matemática vino

una aportación también desalentadora de la mano de K. Gödel, ya que demostró

que existen sistemas de códigos y reglas los cuales no eran capaces de demostrar

si una sentencia o mensaje generado dentro del propio sistema era verdadera o

falsa (o dicho de otro modo, con estos conjuntos de reglas y símbolos se podía

construir un mensaje que a priori dentro del propio sistema no podía decirse si era

Page 3: Tema 5 computabilidad y algoritmos

verdadero o falso, como por ejemplo la frase: "esta frase es falsa"; lo que en

matemática se denominaban sistemas incompletos).

En esta búsqueda infructuosa de superalgoritmos los matemáticos se dieron

cuenta de que para responder a la pregunta de si existía ese tal superalgoritmo

debía precisarse completamente qué era un algoritmo. En este punto entra la

definición que de algoritmo elaboraron Alan Turing y Emile Post mediantes sendas

máquinas teóricas: la máquina de Turing y la máquina de Post.

Turing y POst en realidad buscaban una definición de computabilidad, es decir una

definición de qué y cómo algp puede ser computable o calculable. Para ello

centraron sus argumentaciones en torno a unas máquinas de computar teóricas

que se denominaron popularmente como máquinas de Turing y Post

respectivamente. Así hablamos de números "turingcomputables", funciones

"turingcomputables" etc., cuando pueden calcularse por medio de una máquina de

Turing y de forma similar también en una máquina de Post.

En resumen para la computabilidad es necesario:

Un conjunto finito de símbolos.

Hacer asociaciones entre conceptos y elementos del lenguaje (de

símbolos)

Encontrar las combinaciones adecuadas de símbolos para evitar

ambigüedad.

Definir una manera de confirmar tal descripción para que terceros

puedan reproducirla y llegar a los mismos resultados.

ALGORITMO

Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y

finitas que permite realizar una actividad mediante pasos sucesivos que no

generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una

entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una

solución. Los algoritmos son el objeto de estudio de la algoritmia.

Page 4: Tema 5 computabilidad y algoritmos

MAQUINA DE TURING

Una máquina de Turing es un dispositivo que manipula símbolos sobre una tira de

cinta de acuerdo a una tabla de reglas. A pesar de su simplicidad, una máquina de

Turing puede ser adaptada para simular la lógica de cualquier algoritmo de

computador y es particularmente útil en la explicación de las funciones de

un CPU dentro de un computador.

La máquina de Turing fue descrita

por Alan Turing como una «máquina

automática» en 1936 en la

revista Proceedings of the London

Mathematical Society, 1 La máquina de

Turing no está diseñada como una

tecnología de computación práctica, sino

como un dispositivo hipotético que

representa una máquina de computación.

Las máquinas de Turing ayudan a los

científicos a entender los límites del

cálculo mecánico.

Una máquina de Turing consta de:

1. Una cinta que se divide en celdas, una al lado de la otra. Cada celda

contiene un símbolo de algún alfabeto finito. El alfabeto contiene un

símbolo especial llamado blanco (aquí escrito como 'B') y uno o más

símbolos adicionales. La cinta se supone que es arbitrariamente extensible

hacia la izquierda y hacia la derecha, es decir, la máquina de Turing

siempre es suministrada con tanta cinta como necesite para su

computación. Las celdas que no se hayan escrito previamente se asumen

que están rellenas con el símbolo blanco. En algunos modelos la cinta

tiene un extremo izquierdo marcado con un símbolo especial; la cinta se

extiende o es indefinidamente extensible hacia la derecha.

Page 5: Tema 5 computabilidad y algoritmos

2. Un cabezal que puede leer y escribir símbolos en la cinta y mover la cinta a

la izquierda y a la derecha una (y sólo una) celda a la vez. En algunos

modelos el cabezal se mueve y la cinta es estacionaria.

3. Un registro de estado que almacena el estado de la máquina de Turing, uno

de los estados finitos. Hay un especial estado inicial con que el registro de

estado es iniciado. Turing escribe que estos estados reemplazan el "estado

de la mente" en que ordinariamente estaría una persona realizando

cálculos.

4. Una tabla finita de instrucciones (llamada ocasionalmente como tabla de

acción o función de transición). Las instrucciones son usualmente 5-tuplas:

qiaj→qi1aj1dk, (a veces 4-tuplas), que, dado el estado (qi) la máquina está

actualmente en y el símbolo(aj) se está leyendo en la cinta (el símbolo

actualmente debajo del cabezal) le indica a la máquina hacer lo siguiente

en secuencia (para los modelos de 5-tupla):

Borra o escribe un símbolo (reemplazando aj con aj1), y entonces

Mueve el cabezal (que es descrito por dk y puede tener los valores: 'L'

para un paso a la izquierda, o 'R' para uno paso a la derecha, o 'N' para

permanecer en el mismo lugar) y luego

Asume el mismo o un nuevo estado como prescrito (ve al estado qi1).

PARTES DE UN ALGORITMO

Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir:

entrada, proceso y salida.

Donde:

ENTRADA

Corresponde al insumo, a los datos necesarios que requiere el proceso para

ofrecer los resultados esperados.

PROCESO

Pasos necesarios para obtener la solución del problema o la situación planteada.

SALIDA

Resultados arrojados por el proceso como solución.

Page 6: Tema 5 computabilidad y algoritmos

CARACTERÍSTICAS DE LOS ALGORITMOS

Las características fundamentales que debe cumplir un algoritmo son:

PRECISIÓN

Indica el orden de realización de cada paso dentro del proceso.

DEFINICION

Indica la exactitud y consistencia de los pasos descritos en el proceso, si el

algoritmo se prueba dos veces, en estas dos pruebas, se debe obtener el mismo

resultado.

FINITUD

Indica el número razonable de pasos, los cuales deben conllevar a la finalización

del proceso y producir un resultado en un tiempo finito.

Al diseñar un algoritmo se debe tener presente las características de precisión,

definición y finitud.

Existen 2 tipos de algoritmos

Cualitativos: Se describen los pasos utilizando palabras.

Cuantitativos: Se utilizan cálculos numéricos para definir los pasos del proceso.

TIPOS DE DATOS

Como se describió anteriormente, un dato es un campo que puede convertirse en

información.

Existen datos simples (sin estructura) y compuestos (estructurados).

Los datos simples son los siguientes

- Numéricos (Reales, Enteros)

- Lógicos

- Carácter (Char, String)

DIAGRAMA DE FLUJO

O diagrama de actividades es la representación gráfica del algoritmo o proceso.

Se utiliza en disciplinas como programación, economía, procesos

industriales y psicología cognitiva.

En Lenguaje Unificado de Modelado (UML), un diagrama de actividades

representa los flujos de trabajo paso a paso de negocio y operacionales de los

Page 7: Tema 5 computabilidad y algoritmos

componentes en un sistema. Un diagrama de actividades muestra el flujo de

control general.

En SysML el diagrama de actividades ha sido extendido para indicar flujos entre

pasos que mueven elementos físicos (e.g., gasolina) o energía (e.g., presión). Los

cambios adicionales permiten al diagrama soportar mejor flujos de

comportamiento y datos continuos.

Estos diagramas utilizan símbolos con significados definidos que representan los

pasos del algoritmo, y representan el flujo de ejecución mediante flechas que

conectan los puntos de inicio y de fin de proceso.

Un diagrama de flujo siempre tiene un único punto de inicio y un único punto de

término.

Las siguientes son acciones previas a la realización del diagrama de flujo:

Identificar las ideas principales al ser incluidas en el diagrama de flujo. Deben

estar presentes el autor o responsable del proceso, los autores o responsables

del proceso anterior y posterior y de otros procesos interrelacionados, así

como las terceras partes interesadas.

Definir qué se espera obtener del diagrama de flujo.

Identificar quién lo empleará y cómo.

Establecer el nivel de detalle requerido.

Determinar los límites del proceso a describir.

Los pasos a seguir para construir el diagrama de flujo son:

Establecer el alcance del proceso a describir. De esta manera quedará fijado el

comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del

proceso previo y el final la entrada al proceso siguiente.

Identificar y listar las principales actividades/subprocesos que están incluidos

en el proceso a describir y su orden cronológico.

Si el nivel de detalle definido incluye actividades menores, listarlas también.

Identificar y listar los puntos de decisión.

Construir el diagrama respetando la secuencia cronológica y asignando los

correspondientes símbolos.

Page 8: Tema 5 computabilidad y algoritmos

Asignar un título al diagrama y verificar que esté completo y describa con

exactitud el proceso elegido.

PSEUDOCODIGO

Es una descripción informal1 de alto nivel de un algoritmo informático de programación,

compacto e informal, que utiliza las convenciones estructurales de un lenguaje de

programación verdadero2 , pero que está diseñado para la lectura humana en lugar de la

lectura mediante máquina, y con independencia de cualquier otro lenguaje de

Page 9: Tema 5 computabilidad y algoritmos

programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para

la comprensión humana del algoritmo, tales como declaraciones de variables, código

específico del sistema y algunas subrutinas. El lenguaje de programación se

complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural,

o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de

entender para las personas que el código de lenguaje de programación convencional, ya

que es una descripción eficiente y con un entorno independiente de los principios

fundamentales de un algoritmo.

ESTRUCTURAS BASICAS

Son tres estructuras básicas de la programación estructurada.

a) Secuencia b) Condicional c) Iteración

Secuencial

Un conjunto de instrucciones se realizan una después de otra en un orden

determinado (formando una secuencia) que buscan un objetivo un objetivo.

Condicional

En la secuencia de ejecución de un programa la verificación de una condición

hace que se puedan tomar dos rutas distintas en la ejecución. Posteriormente se

vuelven a unir las dos rutas para lograr el objetivo final.

Iteración

Una subsecuencia de instrucciones se repite varias veces de acuerdo al estado de

una condición; puede haber dos casos:

- Mientras una condición sea verdadera una subsecuencia de instrucciones

se sigue repitiendo.

- Mientras una condición sea falsa una subsecuencia de instrucciones se

sigue repitiendo.