Introducción al análisis y diseño de algoritmos - CTR - Universidad ...

Introducción al análisis y diseño de algoritmos - CTR - Universidad ... Introducción al análisis y diseño de algoritmos - CTR - Universidad ...

ctr.unican.es
from ctr.unican.es More from this publisher
12.07.2015 Views

Parte II: Estructuras de datos yalgoritmosUNIVERSIDAD DE CANTABRIA1. Introducción al análisis y diseño de algoritmos.2. Tipos abstractos de datos.3. Métodos de ordenación.4GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 1FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIA1. Introducción al análisis y diseño de algoritmos.• Introducción. Diseño de un Programa. Concepto de algoritmo. Descripción dealgoritmos: el pseudolenguaje y diagramas de flujo. Tiempo de ejecución. La notaciónO(n). Ejemplos de análisis.2. Tipos abstractos de datos.• Conceptos básicos. Listas. Pilas. Colas. Vectores. Conjuntos. Mapas. Árboles. Árbolesbinarios.3. Métodos de ordenación.• El modelo de ordenación interna. Esquemas simples de ordenación. Ordenación rápida.Ordenación por cajas. Ordenación por base.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 2FACULTAD DE CIENCIAS6/nov/08

Parte II: Estructuras <strong>de</strong> datos y<strong>al</strong>goritmosUNIVERSIDAD DE CANTABRIA1. <strong>Introducción</strong> <strong>al</strong> <strong>análisis</strong> y <strong>diseño</strong> <strong>de</strong> <strong>al</strong>goritmos.2. Tipos abstractos <strong>de</strong> datos.3. Métodos <strong>de</strong> or<strong>de</strong>nación.4GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 1FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIA1. <strong>Introducción</strong> <strong>al</strong> <strong>análisis</strong> y <strong>diseño</strong> <strong>de</strong> <strong>al</strong>goritmos.• <strong>Introducción</strong>. Diseño <strong>de</strong> un Programa. Concepto <strong>de</strong> <strong>al</strong>goritmo. Descripción <strong>de</strong><strong>al</strong>goritmos: el pseudolenguaje y diagramas <strong>de</strong> flujo. Tiempo <strong>de</strong> ejecución. La notaciónO(n). Ejemplos <strong>de</strong> <strong>análisis</strong>.2. Tipos abstractos <strong>de</strong> datos.• Conceptos básicos. Listas. Pilas. Colas. Vectores. Conjuntos. Mapas. Árboles. Árbolesbinarios.3. Métodos <strong>de</strong> or<strong>de</strong>nación.• El mo<strong>de</strong>lo <strong>de</strong> or<strong>de</strong>nación interna. Esquemas simples <strong>de</strong> or<strong>de</strong>nación. Or<strong>de</strong>nación rápida.Or<strong>de</strong>nación por cajas. Or<strong>de</strong>nación por base.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 2FACULTAD DE CIENCIAS6/nov/08


1. Diseño <strong>de</strong> un programaUNIVERSIDAD DE CANTABRIARequerimientosInform<strong>al</strong>esDocumento <strong>de</strong>RequerimientosDocumento <strong>de</strong>EspecificacionesArquitectura<strong>de</strong>l ProgramaAnálisis <strong>de</strong>RequerimientosAnálisis <strong>de</strong>EspecificacionesDiseño <strong>de</strong> laArquitecturaIntegración yPruebas <strong>de</strong>SistemaPruebas<strong>de</strong> MóduloCodificaciónDiseñoDet<strong>al</strong>ladoProgramaFin<strong>al</strong>Módulos <strong>de</strong>ProgramaProbadosMódulos <strong>de</strong>ProgramaDiseño <strong>de</strong> cadaMódulo (pseudocódigo)GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 3FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIALos pasos que se siguen gener<strong>al</strong>mente a la hora <strong>de</strong> <strong>de</strong>sarrollar un programa son los siguientes:• Análisis <strong>de</strong> requerimientos: Se <strong>de</strong>fine el problema a resolver y todos los objetivos que sepreten<strong>de</strong>n, pero sin indicar la forma en la que se resuelve.• Especificación: Se <strong>de</strong>termina la forma en la que se resolverá el problema, pero sin entrar aúnen su implementación informática. Se <strong>de</strong>termina asimismo la interfaz con el usuario.• Diseño <strong>de</strong>l programa: Se divi<strong>de</strong> el problema en módulos, se especifica lo que hace cadamódulo, así como las interfaces <strong>de</strong> cada uno <strong>de</strong> ellos.• Diseño <strong>de</strong>t<strong>al</strong>lado <strong>de</strong> los módulos: Para cada módulo se diseñan <strong>de</strong>t<strong>al</strong>ladamente las estructuras<strong>de</strong> datos y los <strong>al</strong>goritmos a emplear, norm<strong>al</strong>mente <strong>de</strong>scritos mediante pseudocódigo.• Codificación: Se escribe el programa en el lenguaje <strong>de</strong> programación elegido.• Pruebas <strong>de</strong> módulos: Se prueban los módulos <strong>de</strong>l programa aisladamente y se corrigen losf<strong>al</strong>los hasta conseguir un funcionamiento correcto.• Integración y Prueba <strong>de</strong> sistema: Se unen todos los módulos, y se prueba el funcionamiento<strong>de</strong>l programa completo.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 4FACULTAD DE CIENCIAS6/nov/08


Distribución <strong>de</strong>l EsfuerzoUNIVERSIDAD DE CANTABRIA<strong>análisis</strong> y <strong>diseño</strong>codificaciónpruebas eintegraciónGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 5FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIALos siguientes datos se han obtenido <strong>de</strong>l estudio <strong>de</strong> muchos proyectos software re<strong>al</strong>es.Distribución <strong>de</strong>l esfuerzo <strong>de</strong> la actividad software (sin tener en cuenta el mantenimiento):- Análisis y Diseño : 38%- Codificación : 20%- Pruebas e integración: 42%.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 6FACULTAD DE CIENCIAS6/nov/08


2. Concepto <strong>de</strong> <strong>al</strong>goritmoUNIVERSIDAD DE CANTABRIAUn <strong>al</strong>goritmo es:• una secuencia finita <strong>de</strong> instrucciones,• cada una <strong>de</strong> ellas con un claro significado,• que pue<strong>de</strong> ser re<strong>al</strong>izada con un esfuerzo finito• y en un tiempo finitoEl <strong>al</strong>goritmo se diseña en la etapa <strong>de</strong> <strong>diseño</strong> <strong>de</strong>t<strong>al</strong>lado y secorrespon<strong>de</strong> habitu<strong>al</strong>mente con el nivel <strong>de</strong> subprogramaAlgoritmo heurístico: suministra una solución buena, pero nonecesariamente óptimaGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 7FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAEl <strong>al</strong>goritmo se diseña durante la etapa <strong>de</strong> <strong>diseño</strong> <strong>de</strong>t<strong>al</strong>lado <strong>de</strong>ntro <strong>de</strong>l ciclo <strong>de</strong> vida <strong>de</strong>l programa.Habitu<strong>al</strong>mente se correspon<strong>de</strong> con el nivel <strong>de</strong> subprograma, es <strong>de</strong>cir, cada subprogramaimplementa un <strong>al</strong>goritmo.Un <strong>al</strong>goritmo es una secuencia finita <strong>de</strong> instrucciones, cada una <strong>de</strong> ellas con un claro significado,que pue<strong>de</strong> ser re<strong>al</strong>izada con un esfuerzo y un tiempo finitos. Por ejemplo, una asignación comox:=y+z es una instrucción con estas característicasUn <strong>al</strong>goritmo que suministra una solución buena, pero no necesariamente óptima, se le <strong>de</strong>nomina<strong>al</strong>goritmo heurístico y suele utilizarse en aquellos problemas <strong>de</strong>nominados “NP-completos” y cuyasolución óptima pasa por “intentar todas las posibilida<strong>de</strong>s”, don<strong>de</strong> el número <strong>de</strong> posibilida<strong>de</strong>s es unafunción exponenci<strong>al</strong> <strong>de</strong>l tamaño <strong>de</strong>l problema.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 8FACULTAD DE CIENCIAS6/nov/08


Algoritmos recursivosUNIVERSIDAD DE CANTABRIAAlgoritmo recursivo: se <strong>de</strong>fine en términos <strong>de</strong> sí mismo• requiere que las referencias a sí mismo sean finitasEjemplo:• forma iterativa <strong>de</strong>l <strong>al</strong>goritmon!=⎧ 1 , si n = 0⎨⎩n ⋅( n–1) ⋅( n – 2) ⋅…2⋅1, si n > 0• forma recursiva <strong>de</strong>l <strong>al</strong>goritmon!=⎧ 1 , si n = 0⎨⎩n ⋅ ( n–1)! , si n > 0GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 9FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAUn <strong>al</strong>goritmo recursivo es aquel que se <strong>de</strong>fine en términos <strong>de</strong> sí mismo.Por ejemplo, po<strong>de</strong>mos <strong>de</strong>finir el factori<strong>al</strong> <strong>de</strong> un número como:1, si n = 0n! =n⋅ ( n – 1)! , si n > 0En el caso <strong>de</strong>l factori<strong>al</strong> existe también la solución iterativa• es más eficiente la iterativa, ya que si el <strong>al</strong>goritmo se implementa con un subprograma, l<strong>al</strong>lamada <strong>al</strong> mismo es más costosa que una operación norm<strong>al</strong>; a<strong>de</strong>más, ocupa más memoria,porque cada sucesiva llamada a un procedimiento ocupa nuevo lugar en el stack• pero hay muchos casos en los que no existe o es muy difícil la solución iterativaGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 10FACULTAD DE CIENCIAS6/nov/08


3. Descripción <strong>de</strong> <strong>al</strong>goritmosUNIVERSIDAD DE CANTABRIAUn <strong>al</strong>goritmo se pue<strong>de</strong> especificar mediante la utilización <strong>de</strong>un lenguaje <strong>de</strong> programación.Sin embargo, gener<strong>al</strong>mente se suelen utilizar técnicas <strong>de</strong><strong>de</strong>scripción <strong>de</strong> <strong>al</strong>goritmos más o menos in<strong>de</strong>pendientes <strong>de</strong>llenguaje <strong>de</strong> programación:• diagrama <strong>de</strong> flujo- es un gráfico que muestra el or<strong>de</strong>n en el que se vanejecutando las diferentes instrucciones• pseudolenguaje o pseudocódigo- utiliza instrucciones <strong>de</strong> control y lenguaje natur<strong>al</strong>GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 11FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAUn <strong>al</strong>goritmo se pue<strong>de</strong> especificar mediante la utilización <strong>de</strong> un lenguaje <strong>de</strong> programación. En estecaso el <strong>al</strong>goritmo se <strong>de</strong>scribe en términos <strong>de</strong>l conjunto <strong>de</strong> instrucciones <strong>de</strong>l lenguaje.Sin embargo, gener<strong>al</strong>mente se suelen utilizar técnicas <strong>de</strong> <strong>de</strong>scripción <strong>de</strong> <strong>al</strong>goritmos más o menosin<strong>de</strong>pendientes <strong>de</strong>l lenguaje <strong>de</strong> programación en el que se codifican. T<strong>al</strong> es el caso <strong>de</strong> losdiagramas <strong>de</strong> flujo o <strong>de</strong>l pseudolenguaje.El diagrama <strong>de</strong> flujo es un gráfico en el que se representa el or<strong>de</strong>n en el que se van ejecutando lasdiferentes instrucciones que forma el <strong>al</strong>goritmo.El pseudolenguaje se pue<strong>de</strong> consi<strong>de</strong>rar como un método para la <strong>de</strong>scripción <strong>de</strong> <strong>al</strong>goritmos en elque se utiliza una combinación <strong>de</strong> instrucciones inform<strong>al</strong>es escritas en lenguaje natur<strong>al</strong> y <strong>de</strong> ór<strong>de</strong>nes<strong>de</strong> control estructuradas.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 12FACULTAD DE CIENCIAS6/nov/08


EjemplosUNIVERSIDAD DE CANTABRIAComienzoFactori<strong>al</strong>:=1i:=Ni=0?NOSIFactori<strong>al</strong>:=Factori<strong>al</strong>*ii:=i-1Fin<strong>al</strong>goritmo factori<strong>al</strong>(N : Natur<strong>al</strong>)factori<strong>al</strong>=1lazo para i <strong>de</strong>s<strong>de</strong> 1 hasta Nfactori<strong>al</strong>=factori<strong>al</strong>*ifin lazoPseudocódigoDiagrama <strong>de</strong> flujoGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 13FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAPue<strong>de</strong> observarse en estos ejemplos que el diagrama <strong>de</strong> flujo es más voluminoso que elpseudocódigo. También es más difícil <strong>de</strong> modificar.Por otro lado el pseudocódigo se pue<strong>de</strong> escribir con un editor <strong>de</strong> texto, mientras que elpseudocódigo necesita un editor gráfico. Por estos motivos, es norm<strong>al</strong>mente más recomendable elpseudocódigo, aunque hay <strong>al</strong>gunos problemas cuya natur<strong>al</strong>eza se expresa mejor mediantediagrama <strong>de</strong> flujo.Cuando se <strong>de</strong>scribe un <strong>al</strong>goritmo tanto mediante diagrama <strong>de</strong> flujo como mediante pseudolenguaje,se suele comenzar con una <strong>de</strong>scripción a nivel <strong>al</strong>to, con instrucciones gener<strong>al</strong>es que es preciso<strong>de</strong>sarrollar en conjuntos <strong>de</strong> instrucciones más simples y precisas. Por tanto, en estos casos, sesuele re<strong>al</strong>izar un proceso <strong>de</strong> refinamiento paso a paso, en el que el <strong>al</strong>goritmo se <strong>de</strong>scribe con unnivel <strong>de</strong> <strong>de</strong>t<strong>al</strong>le cada vez mayor. Las transparencias siguientes muestran un ejemplo <strong>de</strong> esto.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 14FACULTAD DE CIENCIAS6/nov/08


Ejemplo <strong>de</strong> refinamiento pasoa pasoUNIVERSIDAD DE CANTABRIAProblema <strong>de</strong> 'coloreado' <strong>de</strong> un grafo <strong>de</strong> forma que:• dos vértices contiguos no sean <strong>de</strong>l mismo color• se minimice el número <strong>de</strong> colores1 53 Una solución:Rojo => 1,3,42Ver<strong>de</strong> => 5,24La solución óptima sólo se consigue probando todas lasposibilida<strong>de</strong>sExisten <strong>al</strong>goritmos heurísticos para buscar una soluciónbuenaGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 15FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAEl problema <strong>de</strong>l coloreado <strong>de</strong> grafos tiene muchas aplicaciones. Por ejemplo, se pue<strong>de</strong> usar paradiseñar un sistema <strong>de</strong> semáforos en el que el objetivo es obtener un conjunto, lo más pequeñoposible, <strong>de</strong> giros permitidos para asociar una fase <strong>de</strong> los semáforos a cada grupo.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 16FACULTAD DE CIENCIAS6/nov/08


Algoritmo VorazUNIVERSIDAD DE CANTABRIADescrito mediante lenguaje natur<strong>al</strong>:1. Seleccionar un vértice no coloreado aún, y asignarle uncolor2. Recorrer la lista <strong>de</strong> vértices sin colorear. Para cada uno <strong>de</strong>ellos <strong>de</strong>terminar si tiene un arco conectándolo con cu<strong>al</strong>quierotro vértice coloreado con el nuevo color. Si no existet<strong>al</strong> arco, colorear ese vértice con el nuevo colorHay que repetir el <strong>al</strong>goritmo hasta que no que<strong>de</strong>n vértices sincolorearGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 17FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAUn posible <strong>al</strong>goritmo heurístico es el conocido como <strong>al</strong>goritmo voraz, que se pue<strong>de</strong> <strong>de</strong>scribir en unaprimera instancia mediante lenguaje natur<strong>al</strong>:1. Seleccionar un vértice no coloreado aún, y asignarle un color2. Recorrer la lista <strong>de</strong> vértices sin colorear. Para cada uno <strong>de</strong> ellos <strong>de</strong>terminar si tiene un arcoconectándolo con cu<strong>al</strong>quier otro vértice coloreado con el nuevo color. Si no existe t<strong>al</strong> arco,colorear ese vértice con el nuevo colorEste <strong>al</strong>goritmo voraz, por ejemplo, no encontraría la solución indicada arriba si se recorren losvértices según el or<strong>de</strong>n <strong>de</strong> su numeración, sino que asignaría:• Rojo => 1,2• Ver<strong>de</strong> => 3,4• Azul => 5Que es una solución peor.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 18FACULTAD DE CIENCIAS6/nov/08


Ejemplo <strong>de</strong> refinamiento(cont.)UNIVERSIDAD DE CANTABRIASe muestra aquí la primera aproximación <strong>de</strong>l pseudocódigo:<strong>al</strong>goritmo Voraz (G : in out grafo; nuevo_color : out lista) es-- Asigna a la lista <strong>de</strong> vértices nuevo_color los vértices-- <strong>de</strong>l grafo G a los que se les pue<strong>de</strong> dar el mismo colorcomienzonuevo_color := vacíolazo para cada vértice v no coloreado en Gif v no es adyacente a ningún vertice en nuevo_color thencolorea vaña<strong>de</strong> v a nuevo_colorend iffin <strong>de</strong> lazofin VorazGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 19FACULTAD DE CIENCIAS6/nov/08Segunda aproximaciónUNIVERSIDAD DE CANTABRIA<strong>al</strong>goritmo Voraz (G : in out grafo; nuevo_color : out lista) es-- Asigna a la lista <strong>de</strong> vértices nuevo_color, los vértices-- <strong>de</strong>l grafo G a los que se les pue<strong>de</strong> dar el mismo colorcomienzonuevo_color := vacíofor cada vértice v no coloreado en G loopencontrado := f<strong>al</strong>solazo para cada vértice w en nuevo_colorifhay arco entre v y w thenencontrado:=ciertoend iffin lazoif encontrado = f<strong>al</strong>so thencolorea vaña<strong>de</strong> v a nuevo_colorend iffin lazofin VorazGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 20FACULTAD DE CIENCIAS6/nov/08


4. Tiempo <strong>de</strong> ejecución <strong>de</strong> un<strong>al</strong>goritmoUNIVERSIDAD DE CANTABRIAEntre los criterios a tener en cuenta <strong>al</strong> diseñar o elegir un<strong>al</strong>goritmo están su complejidad, y su tiempo <strong>de</strong> ejecuciónEl tiempo <strong>de</strong> ejecución <strong>de</strong>pen<strong>de</strong> <strong>de</strong> factores variados y, muyen particular, <strong>de</strong>l tamaño <strong>de</strong>l problemaEl tiempo <strong>de</strong> ejecución pue<strong>de</strong> ser:• exacto: es muy difícil <strong>de</strong> pre<strong>de</strong>cir;- ni siquiera midiéndolo• predicción <strong>de</strong>l ritmo <strong>de</strong> crecimiento <strong>de</strong>l tiempo <strong>de</strong> ejecucióncon respecto <strong>al</strong> tamaño <strong>de</strong>l problema- medida aproximadaGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 21FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAAl re<strong>al</strong>izar la implementación <strong>de</strong> un programa, es preciso en muchas ocasiones buscar una solución<strong>de</strong> compromiso entre dos aspectos:• El <strong>al</strong>goritmo <strong>de</strong>be ser fácil <strong>de</strong> enten<strong>de</strong>r, codificar y corregir.• El <strong>al</strong>goritmo <strong>de</strong>be ser lo más rápido posible.Cuando el programa se escribe para utilizarlo unas pocas veces, es más importante la primerapremisa, ya que el tiempo y esfuerzo <strong>de</strong> programación es lo más costoso. Sin embargo, cuando unprograma se va a utilizar a menudo el costo <strong>de</strong> la ejecución <strong>de</strong>l programa es mayor que el <strong>de</strong><strong>de</strong>sarrollo, y se hace más importante la segunda premisa.El tiempo exacto <strong>de</strong> ejecución <strong>de</strong> los programas es muy difícil <strong>de</strong> c<strong>al</strong>cular, ya que <strong>de</strong>pen<strong>de</strong> <strong>de</strong>:• Los datos <strong>de</strong> entrada <strong>al</strong> programa• C<strong>al</strong>idad <strong>de</strong>l código generado por el compilador• Natur<strong>al</strong>eza y velocidad <strong>de</strong> las instrucciones <strong>de</strong> la máquina.• Complejidad natur<strong>al</strong> <strong>de</strong>l <strong>al</strong>goritmo que soporta el programa.Sin embargo, es más fácil <strong>de</strong> c<strong>al</strong>cular la <strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong>l tiempo con la cantidad <strong>de</strong> datos <strong>de</strong>entrada, es <strong>de</strong>cir, el tamaño <strong>de</strong>l problema.GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 22FACULTAD DE CIENCIAS6/nov/08


La “tiranía” <strong>de</strong>l ritmo <strong>de</strong>crecimientoUNIVERSIDAD DE CANTABRIA30002 n n 3 /25n 2 100nT(n)2000100001 6 11 16 21 26nGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 23FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIALa gráfica <strong>de</strong> arriba muestra un diagrama <strong>de</strong> diversos tipos <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias tempor<strong>al</strong>es conrespecto a n, que es el número <strong>de</strong> datos a procesar por el programa, es <strong>de</strong>cir, el tamaño <strong>de</strong>lproblema. Para pocos datos la curva <strong>de</strong> tipo line<strong>al</strong> (100n) es peor que las otras, pero cuando elnúmero <strong>de</strong> datos es <strong>al</strong>to, el tiempo <strong>de</strong> ejecución <strong>de</strong> las otras gráficas es prácticamente inabordableDe la gráfica anterior se <strong>de</strong>spren<strong>de</strong> que el ritmo <strong>de</strong> crecimiento <strong>de</strong>termina incluso el tamaño <strong>de</strong> losproblemas que se pue<strong>de</strong>n resolver con ese <strong>al</strong>goritmo sobre un computador. Incluso concomputadores mucho más rápidos, si el ritmo <strong>de</strong> crecimiento es <strong>de</strong>l tipo 2 n o una potencia entera <strong>de</strong>n <strong>al</strong>ta (n 4 , n 5 , etc.), el problema es prácticamente irresoluble en un tiempo razonable:• Por ejemplo, para la gráfica anterior con 25 datos, y suponiendo que los tiempos <strong>de</strong> ejecuciónestán en milisegundos, los resultados son:Función n=25 n=50100n 2.5 seg 5.0 seg5n 2 3.12 seg 12.5 segn 3 /2 7.81 seg 62.5 seg2 n 33554.43 seg 35677 añosGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 24FACULTAD DE CIENCIAS6/nov/08


5. La notación O(n)UNIVERSIDAD DE CANTABRIAEl tiempo <strong>de</strong> ejecución <strong>de</strong>pen<strong>de</strong> no sólo <strong>de</strong> la cantidad <strong>de</strong>datos (n) sino también <strong>de</strong> cuáles son los datos; por ellodistinguimos:• tiempo <strong>de</strong> peor caso: T(n)• tiempo promedio: T avg (n)Para expresar los ritmos <strong>de</strong> crecimiento se suele usar lanotación O(n):• <strong>de</strong>cimos que T(n) es O(f(n)) si existen constantes c y n 0 t<strong>al</strong>esque T(n)≤c⋅f(n) para todo n≥n 0La notación O(n) muestra una cota superior <strong>al</strong> ritmo <strong>de</strong>crecimiento <strong>de</strong> un <strong>al</strong>goritmoGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 25FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAEl tiempo <strong>de</strong> ejecución se manifiesta habitu<strong>al</strong>mente como una función <strong>de</strong>l número <strong>de</strong> datos <strong>de</strong>entrada, T(n), don<strong>de</strong> n es el número <strong>de</strong> datos.Las unida<strong>de</strong>s <strong>de</strong> T(n) serán inespecíficas, aunque pue<strong>de</strong>n interpretarse como el número <strong>de</strong>instrucciones a ejecutar sobre un computador.En muchos programas el tiempo <strong>de</strong> ejecución es función <strong>de</strong> la entrada particular y no sólo <strong>de</strong> sudimensión. Entonces T(n) será el tiempo <strong>de</strong> ejecución <strong>de</strong>l peor caso. También se pue<strong>de</strong> consi<strong>de</strong>rarel tiempo <strong>de</strong> ejecución medio, sobre todas las entradas posibles <strong>de</strong> dimensión n: T avg (n). Sinembargo, la ev<strong>al</strong>uación <strong>de</strong>l tiempo <strong>de</strong> ejecución medio es norm<strong>al</strong>mente muy difícil <strong>de</strong> re<strong>al</strong>izar.La notación utilizada para representar la función T(n) es gener<strong>al</strong>mente la notación O(n).Se dice queT(n) es O(f(n)) si existen constantes positivas c y n o t<strong>al</strong>es que T(n)≤c⋅f(n) para cu<strong>al</strong>quier n≥n o .Por ejemplo la función T(n) = 3n 3 +2n 2 es O(n 3 ). Basta hacer c=5 y n o =0 para comprobarlo,3n 3 +2n 2 ≤ 5n 3En <strong>de</strong>finitiva, cuando <strong>de</strong>cimos que T(n) es O(f(n)), esto significa que f(n) es el límite <strong>de</strong> la velocidad<strong>de</strong> crecimiento <strong>de</strong> T(n).GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 26FACULTAD DE CIENCIAS6/nov/08


La notación Ω(n)UNIVERSIDAD DE CANTABRIATambién se pue<strong>de</strong> expresar un límite inferior <strong>al</strong> ritmo <strong>de</strong>crecimiento <strong>de</strong> T(n) mediante la notación Ω(n):• <strong>de</strong>cimos que T(n) es Ω(g(n)) si existe una constante c t<strong>al</strong> queT(n)≥c.g(n) para un número infinito <strong>de</strong> v<strong>al</strong>ores <strong>de</strong> nRecordar siempre que tanto O(n) como Ω(n) son medidasrelativas, no absolutasGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 27FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIATambién se pue<strong>de</strong> especificar un límite inferior para la función T(n) mediante la notación Ω(g(n)),que significa que existe una constante c t<strong>al</strong> que T(n) ≥c⋅g(n) para un número infinito <strong>de</strong> v<strong>al</strong>ores <strong>de</strong>n. Por ejemplo, T(n) = n 3 + 2n 2 es Ω(n 3 ). Basta probar para c=1 y n>0.Al comparar los tiempos <strong>de</strong> ejecución <strong>de</strong> diversos <strong>al</strong>goritmos es preciso tener en cuenta el número<strong>de</strong> entradas n que se va a aplicar, pero también es preciso tener en cuenta que tanto las notacionesO(n) como Ω(n) no son absolutas.Por ejemplo, supongamos dos <strong>al</strong>goritmos cuyos tiempos <strong>de</strong> ejecución son O(n 2 ) y O(n 3 ). Enprincipio el segundo presenta un tiempo <strong>de</strong> ejecución peor. Sin embargo es preciso tener en cuent<strong>al</strong>as constantes <strong>de</strong> proporcion<strong>al</strong>idad <strong>de</strong>bidas <strong>al</strong> compilador, la máquina y el propio <strong>al</strong>goritmo.• Supongamos que estas constantes son 100n 2 y 5n 3 . En este caso el segundo <strong>al</strong>goritmo serámejor para un número <strong>de</strong> datos n


Cálculo <strong>de</strong>l tiempo <strong>de</strong>ejecución <strong>de</strong> un programaUNIVERSIDAD DE CANTABRIARegla <strong>de</strong> las sumas:• si T 1 (n) es O(f(n)) y T 2 (n) es O(g(n)), entonces• T 1 (n)+T 2 (n) es O(max(f(n),g(n)))Es <strong>de</strong>cir, que la suma <strong>de</strong> los tiempos <strong>de</strong> ejecución <strong>de</strong> dos<strong>al</strong>goritmos tiene un ritmo <strong>de</strong> crecimiento igu<strong>al</strong> <strong>al</strong> <strong>de</strong>l máximo<strong>de</strong> los dosPor ejemplo, para tiempos polinómicos T(n)=an p +bn p-1 +...• entonces T(n) es O(n p )GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 29FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAEn ocasiones, <strong>de</strong>terminar el tiempo <strong>de</strong> ejecución <strong>de</strong> un programa con un factor constante <strong>de</strong>diferencia, no es una tarea excesivamente difícil utilizando la notación O(n).Reglas <strong>de</strong> las sumas: Suponer que Ta(n) y Tb(n) son los tiempos <strong>de</strong> ejecución <strong>de</strong> dos fragmentos<strong>de</strong> programa A y B, y que Ta(n) es O(f(n)) y Tb(n) es O(g(n)). Entonces el tiempo <strong>de</strong> ejecución <strong>de</strong> Aseguido <strong>de</strong>l <strong>de</strong> B, Ta(n)+T(b(n), viene dado por,O(max(f(n),g(n))Para ver la razón pue<strong>de</strong> observarse que para <strong>al</strong>gunas constantes ca, cb, na, nb,sin ≥na => Ta(n) ≤ ca⋅f(n) y si n ≥ nb => Tb(n) ≤ cb⋅g(n)suponiendo que n ≥ n 0 = max(na,nb) entonces Ta(n)+Tb(n) ≤ ca⋅f(n)+cb⋅g(n). Por tanto se concluyeque,sin ≥ n 0 => Ta(n)+Tb(n) ≤ (ca+cb)max(f(n),g(n))Es <strong>de</strong>cir que cuando se ejecuten, secuenci<strong>al</strong>mente, varias partes <strong>de</strong> un programa y cada una <strong>de</strong> laspartes tiene una O(n) distinta, la ejecución secuenci<strong>al</strong> <strong>de</strong> ambas será <strong>de</strong> la forma O(<strong>de</strong>l máximo).GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 30FACULTAD DE CIENCIAS6/nov/08


Cálculo <strong>de</strong>l tiempo <strong>de</strong> ejecución<strong>de</strong> un programa (cont.)UNIVERSIDAD DE CANTABRIARegla <strong>de</strong> los productos:• si T 1 (n) es O(f(n)) y T 2 (n) es O(g(n)), entonces• T 1 (n)⋅T 2 (n) es O((f(n)⋅g(n)))Es <strong>de</strong>cir, que el producto <strong>de</strong> los tiempos <strong>de</strong> ejecución <strong>de</strong> dos<strong>al</strong>goritmos (p.e. cuando uno está anidado en el otro), tiene unritmo <strong>de</strong> crecimiento igu<strong>al</strong> <strong>al</strong> producto <strong>de</strong> los dosPor ejemplo si T(n) es O(c⋅f(n)) entonces también es O(f(n)), yaque c es O(1)GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 31FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIARegla <strong>de</strong> los productos:La regla <strong>de</strong> los productos se plantea en términos parecidos, es <strong>de</strong>cir si Ta(n) y Tb(n) son <strong>de</strong> la formaO(f(n)) y O(g(n)) respectivamente, entonces Ta(n)Tb(n) es O(f(n)g(n)).La prueba es tot<strong>al</strong>mente similar <strong>al</strong> caso anterior. Cabe señ<strong>al</strong>ar, a partir <strong>de</strong> esta regla que O(cf(n)),siendo c cu<strong>al</strong>quier constante positiva, significa lo mismo que O(f(n)). Por ejemplo, O(n 2 /2) es lomismo que O(n 2 ).GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 32FACULTAD DE CIENCIAS6/nov/08


Ritmos <strong>de</strong> crecimiento máshabitu<strong>al</strong>esUNIVERSIDAD DE CANTABRIA1. O(1), o constante2. O(log(n)), o logarítmico3. O(n), o line<strong>al</strong>4. O(n⋅log(n))5. O(n 2 ), o cuadrático6. O(n x ), o polinómico7. O(2 n ), o exponenci<strong>al</strong>GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 33FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIALa tabla que aparece a continuación muestra v<strong>al</strong>ores para los ritmos <strong>de</strong> crecimiento más habitu<strong>al</strong>es.Pue<strong>de</strong> observarse que para v<strong>al</strong>ores <strong>de</strong> N gran<strong>de</strong>s, la <strong>de</strong>pen<strong>de</strong>ncia logarítmica muestra tiempos muybajos. La <strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong>l tipo n⋅log(n) no crece <strong>de</strong>masiado con respecto <strong>al</strong> caso line<strong>al</strong>. En cambio,las <strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> tipo polinómico crecen muy <strong>de</strong>prisa, y las <strong>de</strong>pen<strong>de</strong>ncias exponenci<strong>al</strong>es sonintratables.n 1 log(n) n⋅log(n) n 2128 1 7 896 16384256 1 8 2048 65536512 1 9 4608 2621441024 1 10 10240 10485762048 1 11 22528 41943044096 1 12 49152 167772168192 1 13 106496 6710886416384 1 14 229376 26843545632768 1 15 491520 1073741824GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 34FACULTAD DE CIENCIAS6/nov/08


Pistas para el <strong>análisis</strong>UNIVERSIDAD DE CANTABRIAInstrucciones simples (asignación y op. aritméticas): O(1)Secuencia <strong>de</strong> instrucciones simples: O(max(1,1,1)) = O(1)Instrucción condicion<strong>al</strong>:• si es un “if” simple y no se conoce el v<strong>al</strong>or <strong>de</strong> la condición,se supone que la parte condicion<strong>al</strong> se ejecuta siempre• si es un “if” con parte “else” y no se conoce el v<strong>al</strong>or <strong>de</strong> lacondición, se elige la que más tar<strong>de</strong> <strong>de</strong> las dos partesLazo: número <strong>de</strong> veces, por lo que tar<strong>de</strong>n sus instruccionesProcedimientos recursivos: número <strong>de</strong> veces que se llama así mismo, por lo que tarda cada vezGRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 35FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAEs <strong>de</strong> señ<strong>al</strong>ar que no existen reglas gener<strong>al</strong>es y por tanto, aunque en ocasiones es relativamentesimple encontrar un límite superior <strong>de</strong>l tiempo <strong>de</strong> ejecución <strong>de</strong> un programa, en ocasiones pue<strong>de</strong>ser una tarea sumamente compleja.Algunas reglas que se <strong>de</strong>ben aplicar con cautela son:1. El tiempo <strong>de</strong> ejecución <strong>de</strong> cada asignación, lectura o escritura es O(1). Solo en raras ocasionespue<strong>de</strong>n re<strong>al</strong>izarse estas operaciones sobre arrays arbitrariamente gran<strong>de</strong>s.2. El tiempo <strong>de</strong> ejecución <strong>de</strong> una secuencia <strong>de</strong> instrucciones viene <strong>de</strong>terminado por la regla <strong>de</strong>las sumas. Esto es, el tiempo <strong>de</strong> ejecución <strong>de</strong> la secuencia es (sin tener en cuenta un factorconstante) el <strong>de</strong> la instrucción <strong>de</strong> la secuencia que más tarda.3. El tiempo <strong>de</strong> ejecución <strong>de</strong> una instrucción 'if' es el costo correspondiente a la ejecución <strong>de</strong> lasinstrucciones condicion<strong>al</strong>es, más el tiempo para ev<strong>al</strong>uar la condición O(1). En el caso <strong>de</strong> laconstrucción 'if-then-else' correspon<strong>de</strong> <strong>al</strong> tiempo máximo entre el <strong>de</strong> la condición cierta y f<strong>al</strong>sa.4. El tiempo para ejecutar un lazo es la suma, sobre el número <strong>de</strong> veces que se ejecuta, <strong>de</strong>ltiempo empleado por el cuerpo, más el tiempo empleado en ev<strong>al</strong>uar la condición, queusu<strong>al</strong>mente es O(1). Despreciando factores constantes, este tiempo es, a menudo, el producto<strong>de</strong>l número <strong>de</strong> veces que se ejecuta por el tiempo para la ejecución <strong>de</strong> su cuerpo.5. Cuando existen procedimientos en nuestro programa, se comienza la ev<strong>al</strong>uación por aquellosque no llaman a otros procedimientos, es <strong>de</strong>cir por la parte más interna.6. Cuando el procedimiento es recursivo, lo usu<strong>al</strong> es consi<strong>de</strong>rar un tiempo <strong>de</strong>sconocido T(n) parael procedimiento (don<strong>de</strong> n es la medida <strong>de</strong> la dimensión <strong>de</strong> los argumentos <strong>de</strong> llamada) y acontinuación tratar <strong>de</strong> encontrar una función <strong>de</strong> recurrencia para T(n).GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 36FACULTAD DE CIENCIAS6/nov/08


6. Ejemplo <strong>de</strong> <strong>análisis</strong>UNIVERSIDAD DE CANTABRIAAn<strong>al</strong>izar el tiempo <strong>de</strong> ejecución <strong>de</strong>l siguiente <strong>al</strong>goritmo:procedure Burbuja(n : in Positive;A :in out array (Positive range ) of Integer) istempor<strong>al</strong> : Integer;begin(1) for i in 1..n-1 loop(2) for j in reverse i+1..n loop(3) if A(j-1) > A(j) then-- intercambia A(j-1) y A(j)(4) tempor<strong>al</strong> := A(j-1);(5) A(j-1) := A(j);(6) A(j) := tempor<strong>al</strong>;end if;end loop;end loop;end Burbuja;GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 37FACULTAD DE CIENCIAS6/nov/08Notas:UNIVERSIDAD DE CANTABRIAConsi<strong>de</strong>rar el procedimiento 'burbuja' <strong>de</strong> arriba que or<strong>de</strong>na un array <strong>de</strong> enteros en or<strong>de</strong>n creciente.En este ejemplo, el nº <strong>de</strong> elementos a or<strong>de</strong>nar es la medida <strong>de</strong> la dimensión <strong>de</strong> entrada. Vamos aan<strong>al</strong>izar el programa <strong>de</strong>s<strong>de</strong> el interior hacia el exterior,• Cada instrucción <strong>de</strong> asignación toma una cantidad <strong>de</strong> tiempo constante, in<strong>de</strong>pendiente <strong>de</strong> ladimensión <strong>de</strong> entrada, es <strong>de</strong>cir, cada instrucción (4), (5) y (6) toma un tiempo <strong>de</strong> la forma O(1)y por tanto por la regla <strong>de</strong> la suma, la ejecución secuenci<strong>al</strong> <strong>de</strong> este grupo <strong>de</strong> instrucciones es<strong>de</strong> la formaO(max(1,1,1))=(1).• Igu<strong>al</strong>mente ocurre con la instrucción if y aunque no conocemos cuando se ejecuta su cuerpo,po<strong>de</strong>mos suponer el pero caso, es <strong>de</strong>cir siempre, pero nuevamente eso sólo implica que elgrupo <strong>de</strong> instrucciones (3)-(6) toma un tiempo O(1).• El lazo que comienza en la línea (2) y abarca hasta la línea (6) tiene un cuerpo que toma untiempo <strong>de</strong> la forma O(1) en cada iteración, y como toma n-i iteraciones, el tiempo gastado enese lazo es O((n-i)⋅1) que es O(n-i).• El último lazo que contiene todas las instrucciones ejecutables <strong>de</strong>l programa, se ejecuta n-1veces, <strong>de</strong> forma que el tiempo tot<strong>al</strong> <strong>de</strong> ejecución esta limitado superiormente por:que es O(n 2 ).n – 11∑ ( n – i)= --n( n–1)=2i = 1n 2----2n– --2GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 38FACULTAD DE CIENCIAS6/nov/08


Ejemplo <strong>de</strong> <strong>análisis</strong> recursivoUNIVERSIDAD DE CANTABRIAfunction Factori<strong>al</strong> (n : in Natur<strong>al</strong>)return Natur<strong>al</strong> isbegin(1) if n 1• T(n)=d si n≤1si hacemos lo mismo para n>2, n>3, ..,n>i, tendremos,• T(n) =i⋅c + T(n-i) si n > ipor último, cuando i=n-1,• T(n) = c(n-1) + T(1) = c(n-1) + dy por tanto T(n) es <strong>de</strong>l tipo O(n).GRUPO DE COMPUTADORES Y TIEMPO REAL © Javier Gutiérrez, Michael González 40FACULTAD DE CIENCIAS6/nov/08

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!