cap 05 - métodos de ordenamiento y de búsqueda

111
Métodos de Ordenamiento y de Búsqueda Prof. Robert Espinoza

Upload: jesusmiguel23

Post on 28-Jun-2015

1.612 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Métodos de Ordenamiento y de Búsqueda

Prof. Robert Espinoza

Page 2: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Métodos de Ordenamiento

Page 3: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia específica.

Formalmente se define de la siguiente manera: Sea A una lista de elementos

A1, A2, A3, …, An Ordenar es clasificar estos elementos para que queden

según una distribución establecida. Ascendente:

A1 ≤ A2 ≤ A3 ≤ … ≤ An Descendente:

A1 ≥ A2 ≥ A3 ≥ … ≥ An

Introducción

Page 4: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación interna Los elementos se encuentran en la memoria principal de

la computadora. También conocida como ordenación de arreglos.

Ordenación externa Los elementos se encuentran almacenados en

dispositivos de almacenamiento secundario (discos, cintas, etc.)

También se le conoce como ordenación de archivos.

Introducción

Page 5: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación Interna

Métodos directos (n2) Implementación relativamente sencilla. Fáciles de comprender. Ineficientes cuando “n” es mediano o grande.

Métodos logarítmicos (n*log n) Más complejos y menos intuitivos Elaboración más sofisticada Difíciles de comprender Son más eficientes pues requieren de menos

comparaciones y movimientos para clasificar los elementos.

Page 6: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación Interna

En conclusión: Cuando N es pequeño deben utilizarse métodos

directos. Cuando N es mediano o grande deben emplearse

métodos logarítmicos.

Page 7: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

Para un ordenamiento ascendente, podemos trabajar de dos formas diferentes: Llevar los elementos menores hacia la parte

izquierda del arreglo, o Desplazar los elementos mayores hacia la derecha.

En el caso de una clasificación descendente se opera de manera contraria. Llevar los elementos mayores hacia la parte

izquierda del arreglo, o Desplazar los elementos menores hacia la derecha.

Es quizás el método más ineficiente.

Page 8: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

Consiste básicamente en lo siguiente: Comparar pares de elementos adyacentes e

intercambiarlos entre sí hasta que todos se encuentren ordenados.

Se realizan (n-1) pasadas transportando en cada una de ellas el mayor o menor elemento, según sea el caso a su posición ideal.

Al final de las (n-1) pasadas los elementos estarán ordenados

Page 9: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

Ordenación ascendente llevando el menor a la izquierda. Comparamos los elementos adyacentes

comenzando con el penúltimo y último elementos. Intercambiamos si un elemento es mayor que el

siguiente, es decir vamos desplazando el menor a la izquierda.

Retrocedemos hasta llegar al primer elemento en la primera pasada, al segundo en la segunda pasada y así sucesivamente.

Finalmente el arreglo quedará ordenado.

Page 10: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

15 67 8 16 44 27 12 35

Ejemplo: Ordenar ascendentemente llevando el menor a la izquierda

Page 11: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

15 67 8 16 44 27 12 35

15 67 8 16 44 27 12 35

15 67 8 16 44 12 27 35

15 67 8 16 12 44 27 35

15 67 8 12 16 44 27 35

15 67 8 12 16 44 27 35

15 8 67 12 16 44 27 35

8 15 67 12 16 44 27 35

A[6] > A[7]

A[5] > A[6]

A[4] > A[5]

A[3] > A[4]

A[1] > A[2]

A[2] > A[3]

A[0] > A[1]

No intercambio

Intercambio

Intercambio

Intercambio

Intercambio

Intercambio

No intercambio

Primera pasada

Page 12: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 15 67 12 16 44 27 35

8 15 67 12 16 44 27 35

8 15 67 12 16 27 44 35

8 15 67 12 16 27 44 35

8 15 67 12 16 27 44 35

8 15 12 67 16 27 44 35

8 12 15 67 16 27 44 35

A[6] > A[7]

A[5] > A[6]

A[4] > A[5]

A[3] > A[4]

A[1] > A[2]

A[2] > A[3]

No intercambio

Intercambio

No intercambio

No intercambio

Intercambio

Intercambio

Segunda pasada

Page 13: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 67 16 27 44 35

8 12 15 67 16 27 35 44

8 12 15 67 16 27 35 44

8 12 15 67 16 27 35 44

8 12 15 16 67 27 35 44

8 12 15 16 67 27 35 44

A[6] > A[7]

A[5] > A[6]

A[4] > A[5]

A[3] > A[4]

A[2] > A[3]

Intercambio

No intercambio

No intercambio

Intercambio

No intercambio

Tercera pasada

Page 14: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 67 27 35 44

8 12 15 16 67 27 35 44

8 12 15 16 67 27 35 44

8 12 15 16 27 67 35 44

8 12 15 16 27 67 35 44

A[6] > A[7]

A[5] > A[6]

A[4] > A[5]

A[3] > A[4]

No intercambio

No intercambio

Intercambio

No intercambio

Cuarta pasada

Page 15: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 27 67 35 44

8 12 15 16 27 67 35 44

8 12 15 16 27 35 67 44

8 12 15 16 27 35 67 44

A[6] > A[7]

A[5] > A[6]

A[4] > A[5]

No intercambio

Intercambio

No intercambio

Quinta pasada

Page 16: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 27 35 67 44

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

A[6] > A[7]

A[5] > A[6]

Intercambio

No intercambio

Sexta pasada

Page 17: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

A[6] > A[7] No intercambio

Sétima pasada

Page 18: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

Algoritmo de ordenación pasando el menor hacia la izquierda

Método Burbuja_menor(A,N)

Para I desde 1 hasta N-1 hacer

Para J desde N-1 hasta I

Si A(J-1) > A(J) entonces

aux A[J-1]

A[J-1] A[J]

A[J] aux

FinSi

FinPara

FinPara

Fin Método

Page 19: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

15 67 8 16 44 27 12 35

Ejemplo: Ordenar ascendentemente pasando el mayor hacia la parte derecha

Page 20: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

15 67 8 16 44 27 12 35

15 67 8 16 44 27 12 35

15 8 67 16 44 27 12 35

15 8 16 67 44 27 12 35

15 8 16 44 67 27 12 35

15 8 16 44 27 67 12 35

15 8 16 44 27 12 67 35

15 8 16 44 27 12 35 67

A[0] > A[1]

A[1] > A[2]

A[2] > A[3]

A[3] > A[4]

A[5] > A[6]

A[4] > A[5]

A[6] > A[7]

No intercambio

Intercambio

Intercambio

Intercambio

Intercambio

Intercambio

Intercambio

Primera pasada

Page 21: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

15 8 16 44 27 12 35 67

8 15 16 44 27 12 35 67

8 15 16 44 27 12 35 67

8 15 16 44 27 12 35 67

8 15 16 27 44 12 35 67

8 15 16 27 12 44 35 67

8 15 16 27 12 35 44 67

A[0] > A[1]

A[1] > A[2]

A[2] > A[3]

A[3] > A[4]

A[5] > A[6]

A[4] > A[5]

Intercambio

No intercambio

No intercambio

Intercambio

Intercambio

Intercambio

Segunda pasada

Page 22: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 15 16 27 12 35 44 67

8 15 16 27 12 35 44 67

8 15 16 27 12 35 44 67

8 15 16 27 12 35 44 67

8 15 16 12 27 35 44 67

8 15 16 12 27 35 44 67

A[0] > A[1]

A[1] > A[2]

A[2] > A[3]

A[3] > A[4]

A[4] > A[5]

No intercambio

No intercambio

No intercambio

Intercambio

No intercambio

Tercera pasada

Page 23: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 15 16 12 27 35 44 67

8 15 16 12 27 35 44 67

8 15 16 12 27 35 44 67

8 15 12 16 27 35 44 67

8 15 12 16 27 35 44 67

A[0] > A[1]

A[1] > A[2]

A[2] > A[3]

A[3] > A[4]

No intercambio

No intercambio

Intercambio

No intercambio

Cuarta pasada

Page 24: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 15 12 16 27 35 44 67

8 15 12 16 27 35 44 67

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

A[0] > A[1]

A[1] > A[2]

A[2] > A[3]

No intercambio

Intercambio

No intercambio

Quinta pasada

Page 25: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

A[0] > A[1]

A[1] > A[2]

No intercambio

No intercambio

Sexta pasada

Page 26: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

8 12 15 16 27 35 44 67

8 12 15 16 27 35 44 67

A[0] > A[1] No intercambio

Sétima pasada

Page 27: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por intercambio (Burbuja)

Algoritmo de ordenación pasando el menor hacia la izquierda

Método Burbuja_mayor(A,N)

Para I desde N-2 hasta 0 hacer

Para J desde 0 hasta I

Si A(J) > A(J+1) entonces

aux A[J]

A[J] A[J+1]

A[J+1] aux

FinSi

FinPara

FinPara

Fin Método

Page 28: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del Método por intercambio (Burbuja)

Número de comparaciones: Primera pasada: (n-1), segunda pasada: (n-2), tercera

pasada: (n-3) y así sucesivamente hasta llegar a 2 y 1. Por lo tanto el número de comparaciones C es:

2

2

)1(*12)2()1(

2 nnC

nnnnC

Page 29: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del Método por intercambio (Burbuja)

El número de movimientos o intercambios dependen de si el arreglo se encuentra: En orden inverso (caso peor)

Mmáx = 3 * (n2 – n) / 2 = 1.5 * (n2 – n) Desordenado o aleatorio (caso medio)

Mmed = 0.75 * (n2 – n)

Ordenado (caso mejor)

Mmín = 0

El tiempo necesario para ejecutar el algoritmo de la burbuja es proporcional a n2

T(n) = O(n2)

Page 30: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del Método por intercambio (Burbuja)

Por ejemplo si son 100 elementos a ordenar tenemos Caso mejor (Ordenado)

4,950 comparaciones 0 movimientos

Caso medio (aleatorio) 4,950 comparaciones 7,425 movimientos

Caso peor (en orden inverso) 4,950 comparaciones 14,850 movimientos

Page 31: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Es una modificación del método de la burbuja con la finalidad de terminar la ejecución del algoritmo en caso se compruebe que el arreglo ya está ordenado después de una pasada.

La idea central es utilizar una señal o marca para indicar que no se ha producido ningún intercambio en una pasada, lo que comprueba que el arreglo está completamente ordenado.

Método de intercambio con señal (flag)

Page 32: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Burbuja_señal (A,N)

i 1, flag VERDADERO

Mientras i <= N-1 y flag = VERDADERO hacer

flag FALSO

Para j desde 0 hasta n-2 hacer

Si A[ j ] > A[ j+1 ] entonces

aux A[ j ], A[ j ] A [ j+1], A[ j+1] aux

flag VERDADERO

Fin Si

FinPara

i i + 1

FinMientras

Fin Método

Método de intercambio con señal (flag)

Page 33: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

También conocido como Método de la Baraja por ser el que usan los jugadores de cartas para ordenar la baraja.

La idea central consiste en insertar un elemento en su parte izquierda, que ya se encuentra ordenada. Este proceso se repite desde el segundo hasta el último elemento.

Page 34: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

15 67 8 16 44 27 12 35

Por ejemplo, ordenar ascendentemente usando el método de inserción directa

Page 35: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

15 67 8 16 44 27 12 35

15 67 8 16 44 27 12 35

A[1] < A[0] No intercambio

Primera pasada

Page 36: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

15 67 8 16 44 27 12 35

15 8 67 16 44 27 12 35

8 15 67 16 44 27 12 35

A[2] < A[1]

A[1] < A[0]

Intercambio

Intercambio

Segunda pasada

Page 37: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

8 15 67 16 44 27 12 35

8 15 16 67 44 27 12 35

8 15 16 67 44 27 12 35

A[3] < A[2]

A[2] < A[1]

Intercambio

No Intercambio

Tercera pasada

Page 38: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

8 15 16 67 44 27 12 35

8 15 16 44 67 27 12 35

8 15 16 44 67 27 12 35

A[4] < A[3]

A[3] < A[2]

Intercambio

No Intercambio

Cuarta pasada

Page 39: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

8 15 16 44 67 27 12 35

8 15 16 44 27 67 12 35

8 15 16 27 44 67 12 35

A[5] < A[4]

A[4] < A[3]

Intercambio

Intercambio

Quinta pasada

A[3] < A[2] No Intercambio

8 15 16 27 44 67 12 35

Page 40: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

8 15 16 27 44 67 12 35

8 15 16 27 44 12 67 35

8 15 16 27 12 44 67 35

A[6] < A[5]

A[5] < A[4]

Intercambio

Intercambio

Sexta pasada

A[4] < A[3] Intercambio

8 15 16 12 27 44 67 35 A[3] < A[2] Intercambio

8 15 12 16 27 44 67 35 A[2] < A[1] Intercambio

8 12 15 16 27 44 67 35 A[1] < A[0] No intercambio

8 12 15 16 27 44 67 35

Page 41: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por Inserción directa

8 12 15 16 27 44 67 35

8 12 15 16 27 44 35 67

8 12 15 16 27 35 44 67

A[7] < A[6]

A[6] < A[5]

Intercambio

Intercambio

Sétima pasada

A[5] < A[4] No intercambio

8 12 15 16 27 35 44 67

Page 42: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Inserción (A,N)

Para i desde 1 hasta N-1 hacer

aux A[ i ]

k i - 1

Mientras (k >= 0) y (aux < A[ k ]) hacer

A[ k+1 ] A[ k ]

k k - 1

FinMientras

A[ k+1 ] aux

FinPara

Fin Método

Ordenación por Inserción directa

Page 43: Cap 05 - Métodos de Ordenamiento y de Búsqueda

El número mínimo de comparaciones y movimientos sucede cuando los elementos ya está ordenados Número de comparaciones

Cmín = n – 1 Número de movimientos.

Mmín = 0

El número máximo de comparaciones y movimientos entre elementos se da cuando los elementos del arreglo están en orden inverso. Número de comparaciones

Cmáx = 1 + 2 + … + (n-1) = n * (n-1) / 2 = (n2 – n) / 2

Número de movimientos

Mmáx = 1 + 2 + … + (n-1) = n * (n-1) / 2 = (n2 – n) / 2

Análisis de eficiencia del método de Inserción directa

Page 44: Cap 05 - Métodos de Ordenamiento y de Búsqueda

El número de comparaciones y movimientos promedio se da cuando los elementos aparecen aleatoriamente.

Se calcula sumando las comparaciones y movimientos máximos y mínimos entre 2. Número de comparaciones

Análisis de eficiencia del método de Inserción directa

Número de movimientos.

4

)2(

2

2

)()1(

2

2

nn

nnn

Cmed

4

)(

2

2

)(0

2

2

nn

nn

M med

Page 45: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del método de Inserción directa

Por ejemplo si son 100 elementos a ordenar tenemos Caso mejor (Ordenado)

99 comparaciones 0 movimientos

Caso medio (aleatorio) 2,524 comparaciones 2,475 movimientos

Caso peor (en orden inverso) 4,950 comparaciones 4,950 movimientos

Page 46: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Es más eficiente que los anteriores, sin embargo no se recomienda utilizarlo si el número de elementos del arreglo es mediano o grande.

La idea básica es buscar el menor elemento y colocarlo en la primera posición.

Luego se busca el segundo más pequeño y se coloca en la segunda posición.

Y así sucesivamente hasta que todos los elementos hayan sido ordenados.

Método por Selección directa

Page 47: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método por selección directa

15 67 8 16 44 27 12 35

Por ejemplo ordenar ascendentemente utilizando el método de selección directa

Page 48: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Primera pasada Se haya el menor que es A[2] = 8 Se intercambia con el primero A[0] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 67 15 16 44 27 12 35

Page 49: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Segunda pasada Se haya el segundo menor que es A[6] = 12 Se intercambia con el segundo A[1] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 12 15 16 44 27 67 35

Page 50: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Tercera pasada Se haya el tercer menor que es A[2] = 15 Se intercambia con el tercero A[2] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 12 15 16 44 27 67 35

Page 51: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Cuarta pasada Se haya el cuarto menor que es A[3] = 16 Se intercambia con el cuarto A[3] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 12 15 16 44 27 67 35

Page 52: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Quinta pasada Se haya el quinto menor que es A[5] = 27 Se intercambia con el quinto A[4] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 12 15 16 27 44 67 35

Page 53: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Sexta pasada Se haya el sexto menor que es A[7] = 35 Se intercambia con el sexto A[5] Luego el arreglo queda de la siguiente manera:

Método por selección directa

8 12 15 16 27 35 67 44

Page 54: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Sétima pasada Se haya el sétimo menor que es A[7] = 44 Se intercambia con el sétimo A[6] Luego el arreglo queda de la siguiente manera,

completamente ordenado:

Método por selección directa

8 12 15 16 27 35 44 55

Page 55: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Selección (A,N)

Para i desde 0 hasta N-2 hacer

menor A[ i ], k i

Para j desde i+1 hasta N-1 hacer

Si A[ j ] < menor entonces

menor A[ j ], k j

Fin Si

Fin Para

A[ k ] A[ i ]

A[ i ] menor

Fin Para

Fin Método

Método por selección directa

Page 56: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del Método por selección directa

El número de comparaciones es independiente de la disposición inicial de los elementos en el arreglo.

En la primera pasada se realizan (n-1) comparaciones En la segunda (n-2) comparaciones Y así sucesivamente hasta 2 y 1 comparaciones en la

penúltima y última pasadas. Por consiguiente el número de comparaciones C es:

2

2

)1(*12)2()1(

2 nnC

nnnnC

Page 57: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del Método por selección directa

El número de movimientos o intercambios siempre será:

1nM

Por ejemplo si son 100 elementos a ordenar tenemos para los casos mejor, peor y medio:

4950 comparaciones 99 movimientos

Page 58: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Shell

El método de Shell es una versión mejorada del método de inserción directa.

Lo propuso Donald L. Shell en 1959. También se le conoce como ordenamiento por

disminución del incremento o inserción con incrementos decrecientes.

Propone que las comparaciones entre elementos se efectúen con saltos de mayor tamaño pero con incrementos decrecientes para que los elementos queden ordenados más rápidamente.

Page 59: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Shell

Imaginemos un arreglo de 16 elementos. Se dividen los elementos en ocho grupos teniendo en

cuenta los elementos a ocho posiciones de distancia entre sí y se ordenan por separado.

Luego se dividen en cuatro grupos, teniendo en cuenta los elementos que se encuentren a cuatro posiciones entre sí, y se les ordena por separado.

Se dividen en grupos tomando en cuenta los que se encuentran a dos posiciones entre sí y nuevamente se les ordena por separado.

Finalmente se agrupan y ordenan de manera normal, de uno en uno.

Page 60: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Shell - Ejemplo

Se desea ordenar:

15, 67, 08, 16, 44, 27, 12, 35, 56, 21, 13, 28, 60, 36, 07, 10

1515 6767 0808 1616 4444 2727 1212 3535 5656 2121 1313 2828 6060 3636 0707 10101ra. Pasada:1ra. Pasada:

1515 67670808 1616 4444 2727 1212 353556562121 1313 2828 6060 36360707 1010

1515 67670808 1616 4444 2727 1212353556562121 1313 2828606036360707 10102ra. Pasada:2ra. Pasada:

1515 67670808 16164444 2727 1212 353556562121 13132828 606036360707 1010

Page 61: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Clasificación por Shell

1515 67670808 16164444 2727 1212 353556562121 13132828606036360707 10103ra. Pasada:3ra. Pasada:

1515 67670808 1616 444427271212 3535 56562121 1313 2828 6060363607071010

4ta. Pasada:4ta. Pasada: 1515 67670808 1616 444427271212 353556562121 1313 2828 6060363607071010

1515 67670808 1616 444427271212 3535 565621211313 2828 606036360707 1010

Page 62: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Shell (A, N) int N + 1 Mientras (int > 1) hacer

int entero(int / 2), band verdadero Mientras (band = verdadero) hacer

band falso, i 0 Mientras ( i + int ) <= N - 1 ) hacer Si A[ i ] > A [ i + int] entonces

aux A[i], A[ i ] A[ i+1], A[ i+1] auxband verdadero

Fin Si i i + 1 Fin Mientras

Fin Mientras Fin MientrasFin Método

Método Shell

Page 63: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la eficiencia del Método Shell

Se han llevado acabo varios estudios de la Clasificación por Shell, pero ninguno ha demostrado que una opción de los incrementos sea muy superior al resto.

En 1969 Pratt descubrió que el tiempo de ejecución del algoritmo es del orden n*(log n)2.

Se han efectuado estudios empíricos sumamente amplios y al parecer, cuando n es grande, el número de movimientos fluctúa entre n5/4 y 1.6n5/4.

Page 64: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método QuickSort (Ordenación rápida)

Este método es el más eficiente y veloz de los métodos de ordenación interna.

Conocido como método de ordenación rápida y de ordenación por partición.

Este método es una mejora sustancial del método de intercambio directo.

La idea del algoritmo es la siguiente: Se toma un elemento X de una posición cualquiera del

arreglo. Se trata de ubicar X en la posición correcta del arreglo,

de tal forma que todos los elementos que se encuentren a su izquierda sean menores o iguales a X y todos los que se encuentren a su derecha sean mayores o iguales a X.

Page 65: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método QuickSort (Ordenación rápida)

Se repiten los pasos pero ahora con los conjuntos de datos que se encuentran a la izquierda y a la derecha de la posición correcta de X en el arreglo.

El proceso termina cuando todos los elementos se encuentran en su posición correcta en el arreglo.

Page 66: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método QuickSort (Ordenación rápida)

Entonces procederemos de la siguiente manera: Se Selecciona un elemento X cualquiera, en nuestro

caso A[0] Se recorre el arreglo de derecha a izquierda,

comparando si los elementos son mayores o iguales a X Si un elemento no cumple con esta condición, se

intercambia con X y se almacena en una variable su posición (acotamos el arreglo por la derecha)

Se inicia nuevamente el recorrido pero ahora de izquierda a derecha, comparando si los elementos son menores o iguales a X.

Si no cumple la condición se intercambia con X y se almacena su posición (acotamos por la izquierda).

Se repiten los pasos anteriores hasta que X encuentra su posición correcta en el arreglo.

Page 67: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Quicksort

Por ejemplo ordenaremos ascendentemente:15, 67, 08, 16, 44, 27, 12, 35  

Elegimos X = A[0] = 15 Primera pasada

Recorremos de derecha a izquierda A[7] >= X (35 >= 15) no hay intercambio A[6] >= X (12 >= 15) sí hay intercambio Queda como sigue:

12, 67, 08, 16, 44, 27, 15, 35 Ahora recorremos de izquierda a derecha

A[1] <= X (67<=15) sí hay intercambio Queda como sigue:

12, 15 , 08, 16, 44, 27, 67, 35

Page 68: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Quicksort

Segunda pasada Recorremos de derecha a izquierda

A[5] >= X (27>=15) no hay intercambio A[4] >= X (44 >=15) no hay intercambio A[3] >= X (16 >=15) no hay intercambio A[2] >= X (08 >=15) si hay intercambio  Queda como sigue:

12, 08, 15, 16, 44, 27, 67, 35 Como el recorrido de izquierda a derecha se debería

iniciar en la misma posición donde se encuentra X, el proceso termina pues X está en la posición correcta.

12 08 15 16 44 27 35

1er conjunto 2do conjunto

Page 69: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Quicksort

Este proceso de particionamiento para localizar la posición correcta de un elemento X, se repite cada vez que queden conjuntos formados por dos o más elementos.

El método se puede aplicar de manera iterativa o recursiva

En la siguiente diapositiva se muestra el ordenamiento completo.

Page 70: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Quicksort

12 08 16 44 27 67 351ra. Pasada 15

0812 44 27 67 352da. Pasada 15 16

15 35 27 4408123ra. Pasada 16 67

15 16 35 4408 27124ra. Pasada 67

15 2716 4412 35085ta. Pasada 67

Page 71: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método Quicksort (A,N)

ReduceQuicksort (0, N-1)

Fin Método

Método QuickSort – Algoritmo recursivo

Page 72: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Método ReduceQuicksort (INI, FIN)

izq INI, der FIN, pos INI, flag verdadero

Mientras (flag = verdadero) hacer

flag falso

Mientras (A[pos] <= A[der] ) y (pos <> der ) hacer

der der -1

Fin Mientras

Si (pos <> der ) entonces

aux A [pos], A[pos] A[der], A[der] aux, pos der

Mientras (A[pos] >= A[izq] ) y (pos <> izq ) hacer

izq izq +1

Fin Mientras

Método QuickSort – Algoritmo recursivo

Page 73: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Si (pos <> izq ) entonces

aux A [pos], A[pos] A[izq], A[izq] aux

pos izq, flag verdadero

Fin Si

Fin Si

Fin Mientras

Si (pos - 1 > INI) entonces

ReduceQuicksort (INI, pos - 1)

Fin Si

Si (FIN > pos + 1) entonces

ReduceQuicksort (pos + 1, FIN)

Fin Si

Fin Método

Método QuickSort – Algoritmo recursivo

Page 74: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la eficiencia del método QuickSort

Si se escoge en cada pasada el elemento que ocupa la posición central, el número de pasadas es del orden de:

log n Si el tamaño del arreglo es una potencia de 2, el número

de comparaciones será:

C = (n-1) * log n El peor caso ocurre cuando los elementos ya están

ordenados o se encuentran en orden inverso.

Cmáx = n*(n+1)/2 -1

Cmáx = (n2 + n)/2 -1

Page 75: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la eficiencia del método QuickSort

En conclusión Tiempo promedio de ejecución

n * log n, O(n * log n) Tiempo de ejecución en el peor caso

n2, O( n2 )

Page 76: Cap 05 - Métodos de Ordenamiento y de Búsqueda

También conocido como HeapSort Un montículo se define como:

Para todo nodo del árbol se debe cumplir que su valor sea mayor o igual que el valor de cualquiera de sus hijos

La idea central de este método se basa en dos operaciones: Construir un montículo Eliminar la raíz del montículo en forma repetida

Ordenación por montículo

Page 77: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Para representar un montículo en un arreglo se debe tener en cuenta para todo nodo K lo siguiente: El nodo K se almacena en la posición K correspondiente

del arreglo El hijo izquierdo del nodo K se almacena en la posición

2 * K El hijo derecho del nodo K se almacena en la posición

2 * K +1 En la siguiente diapositiva se representa un montículo

en un arreglo unidimensional

Ordenación por montículo

Page 78: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Ordenación por montículo

67

36

28 21

27 16 15 08

60

56 44

35

67 36 60 28 21 56 44 27 16 15 08 351 2 3 4 5 6 7 8 9 10 11 12

Page 79: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Inserción de un elemento en un Montículo

La inserción en un montículo se lleva a cabo de la siguiente manera: Se inserta en la primera posición disponible. Se verifica si el valor es mayor que el de su padre.

Si se cumple se efectúa el intercambio. Si no se cumple entonces el algoritmo se detiene y el elemento

queda ubicado en su posición correcta. Es un algoritmo recursivo y desde abajo hacia arriba.

Por ejemplo insertaremos los siguientes elementos en un montículo que esta vacío:

15, 60, 08, 16, 44, 27, 12, 35

Page 80: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Inserción por Montículo

Inserción: 15 15 15

60

15

15

60

15 6060 15

15

60

08

16

16

60

08

15

60 15 08 16

60 16 08 15Inserción: 08 y 16

Inserción: 60

15 60 08 16 44 27 12 35

1 2 3 4 5 6 7 8

Page 81: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Inserción por Montículo

Inserción: 44

16

60

08

15 44

44

60

08

15 16

60 16 08 15 44 60 44 08 15 16

44

60

08

15 16 27

44

60

27

15 16 08

60 44 08 15 16 27 60 44 27 15 16 08

Inserción: 27

Page 82: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Inserción por Montículo

Inserción de 12 y 35

44

60

27

15 16 08 12

35

44

60

27

35 16 08 12

15

60 44 27 15 16 08 12 35

60 44 27 35 16 08 12 15

Page 83: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Se elimina la raíz del montículo en forma repetida. Se reemplaza la raíz con el elemento que ocupa la última

posición del montículo. Verifica que la nueva raíz sea menor que el valor más

grande de sus hijos. Si se cumple la condición, entonces se efectúa el

intercambio. Si no se cumple el algoritmo se detiene

Se aplica este algoritmo de manera recursiva y de arriba hacia abajo.

Ejemplo: Se desea eliminar la raíz del montículo presentado en el arreglo, en forma repetida:

60 44 27 35 16 08 12 15

Page 84: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz: 60 Intercambiamos la raíz 60 con el elemento que ocupa la última

posición del montículo que es 15.

15 44 27 35 16 08 12 60

44 15 27 35 16 08 12 60

44 35 27 15 16 08 12 60

La nueva raíz es: 15 y comparamos:       i. Vector[1] < Vector[2] (15 < 44) si hay intercambio      ii. Vector[1] < Vector[3] (15 < 27)

El nuevo valor de la posición 2 es 15 y comparamos:       i. Vector[2] < Vector[4] (15 < 35) sí hay intercambio ii. Vector[2] < Vector[5] (15 < 16)

Page 85: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz: 44 Intercambiamos la raíz 44 con el elemento que ocupa la última

posición del montículo que es 12

12 35 27 15 16 08 44 60

35 12 27 15 16 08 44 60

35 16 27 15 12 08 44 60

La nueva raíz es 12 y comparamos: i. Vector[1] < Vector[2] (12 < 35) si hay intercambioii. Vector[1] < Vector[3] (12 < 27)

El nuevo valor de la posición 2 es 12 y comparamos: i. Vector[2] < Vector[4] (12 < 15)ii. Vector[2] < Vector[5] (12 < 16) si hay intercambio

Page 86: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz 35 Intercambiamos la raíz 35 con el elemento que ocupa la última

posición del montículo que es 08.

08 16 27 15 12 35 44 60

27 16 08 15 12 35 44 60

La nueva raíz es: 08 y comparamos: i. Vector[1] < Vector[2] (08 < 16)ii. Vector[1] < Vector[3] (08 < 27) si hay intercambio

Page 87: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz 27 Intercambiamos la raíz 27 con el elemento que ocupa la última

posición del montículo que es 12.

12 16 08 15 27 35 44 60

16 12 08 15 27 35 44 60

16 15 08 12 27 35 44 60

La nueva raíz es 12 y comparamos:i. Vector[1] < Vector[2] (12 < 16) si hay intercambioii. Vector[1] < Vector[3] (12 < 08)

El nuevo valor de la posición 2 es: 12 y comparamos:i. Vector[2] < Vector[4] (12 < 15) si hay intercambio

Page 88: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz: 16 Intercambiamos la raíz 16 con el elemento que ocupa la última

posición del montículo que es 12.

12 15 08 16 27 35 44 60

15 12 08 16 27 35 44 60

La nueva raíz es: 12 y comparamos:i. Vector[1] < Vector[2] (12 < 15) si hay intercambioii. Vector[1] < Vector[3] (12 < 08)

Page 89: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz: 15 Intercambiamos la raíz 15 con el elemento que ocupa la última

posición del montículo que es 08.

08 12 15 16 27 35 44 60

12 08 15 16 27 35 44 60

La nueva raíz es: 08 y comparamos: i. Vector[1] < Vector[2] (08 < 12) si hay intercambio

Page 90: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de un Montículo

Eliminación de la raíz 12 Intercambiamos la raíz 12 con el elemento que ocupa la

última posición del montículo que es 08.

08 12 15 16 27 35 44 60

El nuevo valor de la posición 1 es: 08 y no podemos comparar con más pues el primer hijo del montículo no existe. Pero observamos que el séptimo mayor valor

Page 91: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de eficiencia del método del Montículo

El análisis del método del montículo es complejo. Debemos tener en cuenta tanto la fase de construcción del

montículo como la fase de eliminación de su raíz. Este es un método muy rápido para sobre todo para

valores grandes de n. El tiempo de ejecución del algoritmo en ambas fases es

O(n * log n)

Page 92: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Métodos de Búsqueda

Page 93: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Introducción

La búsqueda es una operación que nos permite recuperar información previamente almacenada. El resultado de la operación es el éxito en el caso de

encontrar el elemento buscado y de fracaso en caso contrario.

Ejemplos: Directorios de archivos ordenados. Ofertas laborales ordenados por tipo de trabajo. Libros de la biblioteca ordenados por autor y tema.

Se puede realizar sobre elementos ordenados ó sobre elementos desordenados.

Page 94: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Clasificación de los métodos de búsqueda

Se pueden clasificar en:

Búsqueda Interna: Cuando los elementos se encuentran en memoria principal.

Búsqueda externa: Cuando todos los elementos se encuentran en memoria secundaria

Page 95: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Métodos de Búsqueda Interna

Estos pueden ser almacenados en estructuras estáticas como arreglos y estructuras dinámicas como listas enlazadas y árboles. Búsqueda Secuencial ó lineal Búsqueda Secuencial con Bloques Búsqueda con Índices. Búsqueda Binaria. Búsqueda por transformación de clave (hash). Árboles Binarios de Búsqueda.

Page 96: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Búsqueda Secuencial

Consiste en revisar elemento tras elemento de la estructura de datos. Hasta encontrar el dato más buscado o Hasta llegar al final de la lista de datos disponibles.

Se puede realizar una búsqueda secuencial en: Un arreglo desordenado. Un arreglo ordenado Una Lista enlazada desordenada Una Lista enlazada ordenada

Page 97: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la eficiencia de la Búsqueda Secuencial

El número de comparaciones es uno de los factores que se utilizan para determinar los la complejidad de los métodos de búsqueda

En cada método debemos evaluar situaciones donde se presenten el Caso peor Caso medio Caso mejor

Page 98: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Secuencial en Arreglo Desordenado

La operación elemental seleccionada es la comparación.

Caso Mejor: El elemento buscado está en la primera posición.

Cmín = 1

Caso Peor: El elemento buscado no se encuentra en el arreglo o está al final.

Cmáx= n Caso Medio: El elemento buscado se encuentra en

una posición i en el arreglo.

Cmedio= (n + 1) / 2

Page 99: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Secuencial en Arreglo Desordenado (Caso Medio)

Misma probabilidad de la distribución de los datos. Misma probabilidad de encontrar al elemento buscado en

cualquier posición del arreglo. El número de comparaciones puede ser 1, 2, 3, ..., n y en

cada paso debe darse una probabilidad de 1/n

2

11

2

1

1...321

1...

13

12

11

n

n

nnC

nnC

nn

nnnC

medio

medio

medio

Page 100: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Secuencial en Listas Enlazadas

El número de comparaciones en la búsqueda secuencial en listas simplemente enlazadas es el mismo que para arreglos.

Page 101: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Búsqueda Secuencial usando Bloques

El vector debe estar ordenado para este método. Trabajar con bloque de elementos en vez de

elementos aislados. El tamaño del bloque de elementos depende del

número de elementos del vector. Se realiza comparando la clave con el último

elemento de cada bloque. Si la clave resulta menor, se busca secuencialmente

en los elementos salteados del bloque de elementos.

Page 102: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Secuencial usando Bloques

La operación elemental seleccionada es la comparación. Caso Mejor: El elemento buscado se encuentre en el

último elemento del primer bloque.

Caso Mejor = 1 Caso Peor: El elemento buscado se encuentre en la

penúltima posición del último bloque y donde todos los bloque sean del mismo tamaño. En el caso de que el último bloque no sea del mismo

tamaño que el resto, estaría dado por el penúltimo elemento del penúltimo bloque.

Caso Peor = N/(N)1/2 +((N)1/2 -1) = 2N/(N)1/2 – 1

Page 103: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Secuencial usando Bloques

Caso Medio: El elemento buscado se encuentra en una posición i en el arreglo.

Caso Medio = [ 2N/(N)1/2 – 1 + 1 ]/2 = 2N/(N)1/2

Page 104: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Búsqueda Binaria

Se efectúa sobre arreglos más no sobre listas. Los datos previamente deben estar ordenados. Consiste en comparar el valor buscado con el

elemento medio y discriminar si se encuentra en medio, la mitad superior ó la mitad inferior.

Para luego proseguir con esta misma táctica en el bloque definido anteriormente.

Page 105: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Binaria

La operación elemental seleccionada es la comparación.

Caso Mejor: El elemento buscado está en la posición del medio de la lista.

Cmín = 1

Caso Peor: El elemento buscado no se encuentra en el arreglo. El problema consiste en que no se sabe a priori cuantas

comparaciones van a realizarse. Habrá tantas comparaciones como elementos medios

haya.

Cmáx = log2(N)

Page 106: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de la Búsqueda Binaria

Caso medio: El elemento buscado se encuentra en una posición aleatoria.

2

)(log1 2 NCmedio

Page 107: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Árboles Binario de Búsqueda

Árbol de búsqueda es si el valor contenido en cada nodo Es menor que los valores del subárbol derecho Es mayor o igual que los valores del subárbol

izquierdo. Esta estructura permite buscar valores en forma más

eficiente.

3

52

1 4 6

Page 108: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Búsqueda de Árboles Binarios de Búsqueda

El proceso consiste en buscar el VALOR.

1. Si VALOR < N hijo izquierdo de N

2. Si VALOR > N hijo derecho de N

3. Repetir el paso (1) y (2) hasta que las siguientes condiciones:

Si VALOR = N puntero al nodo encontrado.

Si hay un subárbol vació La búsqueda ha sido infructuosa

38

14 56

8 23 82

1970

45

Page 109: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Inserción de Árboles Binarios de Búsqueda

El proceso consiste en insertar el VALOR. Si VALOR < N el hijo izquierdo de

N. Si VALOR > N el hijo derecho de

N. Si VALOR = N y existe hijo izquierdo el hijo izquierdo de N.

Repetir el paso (1) , (2) y (3) hasta que las siguientes condiciones: Si hay un subárbol vació Se

inserta en el subárbol vacío.

38

14 56

8 23 82

1970

45

Page 110: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Eliminación de Árboles Binarios de Búsqueda

El proceso consiste es eliminar el VALOR.

Caso 1: N no tiene hijos N se elimina y se remplaza el puntero del padre a N por el puntero nulo.

Caso2: N tiene un hijo N se elimina y es reemplazando el puntero a N del Padre por puntero al hijo único de N

Caso 3: N tiene dos hijos, N se elimina y es remplazado por el nodo que está más a la derecha en el subárbol izquierdo.

38

14 56

8 23 82

1970

45

Page 111: Cap 05 - Métodos de Ordenamiento y de Búsqueda

Análisis de operaciones en Árboles Binarios de Búsqueda

Muchos nodos pueden tener un solo hijo y así sus ramas se vuelven largas y delgadas, con esto se vuelve ineficiente. El peor caso todos los nodos pueden tener un solo hijo.

Buscar un valor en el significa comparar prácticamente con los n nodos del árbol.

Existen métodos para equilibrar el árbol y que las operaciones de búsqueda, adición, ó borrado requieran un tiempo que este en O(Log n) en el caso peor