tema 5 computabilidad y algoritmos
Post on 13-Jun-2015
312 Views
Preview:
TRANSCRIPT
Mario Alberto Domínguez Bobadilla
TAREA 4
17 de Septiembre de 2013
Fundamentos De 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
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.
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.
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.
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
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.
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
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.
top related