MÓDULO 1

1

INTRODUCCIÓN AL ANÁLISIS Y DISEÑO DE ALGORITMOS

¿QUÉ ES UN PROBLEMA?

Un problema computacional consiste en una caracterización de:
un conjunto de datos de entrada, junto con una especificación de la salida deseada en base a cada entrada Un problema es una función o asociación de entradas con salidas. Un problema puede tener muchos algoritmos.

2

para resolver un problema dado. 2. susceptible de ser realizado mecánicamente. 3 . De esta manera el algoritmo debe terminar en un tiempo finito con la solución del problema. Se trata de un método sistemático.ALGORITMO Podemos definir algoritmo como un "conjunto de reglas operacionales inherentes a un cómputo". Hay que hacer énfasis en dos aspectos para que un algoritmo exista: 1. El número de pasos debe ser finito. El algoritmo debe ser capaz de determinar la solución del problema.

Cada instrucción debe ser lo suficientemente básica como para que en principio pueda ser ejecutada por cualquier persona usando papel y lápiz. No ambiguo: explícito. Entrada: definir lo que necesita el algoritmo 2. 4. Efectividad: Cada instrucción se completa en tiempo finito. General: Debe ser lo suficientemente general como para contemplar todos los casos de entrada. 3. La solución es correcta 6. 7.CARACTERÍSTICAS DE UN ALGORITMO 1. Finito: El algoritmo termina en un número finito de pasos. 5. 4 . Correcto: Hace lo que se supone que debe hacer. siempre sabe qué comando ejecutar. Salida: definir lo que produce.

entonces el algoritmo toma una entrada y la transforma en la salida. 5 .ALGORITMO Así podemos. decir que un Algoritmo es un conjunto finito de instrucciones precisas para resolver un problema. El algoritmo más famoso de la historia procede de un tiempo anterior al de los antiguos griegos: el algoritmo de Euclides para calcular el máximo común divisor de dos enteros. Si el problema es visto como una función.

y también los análisis de tiempo y espacio.FORMULACIÓN Y RESOLUCIÓN DE PROBLEMAS  Un algoritmo puede ser caracterizado por una función lo cual asocia una salida: s= f (E) a cada entrada E. Entonces la entrada es una variable independiente básica en relación a la que se producen las salidas del algoritmo. 6 . Se dice entonces que un algoritmo calcula una función f.

FORMULACIÓN Y RESOLUCIÓN DE PROBLEMAS  Un programa es una instanciación de un algoritmo en un lenguaje de programación.  Un programa consiste en la especificación formal de un algoritmo por medio de un lenguaje de programación. de forma que pueda ser ejecutado por una computadora 7 .

el análisis de un problema tiene dos etapas claramente definidas y relacionadas: Formulación o planteamiento del problema.  8 .  Resolución del problema.FORMULACIÓN Y RESOLUCIÓN DE PROBLEMAS Si ya se ha realizado la formulación del problema podemos cuestionarla con el fin de entender bien la naturaleza del problema. En nuestra área.

primera visión de solución.  Supuestos: aserciones y limitaciones suministradas. cálculo o mecanismo antes de ser transcrito al computador (análisis previo del problema.FORMULACIÓN Y RESOLUCIÓN DE PROBLEMAS A su vez. etc…) 9 .  La fase de planteamiento del problema lo que pretende un algoritmo es sintetizar de alguna forma una tarea. la formulación la podemos descomponer en tres etapas: Definición del problema. resultados parciales y totales.  Resultados esperados.

10 .FORMULACIÓN Y RESOLUCIÓN DE PROBLEMAS  La    fase de resolución del problema se puede descomponer en tres etapas: Análisis de alternativas y selección de la solución. si es necesaria. Especificación detallada del procedimiento solución. Adopción o utilización de una herramienta para su implementación.

 11 .FORMAS DE REPRESENTACIÓN DE ALGORITMOS Dentro de las formas de representación de algoritmos más conocidas. sobresalen: · La descripción narrativa  · El Flujograma convencional  El pseudocódigo. o también conocido como lenguaje estructurado.

12 .ALGORITMIA La algoritmia es el estudio sistemático del diseño y análisis de algoritmos.

ÁREA DE ESTUDIO DE LOS ALGORITMOS ¿Cómo construir algoritmos? Enfoques:    Divide y vencerás. programación dinámica. de objetos. estocástica… ¿Cómo expresar algoritmos? Enfoques:   Programación lógica… estructurada. amigabilidad… 13 . ¿Cómo validar algoritmos? Verificación formal…  ¿Cómo analizar algoritmos?  Complejidad computacional. funcional. exacta. robustez.

REFINAMIENTO POR PASOS Una vez que se tiene un modelo matemático apropiado para un problema. Las versiones iniciales del algoritmo a menudo están mezcladas con proposiciones generales que deberán refinarse después en instrucciones más pequeñas y definidas. puede formularse un algoritmo basado en ese modelo.  Es necesario pasar por varias etapas de formalización hasta llegar a un programa cuyos pasos tengan un significado formalmente definido en el manual de algún lenguaje de programación.  14 .

REFINAMIENTO POR PASOS 15 .

 16 . dando un nombre de procedimiento a cada operación y sustituyendo los usos de las operaciones por invocaciones a los procedimientos correspondientes. el algoritmo se escribe en seudolenguaje.  En la siguiente etapa. el programa en seudolenguaje estará suficientemente detallado para que las operaciones que se deban realizar con los distintos tipos de datos estén bien determinados. en esta etapa la solución del problema del algoritmo expresado de manera muy informal.REFINAMIENTO POR PASOS La primera etapa es la modelación. Entonces se crean los tipos de datos abstractos para cada tipo de dato. En algún punto del proceso.

17 . se elige una aplicación para cada tipo de dato abstracto y se escribe el procedimiento que corresponde a cada operación de ese tipo. El resultado será un programa ejecutable. También se reemplaza por código en lenguaje de programación toda la proposición informal que quede en el algoritmo en seudolenguaje.REFINAMIENTO POR PASOS  En la tercera etapa.

Las reglas para construir tipos de datos compuestos a partir de los datos básicos también varían de un lenguaje a otro.TIPO DE DATO  El tipo de datos de una variable es el conjunto de valores que ésta puede tomar. Los tipos de datos básicos varían de un lenguaje a otro. 18 .

TIPO DE DATO ABSTRACTO  Un TDA es un modelo matemático. Se diseñan los algoritmos en función de un TDA. 19 . junto con varias operaciones definidas sobre ese modelo. se emplean estructuras de datos que son conjunto de variables. conectadas entre sí de diversas formas. Para representar el modelo matemático básico de un TDA. debe de encontrarse una manera de representar los TDA en función de los tipos de datos y las operaciones manejados por un lenguaje establecido. quizá de tipos distintos.

d. 20 .ALGORITMO DE EUCLIDES Permite obtener el m.c. Conclusión: el último divisor empleado es el m. b los números ( a > b ) Procedimiento 1 ) Se efectúa la división entera a : b y obtenemos un cociente c1 y un resto r1 2 ) Se efectúa la división del divisor b entre el resto r1 y obtenemos un cociente c2 y un resto r2 3 ) Se divide r1 entre r2 y obtenemos c3 y r3 Y así reiteradamente hasta llegar a una división exacta. de dos números: Sean a.c. de resto cero.d.

n. r de tipo entero obtener (m.ALGORITMO MCD Inicio variables m. n) r = m mod n while (r ≠ 0) do m=n n=r r = m mod n end while imprimir (n) Fin 21 .

182) = mcd(182.91) mcd(182.273) = mcd(273.EJEMPLO DEL ALGORITMO DE EUCLIDES Paso 1 2 3 Operación Significado 2366 dividido entre 273 es 8 y sobran 182 mcd(2366.91) = mcd(91.182) 273 dividido entre 182 es 1 y sobran 91 182 dividido entre 91 es 2 y sobra 0 mcd(273.0) 22 .

cin >> x. } CÓDIGO 23 . y = (y < 0) ? -y:y. } int main() { int x. return t. t = (x < y) ? x : y. int mcd(int x .int y){ return (!y) ? x : euc(y.#include using namespace std.x%y). cin >> y. cout << "x: ". cout << "MCD (euclides): " << euc(x.y) << endl. x = (x < 0) ? -x:x. } int euc(int x. while ( (x % t) || (y % t)) --t. int y){ int t.y) << endl. cout << "MCD: " << mcd(x.y. cout << "y: ".