An alisis de algoritmos - pensamientocomputacional.org · DRAFT An alisis de algoritmos Tikal es...

25
DRAFT An´ alisis de algoritmos Tikal es uno de los mayores yacimientos arqueol´ogicos y centros urbanos de la civilizaci´on maya precolom- bina. Est´a situado en la regi´on de Pet´ en, en el territorio actual de Guatemala y forma parte del Parque Nacional Tikal que fue declarado Patrimonio de la Humanidad por Unesco en 1979.1 Seg´ un los gl´ ıfos encontrados en el yacimiento su nombre maya habr´ ıa sido Yax Mutul. Tikal fue la capital de un estado be- ligerante que se convirti´o en uno de los reinos m´as poderosos de los antiguos mayas. Aunque la arquitectura monumental del sitio se remonta hasta el siglo iv a. C., Tikal alcanz´o su apogeo durante el Per´ ıodoCl´asico, entre el 200 y el 900 d. C. Durante este tiempo, la ciudad domin´o gran parte de la regi´ on maya en el ´ambito pol´ ıtico, econ´ omico y militar, y manten´ ıa v´ ınculos con otras regiones a lo largo de Mesoam´ erica, incluso con la gran metr´opoli de Teotihuacan en el lejano Valle de M´ exico. (http://es.wikipedia.org/wiki/Tikal). palabra palabra Autor: Jorge Luis Zapotecatl L ´ opez Correo electr´ onico: [email protected] Url: www.pensamientocomputacional.org

Transcript of An alisis de algoritmos - pensamientocomputacional.org · DRAFT An alisis de algoritmos Tikal es...

DRAFT

Analisis de algoritmos

Tikal es uno de los mayores yacimientos arqueologicos y centros urbanos de la civilizacion maya precolom-bina. Esta situado en la region de Peten, en el territorio actual de Guatemala y forma parte del ParqueNacional Tikal que fue declarado Patrimonio de la Humanidad por Unesco en 1979.1 Segun los glıfosencontrados en el yacimiento su nombre maya habrıa sido Yax Mutul. Tikal fue la capital de un estado be-ligerante que se convirtio en uno de los reinos mas poderosos de los antiguos mayas. Aunque la arquitecturamonumental del sitio se remonta hasta el siglo iv a. C., Tikal alcanzo su apogeo durante el Perıodo Clasico,entre el 200 y el 900 d. C. Durante este tiempo, la ciudad domino gran parte de la region maya en el ambitopolıtico, economico y militar, y mantenıa vınculos con otras regiones a lo largo de Mesoamerica, incluso conla gran metropoli de Teotihuacan en el lejano Valle de Mexico. (http://es.wikipedia.org/wiki/Tikal).

palabra palabraAutor: Jorge Luis Zapotecatl LopezCorreo electronico: [email protected]: www.pensamientocomputacional.org

DRAFT

2

D.R. c©2014 por Insituto Nacional de Astrofısica, Optica y ElectronicaLuis Enrique Erro 1, Tonantzintla, Puebla, MexicoC.P. 72840Telefono: (222) 247.29.40Contacto: [email protected]

DRAFT

Indice general

Indice general 3

1. Analisis de algoritmos 51.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Sumatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3. Tiempos de ejecucion . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.1. Constante . . . . . . . . . . . . . . . . . . . . . . . . . 101.3.2. Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.3. Cuadratico . . . . . . . . . . . . . . . . . . . . . . . . 121.3.4. Logarıtmico . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4. Algoritmos de ordenamiento . . . . . . . . . . . . . . . . . . . 131.4.1. Insercion . . . . . . . . . . . . . . . . . . . . . . . . . . 141.4.2. QuickSort . . . . . . . . . . . . . . . . . . . . . . . . . 161.4.3. Otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.5. Algoritmos de busqueda . . . . . . . . . . . . . . . . . . . . . 191.5.1. Busqueda Lineal . . . . . . . . . . . . . . . . . . . . . 201.5.2. Binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.5.3. Tablas hash . . . . . . . . . . . . . . . . . . . . . . . . 22

1.6. Analisis de Algoritmos y el PC . . . . . . . . . . . . . . . . . 24

Bibliografıa 25

3

DRAFT

palabra

DRAFT

Capıtulo 1

Analisis de algoritmos

“Fue el tiempo que pasaste con tu rosa lo que la hizo tan importante”-Antoine de Saint-Exupery

1.1. Introduccion

Como se menciono en el capıtulo anterior, cuando un problema tiene queresolverse, posiblemente se cuente con varios algoritmos capaces de solucio-narlo. Surge la pregunta ¿Cual algoritmo se debe utilizar? Por supuesto, sedesea aplicar el mejor. Por ejemplo, un cocinero puede aplicar distintas rece-tas para preparar el mole poblano. El cocinero seleccionara la mejor recetaconsiderando el tiempo de preparacion, el costo de los ingredientes, la canti-dad de azucar que se aplica, entre otras condiciones que afectan su utilidad.Al igual que en las recetas, los algoritmos que resuelven un determinado pro-blema tienen diferentes ventajas y desventajas, relacionadas principalmentecon el tiempo de ejecucion y el espacio en memoria.

El tiempo de ejecucion concierne a la cantidad de tiempo que tarda unalgoritmo en encontrar soluciones y el espacio en memoria se relaciona conla cantidad de almacenamiento en memoria requerido por el algoritmo. Nor-malmente, el tiempo de ejecucion es considerado el criterio mas importantepara seleccionar un algoritmo. Por lo tanto, cuando se realice el analisis deun algoritmo, el termino eficiencia estara relacionado con que tan rapido seejecute un algoritmo y el que determinara su superioridad.

Para un algoritmo, una instancia es cada uno de los ejemplares quepertenecen a su dominio de definicion. Por ejemplo, considere el problema

5

DRAFT

6 CAPITULO 1. ANALISIS DE ALGORITMOS

de multiplicar dos enteros positivos. Una instancia de dicho problema es lamultiplicacion de los enteros positivos 274 y 382, y su dominio de definiciones todo el conjunto de los enteros positivos. Note que dicho conjunto tieneuna cantidad infinita de las instancias. Sin embargo, para otros problemas eldominio de definicion de instancias puede ser finito. Por ejemplo, seleccionarla posicion inicial de una casilla inicial en el juego del Tic Tac Toe (“gato”) ymarcarla con “X”o “O”(ver Figura 1.1). Un algoritmo es correcto si funcionacorrectamente para todas las instancias que el algoritmo declara resolver, enel caso de la multiplicacion, para todo el conjunto de enteros positivos.

(a) Multiplicacion. (b) Tic Tac Toe.

Figura 1.1: El numero de instancias pertenecientes al dominio de definicionde un algoritmo puede ser infinito o finito.

El tamano de una instancia es indicado por un numero entero que midede manera significativa la magnitud de sus componentes. Por ejemplo, en elcaso de la multiplicacion, el tamano de la instancia estara en terminos delnumero de dıgitos que contengan los numeros pertenecientes al ejemplar. Eltamano de la instancia 274 y 382 es 6. En el caso del problema que resuelvela suma de todos los numeros desde 1 hasta n (problema presentado en lasiguiente seccion), el tamano de la instancia se representa por n, es decir, lacantidad de numeros que se deben sumar.

Si en un problema unicamente se tiene que resolver un limitado numerode instancia y de pequeno tamano, es suficiente con seleccionar el algoritmoque sea mas sencillo de implementar, sin preocuparse por sus propiedadesteoricas. Sin embargo, si el problema exige resolver grandes conjuntos deinstancias, el analisis de que algoritmo es el mas adecuado para resolver elproblema debe realizarse de manera mas cuidadosa.

DRAFT

1.1. INTRODUCCION 7

La principal razon de construir computadoras es que procesan calculos deuna manera mas rapida y precisa que el ser humano. Ademas, dicha superio-ridad es mas notable cuando se procesan grandes cantidades de datos. Lascomputadoras son rapidas, pero no son infinitamente rapidas. Por lo tanto,los cientıficos e ingenieros de la computacion realizan continuamente esfuer-zos por descubrir algoritmos que se ejecuten de manera mas rapida. Imagineque tan diferente seria un buscador de paginas web si demorara en entregarlos resultados en el orden de minutos o horas o si su video juego favoritomostrara las imagenes cada segundo (ver Figura 1.2).

Figura 1.2: Los video juegos tiene que cumplir con el requisito de mostrar almenos 30 imagenes por segundo para que el ojo humano perciba la sensacionde fluidez. Los algoritmos utilizados para dibujar las imagenes tienen queconsiderar dicha restriccion.

Para el pensamiento computacional los algoritmos es uno de lostopicos principales como proceso de solucion de problemas. Entrelos objetivos operativos del pensamiento computacional que se re-lacionan estrechamente con los algoritmos son los siguientes:

Formular problemas de manera que permitan usar compu-tadores y otras herramientas para solucionarlos.

Automatizar soluciones mediante pensamiento algorıtmico.

Identificar, analizar e implementar posibles soluciones con elobjeto de encontrar la combinacion de pasos y recursos maseficiente y efectiva.

DRAFT

8 CAPITULO 1. ANALISIS DE ALGORITMOS

1.2. Sumatoria

Considere el problema de obtener la suma de todos los numeros de 1 a n.Una forma intuitiva de resolver dicho problema es sumar los numeros uno auno. Por ejemplo, el resultado de la serie 1, 2, 3, 4, 5, 6, 7 es 1 + 2 + 3 + 4 +5 + 6 + 7 = 28.

Figura 1.3: Friedrich Gauss nacio en Braunschweig (Alemania), fue hijo de una familia humilde. Desdemuy pequeno manifesto sus dotes en matematicas. Sus aportaciones fueron extraordinarias, realizo inves-tigaciones en Algebra, en Teorıa de Numeros, Geometrıa Diferencial, Geometrıa no Euclıdea, AnalisisMatematico, Astronomıa Teorica y en la Teorıa de la Electricidad y Magnetismo.

Una alternativa diferente es aplicar el metodo inventado por el “prıncipede las matematicas”Johann Carl Friedrich Gauss (ver figura 1.3). Una clasi-ca anectoda cuenta que el profesor J. G. Buttner estaba molesto por el malcomportamiento de su grupo de primaria y como castigo, les encomendo re-solver el mismo problema planteado anteriormente, obtener la suma de 1 a100. Supuso que les tomarıa un buen rato en terminar. Sin embargo, a los po-cos segundos de haber planteado el problema, un nino se levanto y coloco elresultado sobre el escritorio del maestro, ese nino era Gauss.

Cuando el maestro pregunto a Gauss como obtuvo el resultado, le explicoque se dio cuenta que la suma 1 + 2 + 3 + ... + 100 es equivalente a la suma:

+1 2 3 · · · 50

100 99 98 · · · 51101 101 101 · · · 101

DRAFT

1.3. TIEMPOS DE EJECUCION 9

Hay 50 pares que suman 101, por lo que concluyo que la respuesta es50 × 101 = 5050. Por lo tanto, en general si desea resolver el problema deobtener la suma de todos los numeros de 1 a n, debido a que hay n

2pares de

la suma (n + 1), la formula resultante es n(n+1)2

.Imagina que mediante la maquina del tiempo que invento Paat, Tukkul

viaja al pasado y es companero de primaria del grupo de Gauss. Si se enfren-tara a Gauss en una competencia de quien puede resolver en menor tiempoel problema de obtener la suma de los numeros de 1 a n, considerando queGauss utiliza su metodo y Tukkul realiza la suma uno por uno. En que casosTukkul ganarıa, empatarıa o perderıa si se presentan las siguientes cuestiones:

¿Que que pasarıa si n = 2?

¿Que que pasarıa si n = 10?

¿Que que pasarıa si n = 100?

Probablemente concluiste que con n = 2 Tukkul ganarıa, con n = 10Tukkul empatarıa, con n = 100, Gauss ganarıa. Ademas, quiza has notadoque a mayor cantidad de datos, Gauss seria definitivamente el vencedor. Eltiempo que demora un algoritmo en calcular la solucion de un problema, es-pecialmente considerando grandes conjuntos de datos, es un criterio esencialpara determinar su superioridad. En el caso del problema de obtener la sumade 1 a n, el metodo de Gauss es superior a sumar cada numero uno a uno.

1.3. Tiempos de ejecucion

El tiempo de ejecucion esta relacionado con el tiempo que le toma a unalgoritmo encontrar la solucion de un determinado problema y es el crite-rio que normalmente decide que algoritmo es el mejor. Para seleccionar unalgoritmo se usan dos enfoques: el enfoque empırico o el enfoque teorico.

El enfoque empırico consiste en implementar cada algoritmo en un len-guaje de programacion y realizar pruebas con numerosas instancias del pro-blema, el algoritmo que obtenga los mejores resultados sera el seleccionado.La desventaja del enfoque empırico es que si deseamos medir la eficiencia deun algoritmo en funcion del tiempo que se requiere para obtener una solu-cion, por ejemplo, en segundos, se presenta el problema que existe una grandiversidad de computadoras que toman diferentes cantidades de tiempo al

DRAFT

10 CAPITULO 1. ANALISIS DE ALGORITMOS

realizar las mismas operaciones, lo que hace imposible referirse a una medidade tiempo general. Ademas, obliga a reportar las configuraciones fısicas dela computadora donde se ejecuta el algoritmo.

Por otro lado, el enfoque teorico determinar matematicamente la can-tidad de recursos requeridos considerando el tiempo de ejecucion como lacantidad de operaciones elementales que realiza un algoritmo en funciondel tamano de la instancias de entrada. Una operacion elemental se refiere auna operacion que toma una cantidad de tiempo constante como lo son: lasuma, la multiplicacion, la division, entre otras. El tamano de la entrada delalgoritmo es una propiedad del propio algoritmo independiente de la compu-tadora en la que se ejecuta. Por ejemplo, en el caso de una multiplicacion eltamano de la entrada esta en funcion del numero de digitos que contienenlos operandos. En el caso de los algoritmos de ordenamiento el tamano de lainstancia esta determinado normalmente por la cantidad de elementos quecontiene la lista a ordenar.

A partir del analisis de las operaciones elementales que ejecuta un al-goritmo se producen ordenes que revelan la cantidad de recurso requeridospor el algoritmo. El algoritmo que tenga ordenes menores sera el selecciona-do. Para designar el orden de un algoritmo se utiliza la notacion asintotica,normalmente se utiliza la notacion O, que revela el comportamiento de losalgoritmos en el lımite, es decir, para valores suficientemente grandes en eltamano de sus instancias. Los ordenes que frecuentemente se presentan enel analisis de los algoritmos son : constante, lineal, cuadratico y logarıtmico,denotado como O(1), O(n), O(n2), O(log n), respectivamente.

1.3.1. Constante

En el caso del problema que requiere obtener la suma de 1 a n, el tamanode la entrada esta determinado por n. El algoritmo de “Gauss”que resuelvedicho problema es un algoritmo de tiempo constante debido a que no tieneque recorrer toda la lista de los numeros que se encuentran en el rango de1 a n, solo necesita la longitud de la lista. Independientemente del valor den, ya sea 10 o 10, 000, 000 de elementos, la formula n(n+1)

2siempre ejecuta 3

operaciones elementales: una suma, una multiplicacion y una division.Como se menciono anteriormente, normalmente cualquier operacion aritmeti-

ca elemental como la suma, la resta, la multiplicacion, la division y la ex-ponenciacion (en algunos casos) es considerada una operacion de tiempoconstante.

DRAFT

1.3. TIEMPOS DE EJECUCION 11

Figura 1.4: -Kukulkan- Debido a las virtudes maravillosas que se atribuıan a la piedra filosofal, comoobtener oro y otorgar la inmortalidad, ansiosamente se les buscaba y codiciaba.

Los algoritmos de tiempo constante son la piedra filosofal en las cienciasde la computacion y se denotan como O(1). Por desgracia, la mayorıa de losalgoritmos no son de tiempo constante.

1.3.2. Lineal

Considerando el mismo problema de obtener la suma de 1 a n. El algo-ritmo que suma los numeros uno a uno (sin usar el metodo de Gauss) es unalgoritmo de tiempo lineal debido a que su tiempo de ejecucion depende deltamano de la entrada. Si la lista es mayor la solucion tardara mas tiempo encalcularse porque se tiene que sumar mas numeros.

Un ejemplo comun de un algoritmo de tiempo lineal es la busqueda lineal(ver seccion 1.5.1). Un elemento tardara mas en encontrarse si la lista deelementos a revisarse es mayor.

Los algoritmos de tiempo lineal tambien son muy codiciados en cienciasde la computacion y se denotan como O(n). Para muchos problemas, son losalgoritmos mas rapidos que se pueden encontrar.

DRAFT

12 CAPITULO 1. ANALISIS DE ALGORITMOS

1.3.3. Cuadratico

Considere el algoritmo de ordenamiento por insercion (seccion 1.4.1), parasimplificar el analisis del tiempo de ejecucion de este algoritmo, seleccionamosla instruccion que contiene la operacion elemental que se ejecuta el mayornumero de veces en el algoritmo, denominada barometro (un barometro esun instrumento que mide la presion atmosferica). En el caso del algoritmode insercion, el barometro es la operacion elemental que comprueba si elelemento clave es menor que o igual que un elemento de la lista.

Para insertar el elemento en su posicion correcta, en el peor de los casos senecesitan a lo mas i comparaciones porque se tiene que comparar el elementoclave con los i elementos pertenecientes al nuevo grupo ordenado que se estaformando. Este caso sucede para todos los valores de i entre 2 y n cuando lalista esta ordenada inicialmente en orden decreciente.

Entonces la comprobacion del barometro se efectua:∑ni=2

n(n+1)2

− 1en total. Por lo que, el orden en que se encuentra el algoritmo de insercionen el peor de los caso es cuadratico y se denotan como O(n2).

1.3.4. Logarıtmico

Otro tipo de orden de tiempo de ejecucion que aparece con frecuenciaen el analisis de algoritmos es el tiempo logarıtmico. Respecto a los algo-ritmos de busqueda, se analizo que un algoritmo que simplemente recorresecuencialmente cada elemento de una lista para encontrar un numero, es unalgoritmo de tiempo lineal. El algoritmo de busqueda binaria, que se ejecutasobre listas ordenadas, consiste en dividir la lista de numeros en dos mitadescada vez mas pequenos, siempre buscando en el elemento central (ver seccion1.5.2). El tiempo de ejecucion no es constante, debido a que si la lista es ma-yor, mas elementos tienen que recorrerse, el tiempo de ejecucion tampoco eslineal, porque el algoritmo termina siempre sin tener que verificar todos loselementos de la lista. El tiempo de ejecucion de este algoritmo debe estar enalgun punto intermedio.

Contemos el numero de divisiones que se tienen que realizar para unalista ordenada de un tamano determinado. Para obtener una lista de tamano4, tenemos que realizar a lo mas dos divisiones antes de encontrar el numeroque estamos buscando, o para decidir que el elemento no se encuentra en lalista. En el caso de una lista de tamano 8, despues de la primera division, solo

DRAFT

1.4. ALGORITMOS DE ORDENAMIENTO 13

se necesita operar con una lista de tamano 4. Por lo tanto, como acabamosde indicar, solo se tiene que hacer a lo mas dos divisiones antes de terminar.Una vez mas, para una lista de tamano de 16, despues de la primera division,ahora estamos preocupados solo con una lista de tamano 8, que a lo maspuede tomar tres divisiones. En resumen:

Tamano de la lista: 4 8 16 32Numero de divisiones 2 3 4 5

Observe que cuando el tamano de la entrada se duplica, el numero dedivisiones (y por lo tanto el tiempo de ejecucion del algoritmo) se incremen-ta en uno. Ademas, observe que la fila superior esta creciendo mucho masrapido que la fila inferior. Este comportamiento es similar al de la funcionlogarıtmica, donde cada incremento multiplicativo en la entrada se convierteen un aumento aditivo en la salida. Tal crecimiento se denomina logarıtmico,por lo que el algoritmo de busqueda binaria esta en un tiempo logarıtmico.

Los algoritmos de tiempo logarıtmico tambien son muy codiciados debidoa que sus tiempos de ejecucion se encuentran cerca del tiempo constante yse denotan como O(log n). Si se aumenta el tamano de las entradas porun factor grande el tiempo de ejecucion se incrementara en una cantidadpequena, lo que los hace muy valiosos.

1.4. Algoritmos de ordenamiento

La informacion es mas sencilla de encontrar en una lista ordenada. Porejemplo, los diccionarios, los ındices de los libros o los directorios telefonicosse encuentran ordenados alfabeticamente. Nuestras labores cotidianas serianmucho mas difıciles de realizar si la informacion no se encontrara ordenada.Imagine que tan difıcil seria localizar un numero telefonico si los nombres nose encontraran ordenados.

Las computadoras ejecutan de manera repetida algoritmos de ordena-miento sobre la informacion. Por ejemplo, cuando sus archivos se encuentranordenados por nombre. Por tal motivo, los cientıficos de la computacion handedicado gran esfuerzo en descubrir algoritmos de ordenamiento mas eficien-tes. Algunos de los algoritmos mas lentos como el ordenamiento por insercionpueden ser utiles en situaciones especiales. Sin embargo, usualmente se uti-lizan algoritmos mas rapidos como el Quicksort.

DRAFT

14 CAPITULO 1. ANALISIS DE ALGORITMOS

El objetivo de un algoritmo de ordenamiento es ordenar un conjunto dedatos de acuerdo a un criterio establecido. Por ejemplo considere el grupoA de envases “Tukku”mostrado en la figura 1.5(a). Despues de aplicar unalgoritmo de ordenamiento, el grupo A se encontrara ordenado de menor amayor (ver figura 1.5(b)). La ordenacion del grupo de envases se realiza conrespecto a la cantidad de lıquido que contiene cada envase. Un envase llenode lıquido corresponde a la maxima magnitud. Por otro lado, un envase vacıocorresponde a la menor magnitud.

(a) El grupo A desordenado. (b) El grupo A ordenado.

Figura 1.5: Algoritmos de ordenamiento.

Antes de comenzar las siguientes subsecciones, en caso de no contar conenvases, consiga grupos de monedas de diferentes valores, una baraja de car-tas, o cual quier otro grupo de elementos que resulte practico, para que puedaaplicar los algoritmos de ordenamiento insercion y Quicksort.

1.4.1. Insercion

El algoritmo de ordenamiento insercion es un algoritmo ineficiente, peroutil como introduccion a la ensenanza de algoritmos de ordenamiento debidoa la simplicidad de su implementacion. Considere un grupo de envases Acomo el que se muestra en la figura 1.6.

A continuacion se describe como funciona:

Extraiga el primer envase del grupo A y forme un nuevo grupo B condicho envase.

DRAFT

1.4. ALGORITMOS DE ORDENAMIENTO 15

Figura 1.6: Grupo A inicialmente desordenado.

Extraiga el siguiente envase del grupo A e insertelo en la posicion co-rrecta del grupo B.

Repita el proceso hasta que ya no queden mas envases en el grupo A.

Por ejemplo, considere el ejemplo mostrado en la figura 1.7.

(a) El primer envase del grupo A escolocado en la posicion 1 del grupoB. Un grupo con un solo envase ya seencuentra insertado en su posicioncorrecta.

(b) El siguiente envase del grupo Aes insertado en la posicion numero1, la posicion correcta, del grupo B.

(c) El siguiente envase del grupo Aes insertado en la posicion numero 3del grupo B.

(d) El siguiente envase del grupo Aes insertado en la posicion numero 1del grupo B. El procedimiento ter-mina porque ya no quedan mas en-vases en el grupo A.

Figura 1.7: Ordenamiento por insercion

DRAFT

16 CAPITULO 1. ANALISIS DE ALGORITMOS

Ahora que conoce el algoritmo de insercion, reflexione, quiza usted lo haaplicado anteriormente. Por ejemplo, cuando se ordena una baraja de cartas,una mano con tiene los elementos desordenados y en la otra mano se insertanlos elementos en orden.

Figura 1.8: Baraja de cartas

1.4.2. QuickSort

El algoritmo de ordenamiento Quicksort es mas rapido que el ordenamien-to por insercion, en particular con listas muy largas. Es uno de los mejoresalgoritmos de ordenamiento que se conocen. Considera el siguiente grupo deenvases A mostrado en la figura 1.9.

Figura 1.9: Grupo A inicialmente desordenado.

A continuacion se describe como funciona:

Selecciona el envase que se encuentra en el extremo derecho, dichoenvase se denominara pivote.

Compara el pivote con cada uno de los envases restantes y coloca aque-llos que son mas livianos a la izquierda y los envases mas pesados a

DRAFT

1.4. ALGORITMOS DE ORDENAMIENTO 17

la derecha, formando el grupo I y el D, respectivamente. Idealmente,el pivote quedara cerca del centro, pero es posible que termines conmuchos mas envases en un lado que en el otro.

Aplica el mismo procedimiento en el grupo I y D. Repite el proce-dimiento en cada nuevo grupo I y D que vayas formando hasta queninguno de los grupos tenga mas de un envase. Cuando todos los gru-pos hayan sido divididos en grupos de un solo envase, entonces losenvases estaran ordenados del mas liviano al mas pesado.

Por ejemplo, considere el ejemplo mostrado en la figura 1.10.

1.4.3. Otros

El ordenamiento de burbuja recorre la lista varias veces intercambian-do las parejas de elementos que se encuentren en el orden equivocado hastaque no se requieran mas intercambios porque la lista se encuentra ordenada.El ordenamiento de burbuja es el mas sencillo de entender y programa por loque historicamente ha sido utilizado para introducir el concepto de algoritmode ordenamiento a estudiantes de ciencias de la computacion. Sin embargo,actualmente es considerado un algoritmo “arqueologico”que ha propiciadoenfocarse en menor medida en algoritmos de ordenamiento mas eficientes, elordenamiento de burbuja se encuentra en el orden de n2. En la actualidad,los libros y cursos de algoritmos evitan usar el ordenamiento de burbuja,reemplazandolo por el ordenamiento por insercion.

El ordenamiento de seleccion busca al menor elemento de la lista ylo coloca en su posicion correcta. La busqueda del menor elemento es rea-lizada hasta que la lista se encuentra ordenada. El algoritmo de seleccionmejora ligeramente al algoritmo de burbuja al realizar un menor numero decomparaciones. Sin embargo, tambien se encuentra en el orden de n2.

El Ordenamiento por Mezcla (Mergesort) utiliza la estrategia “divi-de y venceras”sobre una lista de elementos. La lista es dividida a la mitadformando dos sublistas. Posteriormente, se ordena cada sublista invocandoel ordenamiento por mezcla de manera recursiva. Finalmente, las dos sublis-tas son mezcladas para formar una sola lista al seleccionar repetidamente elmenor de los dos elementos que se encuentran al frente de las dos sublistasy colocandolo en su posicion correcta en la lista final. El ordenamiento pormezcla se encuentra en el orden de O(n log n).

DRAFT

18 CAPITULO 1. ANALISIS DE ALGORITMOS

(a) El grupo A se encuentra inicial-mente desordenado.

(b) El ultimo envase del grupo A esseleccionado como pivote.

(c) El primer envase es comparadocon el pivote, debido a que es me-nor, permanece en el lado izquierdo,formando el grupo I.

(d) El siguiente envase es compara-do con el pivote, debido a que es ma-yor, es colocado del lado derecho delpivote, formando el grupo D.

(e) Despues de que fueron compara-dos los envases restantes, se formo elgrupo I (envases menores o igualesal pivote) y el D (envases mayores alpivote). El pivote se encuentra en suposicion correcta y no sera tomadoen cuenta en los pasos posteriores.

(f) El Quicksort vuelve a aplicarseen el grupo I. El ultimo envase delgrupo I es seleccionado como pivote.Por el momento, el grupo D no estomado en cuenta.

(g) Despues de que fueron compa-rados los envases restantes, solo seformo el grupo I porque solo se en-contraban envases menores al pivo-te. El pivote se encuentra en su po-sicion correcta.

(h) El Quicksort vuelve a aplicarseen el grupo I. El ultimo envase delgrupo I es seleccionado como pivote.

DRAFT

1.5. ALGORITMOS DE BUSQUEDA 19

(i) Despues de que fue comparadoel envase restante, se formo el nuevogrupo D y no es aplicado el Quick-sort porque solo contiene un elemen-to. El pivote y el envase del grupo Dse encuentran en su posicion correc-ta.

(j) El Quicksort vuelve a aplicarseen el grupo D. El ultimo envase delgrupo D es seleccionado como pivo-te. Los envases del lado izquierdo seencuentran ordenados, por lo que nose toman en cuenta.

(k) Despues de que fueron compara-dos los envases restantes, se formo elgrupo I y el D. El pivote y el enva-se del grupo I se encuentran en suposicion correcta.

(l) El Quicksort vuelve a aplicarseen el grupo D. El ultimo envase delgrupo D es seleccionado como pivo-te.

(m) Despues de que fue comparadoel envase restante, se formo el nuevogrupo D. En el grupo D no es apli-cado el Quicksort porque solo con-tiene un elemento. El pivote y el en-vase del grupo D se encuentran ensu posicion correcta.

(n) El quick sort finaliza porque noquedan grupos a ordenar. El grupoA esta ordenado en su totalidad.

Figura 1.10: Ordenamiento por quick sort

1.5. Algoritmos de busqueda

Las computadoras almacenan grandes cantidades de informacion y nece-sitan poder encontrarla rapidamente. Uno de los problemas de busqueda mas

DRAFT

20 CAPITULO 1. ANALISIS DE ALGORITMOS

Figura 1.11: El algoritmo se denomina ordenamiento de burbuja porque cada elemento “burbujea”conlentitud hacia su posicion correcta.

desafiantes se encuentran en los motores de busqueda en Internet, que debenrevisar miles de millones de paginas web en una fracciones de segundo.

1.5.1. Busqueda Lineal

La busqueda lineal es la manera mas simple e intuitiva de buscar unelemento en una lista de elementos. Esta tecnica de busqueda se basa en eluso de “fuerza bruta”. El algoritmo de busqueda lineal consiste en compararcada uno de los elementos de la lista, hasta encontrar el elemento buscado ollegar al final de la lista.

Por ejemplo, considere el ejemplo mostrado en la figura 1.12.Ahora que conoce el algoritmo de busqueda lineal, reflexione, quiza usted

lo ha aplicado anteriormente. Por ejemplo, cuando busca en una factura entreun conjunto de papeles desordenados.

Las computadoras procesan informacion muy rapido y se podrıa pensarque aplicar la busqueda lineal seria suficiente. Sin embargo, este algoritmoes muy lento incluso para las computadoras. Por ejemplo, suponga que unsupermercado se tienen 10, 000 productos. Cuando la cajera escanea un codi-go de barras la computadora debe buscar en una lista de 10, 000 codigospara encontrar el nombre y precio del producto. Incluso, si la computadoraunicamente tardara una milesima de segundo en revisar cada codigo se nece-sitarıan 10 segundos para recorrer toda la lista. Imagine el tiempo tardarıaen cobrar las compras de una familia.

DRAFT

1.5. ALGORITMOS DE BUSQUEDA 21

(a) El envase clave que se desea abuscar en la lista A se encuentraen la parte superior.

(b) El envase clave es comparadocon el envase de la posicion 1. Elresultado es negativo porque elenvase de la posicion 1 no es elelemento clave a buscar.

(c) El envase clave es comparadocon el envase de la posicion 2. Elresultado es negativo porque elenvase de la posicion 2 no es elelemento clave a buscar.

(d) El envase clave es compara-do con el envase de la posicion 3.El resultado es positivo porqueel envase de la posicion 3 si es elelemento clave a buscar.

Figura 1.12: Busqueda Lineal

1.5.2. Binaria

Es un algoritmo que permite buscar un elemento en una lista que seencuentra previamente ordenada. El ordenar los datos permite hacer suposi-

DRAFT

22 CAPITULO 1. ANALISIS DE ALGORITMOS

ciones adicionales que no se pueden hacer en una lista desordenada. Este tipode informacion es diferente de los numeros, no se almacena en una variable olista, se vuelve una propiedad de la informacion en sı misma. Dicha propie-dad se puede utilizar para reducir el numero de comparaciones que se debenejecutar para encontrar un dato determinado. Sin embargo, la desventaja esque la lista tiene que ordenarse primero.

A continuacion se describe como funciona:

El rango inicial incluye todos los elementos de la lista. El rango estadeterminado por la posicion mınima y maxima. La busqueda comienzaen el valor del centro del rango de la lista.

Si el valor del elemento en la posicion que ha buscado es mayor, asig-ne el valor del mınimo a la posicion siguiente del elemento que fuecomparado.

Si el valor del elemento en la posicion que ha buscado es menor, asigne elvalor del maximo a la posicion anterior del elemento que fue comparado.

Compare el elemento de la posicion media del nuevo rango. Repita elpaso 2 para este nuevo rango y reduzca el rango.

Por ejemplo, considere el ejemplo mostrado en la figura 1.13.Ahora que conoce el algoritmo de busqueda binaria, reflexione, quiza us-

ted lo ha aplicado anteriormente. Por ejemplo, Probablemente has jugado eljuego del numero oculto, una persona te pide que adivines un numero o unafecha en la menor cantidad de intentos posibles. La unica informacion que lapersona te puede proporcionar despues de algun intento es si el numero ocul-to es menor o mayor. Ahora sabes que la forma mas eficiente de encontrar elnumero oculto es la busqueda binaria.

Regresando al ejemplo de la seccion 1.5.1 del supermercado, los 10, 000prodcutos se pueden revisar ahora con solo catorce pruebas, que lleva solodos centesimas de segundo.

1.5.3. Tablas hash

Una tercera estrategia para buscar datos se llama hashing. En este algo-ritmo de busqueda el elemento a buscar se manipula para que indique exacta-mente donde encontrar la informacion. Por ejemplo, si la llave de busqueda es

DRAFT

1.5. ALGORITMOS DE BUSQUEDA 23

(a) Al inicio, el rango de posibili-dades incluye a todos los envasesen la lista. El mınimo es la posi-cion 1 y el maximo es la posicion8. El envase clave a buscar se en-cuentra en la parte superior.

(b) La busqueda se realiza en laparte media del rango entre elmınimo y maximo, es decir, 8

2 =4. El envase clave se compara conel envase en la posicion 4 y debi-do a que el envase clave es mayor,el valor mınimo se asignara en laposicion siguiente del envase cen-tral.

(c) La busqueda se realiza en laparte media del nuevo rango en-tre el mınimo y maximo, es decir,42 = 2. El envase clave se compa-ra con el envase en la posicion 6y debido a que el envase clave esmayor, el valor mınimo se asig-nara en la posicion siguiente delenvase central.

(d) La busqueda se realiza en laparte media del nuevo rango en-tre el mınimo y maximo, es decir,22 = 1. El envase clave se compa-ra con el envase en la posicion 7y debido a que son los mismos, elenvase fue encontrado.

Figura 1.13: Busqueda binaria

un numero telefonico, se podrıan sumar todos los dıgitos del numero y tomarel residuo cuando se divide entre 11. Normalmente la computadora encuen-tra lo que esta buscando inmediatamente. Hay una pequena probabilidad deque varias llaves terminen en el mismo lugar, en cuyo caso la computadoradebe buscar entre ellas hasta encontrar la que esta buscando aplicando unabusqueda lineal o binaria.

DRAFT

24 CAPITULO 1. ANALISIS DE ALGORITMOS

Los programadores normalmente usan alguna version de la estrategia dehashing para buscar, a menos que sea importante mantener los datos enorden o que la ocasional respuesta lenta sea inaceptable.

1.6. Analisis de Algoritmos y el PC

Como habra notado hay una gran variedad de maneras pararesolver un problema. Usted puede desarrollar la habilidad paradecidir la mejor para solucionarlo opcion de acuerdo al analisis delas ventajas y desventajas que ofrezca en una situacion particular.Con respecto a las actividades que realiza a diario, sea innovador ybusque alternativas para realizarlas de manera mas eficiente paramaximizar sus resultados.

DRAFT

Bibliografıa

Bribiesca, E., Galaviz, J. y Rajsbaum, S.(2010), Computacion, Enciclopediade conocimientos Fundamentales 5 UNAM Siglo XXI, Mexico: UNAM.

Brassard, G. y Bratley P. (1997), Fundamentos de Algoritmia, Prentice Hall.

Cormen, T. H., Leiserson C. E., Rivest R. L. y Stein C. (1996), Introductionto Algorithms (2nd edicion), MIT Press and McGraw-Hill.

Garcia, D., Algoritmos, Beauty and Joy of Computing, Fecha de consulta 25de noviembre 2014 de: bjc.berkeley.edu, University of California, Berkeley.

Wing, J.M. (2006), Computational thinking, Comm of ACM, 49 (3), (pp.33-35).

25