La presente monografía presenta en una primera parte una introducción al diseño de los algoritmos, mediante una variante de seudo código que permite luego la implementación de los algoritmos en diferentes lenguajes de programación y al análisis de los mismos. La segunda parte esta dedicada al análisis de complejidad, sensibilidad y condicionamiento de los algoritmos.
Introducción
Por "Informática" se entiende la ciencia que estudia los procesos de transmisión, acumulación y tratamiento de la información. El término fue introducido por los franceses, "Informatique", a fines de los años 60 del siglo pasado, aunque antes los norteamericanos habían introducido el término "Computer Science" para asignar la ciencia sobre la transformación de la información, basada en las técnicas de cómputo. Hoy ambos términos se emplean como equivalentes.
El concepto de Informática abarca las esferas ligadas con la elaboración, creación, empleo y mantenimiento material y técnico de los sistemas de procesamiento de la información, lo que incluye el hardware y el software, los aspectos de organización y sus efectos: industriales, de servicio, comerciales, sociales y políticos.
La Informática queda constituida por cuatro componentes vinculados indisolublemente: información, algoritmo, software y el hardware.
Observación 1: El material que se presenta está dedicado al segundo de estos componentes el " Algoritmo ".
El desarrollo alcanzado por la Informática, su utilización en todas las esferas de la actividad humana, hace necesario la búsqueda de nuevos y más eficientes algoritmos. La disciplina que estudia los algoritmos en todos sus aspectos se ha nombrado " Algorithmique" por Donald Knuth, en un texto francés de 1976. Pero la comunidad internacional ha aceptado el término " Algorítmica ".
Diseño de algoritmos
I.1 Noción de algoritmo:
En el estudio del Cómputo (la Informática en general), las siguientes preguntas se presentan desde el primer momento:
¿Qué problemas pueden ser resueltos por un algoritmo (programa) de cómputo?
¿Qué soluciones pueden ser obtenidas eficientemente en la práctica?
Estas preguntas parecen ser lo suficientemente vagas para no permitir una respuesta exacta. Por lo tanto de intentar dar una respuesta a las mismas debemos definir, de manera precisa, ¿qué entendemos por algoritmo?, ¿qué agente de cómputo vamos a emplear para ejecutar el algoritmo que resuelve el problema planteado?, ¿cómo nosotros mediremos la efectividad práctica de las soluciones?
El concepto de algoritmo procede del nombre del matemático del Asia Central
Al-Jwarizmi en el siglo IX, se empleaba en las matemáticas de la época para designar las reglas de las cuatro operaciones aritméticas, convirtiéndose en una de las nociones básicas de la Matemática. En nuestros días este concepto es usado en muchas esferas de la actividad humana.
Antes de dar la noción de algoritmo aclaremos el término agente de cómputo (procesador de la información): es un medio, cuya tarea es: dada una data inicial, ejecutar las reglas del algoritmo paso a paso, hasta obtener la data final (resultados), este puede ser humano, mecánico, electrónico, etc.
La definición de algoritmo puede ser más específica, pero de manera informal (intuitiva) puede ser enunciado como sigue:
Un algoritmo es un procedimiento finito y sistemático, para procesar información simbólica discreta por un agente de cómputo, paso a paso y sin ambigüedad.
La noción intuitiva de algoritmo por su vaguedad y falta de rigor no puede ser aceptado como una definición formal, por lo que ha sido objeto de estudio continuo de la comunidad de investigadores.
Las tareas típicas del algoritmo fueron: el cálculo numérico, los problemas de ordenamiento y búsqueda. En nuestros días sus esferas se han extendido a la solución de problemas de las más variadas áreas de la actividad humana (la ciencia, la producción, los servicios, etc.)
En la teoría clásica de la Informática se consideran dominios de información discretos. El caso de conjuntos de información continua ha sido extendido recientemente por Blum, Shub y Smale (1989). Esta nueva extensión teórica representa un desarrollo importante que extiende los conceptos de recursividad y complejidad a nuevos campos matemáticos como el análisis y la topología.
Observación 2: Nosotros excluiremos el caso en que la información a procesar es un conjunto continuo.
A lo largo de la historia muchos problemas han sido resueltos mediante técnicas de cómputo. Sin embargo, un estudio sistemático de los algoritmos sólo se ha desarrollado a partir de las últimas décadas del pasado siglo.
Dos hecho han contribuido substancialmente al crecimiento de estos estudios. Uno es el estudio de la definición formal de algoritmo a partir de 1936, precedido por los resultados en los estudios de la lógica matemática de finales del siglo XIX. El otro es el desarrollo alcanzado por las computadoras electrónicas, cuyo uso ha invadido toda la actividad humana lo cual ha requerido de estudios profundos para lograr un uso eficaz de las mismas.
Página siguiente |