16complejidad-090401194906-phpapp02

45
Complejidad Complejidad Apoyo SSD5 Apoyo SSD5

Upload: jorge-escalona

Post on 16-Aug-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

ComplejidadComplejidadApoyo SSD5Apoyo SSD5Mtl Lourdes Cahuich Mtl Lourdes Cahuich 2 2IntroduccinIntroduccin Complejidad es la medida del uso de Complejidad es la medida del uso de algn recurso por parte de un algoritmo. algn recurso por parte de un algoritmo. Estos recursos pueden ser requerimientos Estos recursos pueden ser requerimientos de almacenamiento, memoria o tiempo. de almacenamiento, memoria o tiempo. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 3 3Tiempo de un algoritmoTiempo de un algoritmo Por lo general, la cantidad de tiempo que Por lo general, la cantidad de tiempo que un algoritmo toma para completarse es el un algoritmo toma para completarse es el recurso ms frecuentemente encontrado recurso ms frecuentemente encontrado en el contexto de complejidaden el contexto de complejidadMtl Lourdes Cahuich Mtl Lourdes Cahuich 4 4Anlisis AsintticoAnlisis Asinttico El anlisis asinttico es la determinacin El anlisis asinttico es la determinacin de la cantidad de recursos usados por un de la cantidad de recursos usados por un algoritmo.algoritmo. Usualmente, este recurso es el tiempo de Usualmente, este recurso es el tiempo de ejecucin del algoritmo.ejecucin del algoritmo. El tiempo de ejecucin de un programa es El tiempo de ejecucin de un programa es sobre todo una cantidad fsica. sobre todo una cantidad fsica. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 5 5Anlisis asintticoAnlisis asinttico En principio, podemos detenernos a mirar En principio, podemos detenernos a mirar y ver cunto tiempo toma el programa y ver cunto tiempo toma el programa para ejecutarse.para ejecutarse. De hecho, todos los sistemas De hecho, todos los sistemas computacionales soportan un reloj interno, computacionales soportan un reloj interno, y uno puede medir el tiempo de ejecucin y uno puede medir el tiempo de ejecucin an sin la ayuda de un dispositivo externo an sin la ayuda de un dispositivo externo para hacerlopara hacerloMtl Lourdes Cahuich Mtl Lourdes Cahuich 6 6Tiempo de ejecucinTiempo de ejecucin El primer aspecto a notar es que el tiempo El primer aspecto a notar es que el tiempo de ejecucin no es una cantidad fija, al de ejecucin no es una cantidad fija, al contrario, el tiempo de ejecucin en casi contrario, el tiempo de ejecucin en casi todos los programas depende de la todos los programas depende de la entrada especfica proporcionada al entrada especfica proporcionada al programa. programa. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 7 7Tiempo de ejecucinTiempo de ejecucin Los tiempos de ejecucin pueden diferir Los tiempos de ejecucin pueden diferir drsticamente. drsticamente. Sin embargo, se acostumbra referir el Sin embargo, se acostumbra referir el tiempo de ejecucin de un programa como tiempo de ejecucin de un programa como una entrada de tamao una entrada de tamao nn, significando el , significando el peor tiempo posible de ejecucin para peor tiempo posible de ejecucin para todas esas entradas. todas esas entradas. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 8 8Complejidad en el peor casoComplejidad en el peor caso Esta medida es llamada Esta medida es llamada complejidad del complejidad del peor casopeor caso De forma alternativa, podemos analizar el De forma alternativa, podemos analizar el promedio de tiempo que toma procesar promedio de tiempo que toma procesar una entrada de cierto tamao, lo que es una entrada de cierto tamao, lo que es llamado complejidad del caso promedio. llamado complejidad del caso promedio. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 9 9ComplejidadComplejidad Desafortunadamente, este ltimo es ms Desafortunadamente, este ltimo es ms difcil de tratar que el primero, por lo que difcil de tratar que el primero, por lo que nos enfocaremos en la complejidad del nos enfocaremos en la complejidad del peor casopeor casoMtl Lourdes Cahuich Mtl Lourdes Cahuich 10 10Problemas para medir el tiempoProblemas para medir el tiempo Otro problema al medir el tiempo de Otro problema al medir el tiempo de ejecucin es que ste obviamente ejecucin es que ste obviamente depende mucho de la mquina usada depende mucho de la mquina usada para ejecutar el programa.para ejecutar el programa. Tambin, depende del compilador usado, Tambin, depende del compilador usado, el nivel de optimizacin, la carga de la el nivel de optimizacin, la carga de la computadora, computadora, etcetcMtl Lourdes Cahuich Mtl Lourdes Cahuich 11 11Tiempo lgico de ejecucinTiempo lgico de ejecucin Para evitar estas complicaciones, Para evitar estas complicaciones, podemos usar una medida diferente: podemos usar una medida diferente: tiempo de ejecucin lgicotiempo de ejecucin lgico, el cual es el , el cual es el nmero de pasos en la ejecucin del nmero de pasos en la ejecucin del algoritmo.algoritmo. Por "un paso" nos referimos Por "un paso" nos referimos esencialmente a un ciclo de CPU esencialmente a un ciclo de CPU Mtl Lourdes Cahuich Mtl Lourdes Cahuich 12 12Tiempo lgico de ejecucinTiempo lgico de ejecucin El contar el nmero de pasos nos permite El contar el nmero de pasos nos permite tener una medida til del tiempo de tener una medida til del tiempo de ejecucin. ejecucin. Sin embargo, si un algoritmo va a ser Sin embargo, si un algoritmo va a ser ejecutado en una computadora especfica, ejecutado en una computadora especfica, es todava necesario desarrollar medidas es todava necesario desarrollar medidas del tiempo de ejecucin en unas cuantos del tiempo de ejecucin en unas cuantos casos.casos.Mtl Lourdes Cahuich Mtl Lourdes Cahuich 13 13Cmo Determinar el Tiempo de Cmo Determinar el Tiempo de Ejecucin Lgico?Ejecucin Lgico? Es importante ignorar los pequeos Es importante ignorar los pequeos detalles y ver el comportamiento a grandetalles y ver el comportamiento a gran--escala escala Usemos un ejemplo para explicar cmo Usemos un ejemplo para explicar cmo determinar el tiempo lgico de ejecucindeterminar el tiempo lgico de ejecucinMtl Lourdes Cahuich Mtl Lourdes Cahuich 14 14Determinar el tiempo lgicoDeterminar el tiempo lgico Considera el algoritmo de ordenacin por Considera el algoritmo de ordenacin por seleccin.seleccin. De este programa, De este programa, establecer las establecer las variables locales toma un nmero variables locales toma un nmero pequeo y constante de pasos pequeo y constante de pasos Mtl Lourdes Cahuich Mtl Lourdes Cahuich 15 15Determinar el tiempo lgicoDeterminar el tiempo lgico Si recuerdan el algoritmo de ordenamiento Si recuerdan el algoritmo de ordenamiento por seleccin, cada elemento se por seleccin, cada elemento se comparaba contra todos los dems y en comparaba contra todos los dems y en cada paso se ubica un elemento en la cada paso se ubica un elemento en la posicin correspondienteposicin correspondienteMtl Lourdes Cahuich Mtl Lourdes Cahuich 16 16Determinar el tiempo lgicoDeterminar el tiempo lgico El cuerpo del bucle externo es ejecutado El cuerpo del bucle externo es ejecutado v.sizev.size() () --11veces, donde veces, donde v.sizev.size()()es el nmero de elementos vector es el nmero de elementos vector Definiremos aDefiniremos anncomo el nmero de como el nmero de elementos en el vector elementos en el vector Mtl Lourdes Cahuich Mtl Lourdes Cahuich 17 17Determinar el tiempo lgicoDeterminar el tiempo lgico Durante su primera ejecucin, el bucle Durante su primera ejecucin, el bucle interno itera (n interno itera (n --1) veces.1) veces. Durante su segunda ejecucin (cuando Durante su segunda ejecucin (cuando iiiguala a 1), el bucle interno itera (n iguala a 1), el bucle interno itera (n --2) 2) veces. veces. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 18 18Determinar el tiempo lgicoDeterminar el tiempo lgico El cuerpo de este bucle interno contiene El cuerpo de este bucle interno contiene un estatutoun estatuto--ifif. . Este estatuto puede ser ejecutado en una Este estatuto puede ser ejecutado en una cantidad constante de tiempo. cantidad constante de tiempo. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 19 19Determinar el tiempo lgicoDeterminar el tiempo lgico Por lo tanto, tenemos la siguiente suma Por lo tanto, tenemos la siguiente suma que representa el nmero de operaciones que representa el nmero de operaciones desarrolladas usando ordenacin por desarrolladas usando ordenacin por seleccin. seleccin. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 20 20Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Cada trmino de esta suma representa el Cada trmino de esta suma representa el nmero de pasos desarrollados por cada nmero de pasos desarrollados por cada iteracin del bucle externo.iteracin del bucle externo. (n (n --1) + (n 1) + (n --2) + (n 2) + (n --3) + ... + 3 + 2 + 1 3) + ... + 3 + 2 + 1 Mtl Lourdes Cahuich Mtl Lourdes Cahuich 21 21Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos La suma de esta expresin iguala a La suma de esta expresin iguala a (n2 (n2 --n) / 2n) / 2. . Resumiremos este resultado diciendo que Resumiremos este resultado diciendo que la ordenacin por seleccin es un la ordenacin por seleccin es un algoritmo cuadrticoalgoritmo cuadrtico..Mtl Lourdes Cahuich Mtl Lourdes Cahuich 22 22Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Observa que cuadrtico significa que al Observa que cuadrtico significa que al duplicar el tamao de la entrada resultar duplicar el tamao de la entrada resultar en un incremento cudruple en el tiempo en un incremento cudruple en el tiempo de ejecucin de ejecucin Mtl Lourdes Cahuich Mtl Lourdes Cahuich 23 23Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Una entrada diez veces ms grande Una entrada diez veces ms grande tomar cien veces ms en procesarse. tomar cien veces ms en procesarse. En otras palabras, los algoritmos En otras palabras, los algoritmos cuadrticos no escalan muy bien las cuadrticos no escalan muy bien las entradas grandes.entradas grandes.Mtl Lourdes Cahuich Mtl Lourdes Cahuich 24 24Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Lo opuesto a los Lo opuesto a los algoritmos cuadrticosalgoritmos cuadrticosson los son los algoritmos logartmicosalgoritmos logartmicos. . En los En los algoritmos logartmicosalgoritmos logartmicos, el nmero , el nmero de pasos requeridos para solucionar un de pasos requeridos para solucionar un problema no se incrementa de manera problema no se incrementa de manera significativa cuando el nmero de significativa cuando el nmero de entradas se incrementa dramticamente. entradas se incrementa dramticamente. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 25 25Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Un ejemplo de algoritmo logartmico es Un ejemplo de algoritmo logartmico es una bsqueda binaria.una bsqueda binaria. En una bsqueda binaria, el nmero de En una bsqueda binaria, el nmero de elementos (la entrada) en donde se elementos (la entrada) en donde se realiza la bsqueda se reduce a la mitad realiza la bsqueda se reduce a la mitad en cada pasada. en cada pasada. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 26 26Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Esto permite que la bsqueda binaria Esto permite que la bsqueda binaria trabaje muy bien an en conjuntos de trabaje muy bien an en conjuntos de datos muy grandes.datos muy grandes.Mtl Lourdes Cahuich Mtl Lourdes Cahuich 27 27Notacin Notacin BigBig--OhOh La notacin La notacin BigBig--OhOhofrece una buena ofrece una buena opcin para comparar el tiempo de opcin para comparar el tiempo de ejecucin de los algoritmos. ejecucin de los algoritmos. En un anlisis asinttico, usamos la En un anlisis asinttico, usamos la notacin notacin BigBig--OhOhpara referirnos al orden para referirnos al orden ms alto, o trmino ms dominante del ms alto, o trmino ms dominante del anlisis del tiempo de ejecucin de una anlisis del tiempo de ejecucin de una funcin funcin Mtl Lourdes Cahuich Mtl Lourdes Cahuich 28 28BigBigOhOh(orden)(orden) La propiedad ms importante de la La propiedad ms importante de la notacin notacin BigBig--OhOhes que nos permite es que nos permite ignorar trminos y constantes de orden ignorar trminos y constantes de orden bajo, como en el siguiente ejemplo.bajo, como en el siguiente ejemplo. 500n500n3 3+ 10n+ 10n22 + 17n + 121345 = + 17n + 121345 = O(nO(n3 3) ) Mtl Lourdes Cahuich Mtl Lourdes Cahuich 29 29Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos En el ejemplo anterior, el trmino de orden En el ejemplo anterior, el trmino de orden ms alto en la ecuacin del tiempo de ms alto en la ecuacin del tiempo de ejecucin es 500nejecucin es 500n3 3. . Como lo hicimos con los trminos de Como lo hicimos con los trminos de orden bajo, tambin podemos ignorar la orden bajo, tambin podemos ignorar la constante en este trmino y establecer constante en este trmino y establecer que el tiempo de ejecucin es que el tiempo de ejecucin es O(nO(n3 3))..Mtl Lourdes Cahuich Mtl Lourdes Cahuich 30 30Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos La mayora de los algoritmos que encontramos La mayora de los algoritmos que encontramos caen en alguna de las siguientes clases.caen en alguna de las siguientes clases.O(1) O(1) tiempo constante tiempo constanteO(log(n O(log(n)) )) tiempo logartmico tiempo logartmicoO(n O(n) ) tiempo lineal tiempo linealO(n log(n)) O(n log(n)) tiempo "n tiempo "n- -log log- -n"n" O(n O(n2 2) ) tiempo cuadrtico tiempo cuadrticoO(n O(n3 3) ) tiempo cbico tiempo cbicoO(2 O(2n n) ) tiempo exponencial tiempo exponencialMtl Lourdes Cahuich Mtl Lourdes Cahuich 31 31Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Los algoritmos que tiene un tiempo de Los algoritmos que tiene un tiempo de ejecucin arriba de ejecucin arriba de O( n O( n log(nlog(n))))escalan escalan muy bien a instancias de problemas muy bien a instancias de problemas grandes. grandes. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 32 32Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Los algoritmos cuadrticos y ms an los Los algoritmos cuadrticos y ms an los algoritmos cbicos, muestran un algoritmos cbicos, muestran un desempeo muy degradado cuando la desempeo muy degradado cuando la entrada es grande.entrada es grande. Por ltimo, los algoritmos exponenciales Por ltimo, los algoritmos exponenciales pueden ser usados solamente con pueden ser usados solamente con entradas muy pequeas entradas muy pequeas Mtl Lourdes Cahuich Mtl Lourdes Cahuich 33 33Diferencias en los tiempos de los Diferencias en los tiempos de los algoritmosalgoritmos Es importante expresar el tiempo de Es importante expresar el tiempo de ejecucin lgico en trminos del tiempo ejecucin lgico en trminos del tiempo fsico, usando unidades familiares como fsico, usando unidades familiares como segundos, minutos, horas, etc., para tener segundos, minutos, horas, etc., para tener una idea de lo que estas caracterizaciones una idea de lo que estas caracterizaciones realmente significan. realmente significan. Mtl Lourdes Cahuich Mtl Lourdes Cahuich 34 34 Primero, consideremos un algoritmo Primero, consideremos un algoritmo O(nO(nlog(nlog(n))))que toma 1 segundo en una que toma 1 segundo en una entrada de tamao 1000 entrada de tamao 1000 6.48 horas 10733.3 minutos 1062.77 minutos 10000013.3 segundos 100006.2 segundos 50002.2 segundos 20001 segundo 1000tiempo de ejecucin tamao de la entradaMtl Lourdes Cahuich Mtl Lourdes Cahuich 35 35 En comparacin, aqu se muestra un En comparacin, aqu se muestra un algoritmo cuadrtico que tambin toma 1 algoritmo cuadrtico que tambin toma 1 segundo en una entrada de tamao 1000.segundo en una entrada de tamao 1000.3.25 aos 10711.5 das 1062.77 horas 1000001.66 minutos 1000025 segundos 50004 segundos 20001 segundo 1000tiempo de ejecucin tamao de la entradaMtl Lourdes Cahuich Mtl Lourdes Cahuich 36 36 Imagina que un algoritmo exponencial Imagina que un algoritmo exponencial toma un segundo en una entrada de toma un segundo en una entrada de tamao 10. tamao 10. Podemos esperar aproximadamente los Podemos esperar aproximadamente los siguientes tiempos de ejecucin para siguientes tiempos de ejecucin para instancias ms grandes instancias ms grandes Mtl Lourdes Cahuich Mtl Lourdes Cahuich 37 37Ejecucin exponencialEjecucin exponencial4.02 1019aos 10035700 aos 5034.9 aos 401.09 aos 35 12.1 das 309.1 horas 2517.1 minutos 2032 segundos 151 segundo 10tiempo de ejecucin tamao de la entradaMtl Lourdes Cahuich Mtl Lourdes Cahuich 38 38 Desafortunadamente, existen algunos Desafortunadamente, existen algunos problemas computacionales famosos que problemas computacionales famosos que parecen requerir tiempos de ejecucin parecen requerir tiempos de ejecucin exponencialexponencial Encontrar si un circuito Encontrar si un circuito booleanobooleanocon n con n entradas puede producir siempre entradas puede producir siempre "verdadero" como resultado es uno de "verdadero" como resultado es uno de ellos: existen 2n combinaciones posibles ellos: existen 2n combinaciones posibles de entrada, y no se conocen atajos para de entrada, y no se conocen atajos para simplificar el clculo. simplificar el clculo. Cmo determinamos el Cmo determinamos el tiempo de ejecucin asinttico tiempo de ejecucin asinttico de un algoritmo? de un algoritmo? Mtl Lourdes Cahuich Mtl Lourdes Cahuich 40 40Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo cualquier secuencia de estatutos bsicos, cualquier secuencia de estatutos bsicos, como 1)tareas de tipo incorporado 2) como 1)tareas de tipo incorporado 2) operaciones de tipo incorporado (suma, operaciones de tipo incorporado (suma, multiplicacin, comparacin, incremento, multiplicacin, comparacin, incremento, decremento, operaciones decremento, operaciones booleanasbooleanas, etc.), , etc.), toman tiempo constante (toman tiempo constante (O(1)O(1)).).Mtl Lourdes Cahuich Mtl Lourdes Cahuich 41 41Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo Las llamadas a la funcin tienen que ser Las llamadas a la funcin tienen que ser contabilizadas por separado. contabilizadas por separado. Primero, est el costo de organizar la Primero, est el costo de organizar la llamada de la funcin. llamada de la funcin. Si slo se usan parmetros de referencia, Si slo se usan parmetros de referencia, este costo es este costo es O(1)O(1). . Mtl Lourdes Cahuich Mtl Lourdes Cahuich 42 42Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo Pero, si se invocaPero, si se invoca--porpor--valor, tenemos que valor, tenemos que contar el costo de copiar la entrada. contar el costo de copiar la entrada. El mismo comentario aplica para regresar El mismo comentario aplica para regresar el resultado del clculo. el resultado del clculo. Y, por supuesto, tenemos que contar la Y, por supuesto, tenemos que contar la evaluacin del cuerpo de la funcin evaluacin del cuerpo de la funcin Mtl Lourdes Cahuich Mtl Lourdes Cahuich 43 43Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo Un bucleUn bucle--forfortoma el tiempo toma el tiempo t(0) + t(1) + ... t(0) + t(1) + ... + + t(nt(n--1)1)donde donde t(kt(k))es el tiempo requerido es el tiempo requerido por el cuerpo del bucle cuando i iguala a por el cuerpo del bucle cuando i iguala a kk, en otras palabras, el tiempo requerido , en otras palabras, el tiempo requerido para completar la iteracin para completar la iteracin kkdel bucledel bucle--forforfor (for (intinti = 0; i < n; ++i)i = 0; i < n; ++i){{cuerpocuerpo} } Mtl Lourdes Cahuich Mtl Lourdes Cahuich 44 44Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo Si el cuerpo se toma el tiempo Si el cuerpo se toma el tiempo O(1)O(1), el , el tiempo del bucle resulta en tiempo del bucle resulta en O(nO(n)). . Pero, si el cuerpo se toma el tiempo Pero, si el cuerpo se toma el tiempo O(iO(i)), , obtenemos obtenemos O(nO(n2 2))para el bucle completo. para el bucle completo. Por ltimo, si el cuerpo se toma el tiempo Por ltimo, si el cuerpo se toma el tiempo O(iO(i2 2))obtenemos obtenemos O(nO(n3 3))para el bucle para el bucle completo completo Mtl Lourdes Cahuich Mtl Lourdes Cahuich 45 45Determinar el tiempo en cada Determinar el tiempo en cada algoritmoalgoritmo Otras estructuras de bucle pueden ser Otras estructuras de bucle pueden ser manejadas de la misma forma.manejadas de la misma forma. Agrega el costo de cada ejecucin Agrega el costo de cada ejecucin individual del cuerpo del bucle, tomando individual del cuerpo del bucle, tomando en cuenta que este costo puede depender en cuenta que este costo puede depender de los valores de algunos parmetros del de los valores de algunos parmetros del bucle.bucle.