Un Poco de Historia El trmino proviene del matemtico rabe Al'Khwarizmi (800 DC), que escribi un tratado sobre los nmeros.
La exposicin clara de cmo calcular de una manera sistemtica a travs de algoritmos diseados para ser usados con algn tipo de dispositivo mecnico similar a un baco, ms que con lpiz y papel, muestra la intuicin y el poder de abstraccin de Al'Khwarizmi. Hasta se preocupaba de reducir el nmero de operaciones necesarias en cada clculo. Por esta razn, aunque no haya sido l el inventor del primer algoritmo, merece que este concepto est asociado a su nombre.
Definicin de Algoritmo El concepto intuitivo de algoritmo, lo tenemos prcticamente todos: Un algoritmo es una serie finita de pasos para resolver un problema.
De este modo, podemos definir algoritmo como un "conjunto de reglas operacionales inherentes a un cmputo". Se trata de un mtodo sistemtico, susceptible de ser realizado mecnicamente, para resolver un problema dado.
As podemos, decir que un Algoritmo es un conjunto finito de instrucciones precisas para resolver un problema
Definicin de Algoritmo Hay que hacer nfasis en dos aspectos para que un algoritmo exista:
1.El nmero de pasos debe ser finito. De esta manera el algoritmo debe terminar en un tiempo finito con la solucin del problema,
2.El algoritmo debe ser capaz de determinar la solucin del problema.
Caractersticas de un algoritmo 1. Entrada: definir lo que necesita el algoritmo 2. Salida: definir lo que produce. 3. No ambiguo: explcito, siempre sabe qu comando ejecutar. 4. Finito: El algoritmo termina en un nmero finito de pasos. 5. Definitud: Hace lo que se supone que debe hacer. La solucin es correcta 6. Efectividad: Cada instruccin se completa en tiempo finito. Cada instruccin debe ser lo suficientemente bsica como para que en principio pueda ser ejecutada por cualquier persona usando papel y lpiz. 7. General: Debe ser lo suficientemente general como para contemplar todos los casos de entrada En Resumen As podemos, decir que un Algoritmo es un conjunto finito de instrucciones precisas para resolver un problema.
Un algoritmo es un mtodo o proceso seguido para resolver un problema. Si el problema es visto como una funcin, entonces el algoritmo toma una entrada y la transforma en la salida.
Un problema es una funcin o asociacin de entradas con salidas. Un problema puede tener muchos algoritmos.
Por tanto, un algoritmo es un procedimiento para resolver un problema cuyos pasos son concretos y no ambiguos. El algoritmo debe ser correcto, de longitud finita y debe terminar para todas las entradas. Un programa es una instanciacin de un algoritmo en un lenguaje de programacin.
Ante situaciones nuevas o problemas, el que no sabe buscar soluciones se sentir confuso y angustiado y entonces no busca una estrategia y dar una primera solucin para poner punto final a su agona.
El que sabe buscar soluciones, selecciona la estrategia que le parece ms cercana a la requerida y hace una hbil adaptacin que se ajusta a la nueva demanda.
En Resumen
Algoritmos + Estructuras de Datos = Programas
Estructura de datos: parte esttica, almacenada. Algoritmo: parte dinmica, manipulador Resultado PROBLEMA Algoritmos + Estructuras de datos Existen diversas formas de representacin de algoritmos, pero no hay un consenso con relacin a cul de ellas es mejor.
Dentro de las formas de representacin de algoritmos ms conocidas, sobresalen:
1.La descripcin narrativa 2.El Flujograma convencional 3.El diagrama Chapn (o diagramas estructurados NS Nassi-Schneiderman) 4.El pseudocdigo, o tambin conocido como lenguaje estructurado.
Formas de Representacin de Algoritmos Anlisis de Algoritmos
El anlisis de algoritmos proporciona los mtodos necesarios para poder comparar distintos algoritmos que resuelven un mismo problema.
Un algoritmo es eficiente si administra correctamente los recursos.
Anlisis de Algoritmos La eficiencia algortmica hace referencia al consumo de recursos por parte de los algoritmos, principalmente, tiempo y espacio.
Adems, para que la comparacin tenga sentido, los algoritmos deben analizarse respecto al mismo modelo de computacin Tipos de Problemas a resolver Algoritmos de ordenamiento Bsqueda Procesamiento de textos Algoritmos de grafos Matemticos Algoritmos geomtricos
Recursos Computacionales Almacenamiento principal Trfico generado Almacenamiento secundario Tiempo de computo Concepto de eficiencia Un algoritmo ser tanto ms eficiente cuanto menos recursos consuma: tiempo y espacio de memoria para ejecutarlo.
Porqu estudiar Algoritmos Para evitar probar y ver qu sucede. No ambiguo Medir tiempos de ejecucin. Problemas: Los test podran no ser representativos de todas las entradas. Los test no nos dicen si hay otras soluciones.
Porqu estudiar Algoritmos? Ventajas: Sirve para predecir si el algoritmo es utilizable (anlisis independiente de la mquina). Permite compararlo con otros algoritmos. Ayuda a entender mejor el algoritmo. Efectos: Hacer mejoras en la eficiencia Ayuda en la correctitud. Permite definir nuevas estructuras de datos.
Cmo Analizar un Algoritmo? Lo que se entiende por analizar un algoritmo es medir la cantidad de tiempo y espacio que requiere un algoritmo para su ejecucin En otras palabras, se refiere a preguntarse si es que el algoritmo diseado es factible de ejecutar en el computador que se dispone. Significa poder predecir el comportamiento del algoritmo antes de llevarlo a un programa.
reas de Estudio de los Algoritmos Cmo construir algoritmos? Divide y vencers, programacin dinmica, etc. Cmo expresar algoritmos? Programacin estructurada, de objetos, de agentes, funcional, lgica, ... Cmo validar algoritmos? Verificacin formal, invariantes, ... Cmo analizar algoritmos? Complejidad computacional, robustez, amigabilidad, ...
Tareas en el Anlisis de Algoritmos Determinar qu operaciones se emplean y su costo relativo . Determinar conjuntos de datos para exhibir todos los patrones posibles de comportamiento. Anlisis a-priori: se determina una funcin (de ciertos parmetros) que acote el tiempo de cmputo del algoritmo. Anlisis a-posteriori: estadsticas reales sobre tiempo y memoria.
Estructuras Algortmicas Las estructuras de operacin de programas son un grupo de formas de trabajo, que permiten, mediante la manipulacin de variables, realizar ciertos procesos especficos que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en: