Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ed Tiv Aed1026 I-21
Ed Tiv Aed1026 I-21
“Dime y lo olvido,
enséñame y lo recuerdo,
involúcrame y lo
aprendo”.
Benjamín Franklin
ED-2014-224
Tema
Métodos de
Ordenamiento y
4.1 Métodos de ordenamiento.
Búsqueda
Algoritmos de ordenamiento interno
y externo: burbuja, quicksort,
shellsort, intercalación, mezcla
natural, mezcla directa.
ED-2014-224
Tema
Métodos de
Ordenamiento y
Búsqueda
Conoce, comprende y
aplica los algoritmos de
Ordenamiento y búsqueda,
para el uso adecuado en el
desarrollo de aplicaciones
que permita solucionar
problemas del entorno.
ED-2014-224
ALGORITMOS DE ORDENAMIENTO
ED-2014-224
Clasificación de los Métodos de Ordenamiento
• Ordenamiento Interno
▪ Son algoritmos que realizan el ordenamiento a datos
almacenados en la memoria principal.
• Ordenamiento Externo
▪ Son algoritmos que realizan el ordenamiento a
datos almacenados en la memoria secundaria.
ED/EOD-2010
4.1. Burbuja (Clasificación por intercambio directo)
• Análisis
– La idea básica de este algoritmo consiste en comparar
pares de elementos adyacentes e intercambiarlos entre sí
hasta que todos se encuentran ordenados.
– Se realizan (n-1) pasadas, transportando en cada una de
las mismas el menor o mayor elemento (según sea el caso)
a su posición ideal.
– Al final de las (n-1) pasadas los elementos del arreglo
estarán ordenados.
• Ej. A: 15 67 08 16 44 27 12 35
ED/EOD-2010
4.1. Burbuja (Clasificación por intercambio directo)
• Algoritmo
1.Repetir con i<-1 hasta N-1
1.1.Repetir j<- 0 hasta (N-i)-1
1.1.1.Si A[ j ]> A[ j+1 ] entonces
Hacer aux <- A[ j ],
A[ j ]<-A[ j +1] y A[ j+1 ]<-aux
1.1.2.{fin 1.1.1.}
++j
1.2. {fin 1.1.}
++i
2.{fin 1}
ED/EOD-2010
• Algoritmo Mejorado
1. Hacer i<-1 y ban<-f
2. Repetir mientras (i<=N-1) y (ban = f)
Hacer ban<-v
2.1.Repetir j<- 0 hasta (N-i)-1
2.1.1.Si A[ j ]> A[ j+1 ] entonces
Hacer aux <- A[ j ],A[ j ]<-A[ j +1],
A[ j+1 ]<-aux y ban<-f
2.1.2.{fin 2.1.1.}
Hacer j<-j+1
2.2. {fin 2.1.}
Hacer i<-i+1
3.{fin 2}
ED/EOD-2010
4.3 Intercalación directa (Merge)
• Fue desarrollado en 1945 por John Von
Neumann.
• Algoritmo:
1. Dividir en dos partes iguales (A, B) el vector o
archivo a ordenar (C).
2. Ordenar por separado cada una de las partes.
3. Mezclar ambas partes, manteniendo el
orden, en un sólo vector ordenado.
ED/EOD-2010
4.3 Intercalación directa (Merge)…
Algoritmo Merge 4. Si NA >=R entonces
1. NA 0, NB 0, P 0 4.1 Para K 0 a (S – NB)-1
2. Mientras NA < R y NB < S C[P+K] B[NB + K]
++K
2.1 Si A[NA] < B[NB] entonces 4.2 {Fin 4.1}
C[P] A[NA] de lo contrario
++ NA 4.3 Para K 0 a (R – NA)-1
de lo contrario C[P+K] A[NA + K]
C[P] B[NB] ++K
4.4 {Fin 4.3}
++ NB 5. {Fin 4}
2.2 {Fin 2.1}
++ P
3. {Fin 2}
ED/EOD-2010
4.2. Quick Sort (Clasificación por partición)
• Análisis 5. Repetir desde el paso 2) mientras
Este algoritmo es uno de los no se crucen los índices izquierdo y
mejores que se conocen derecho.
actualmente. Es una mejora del 6. Intercambiar x con el elemento de
método de ordenación por la derecha.
intercambio directo y consiste en: 7. En este momento el elemento x
1) Elegir un elemento x al azar divide el arreglo en dos subarreglos
2) Buscar por la izquierda del arreglo tales que el subarreglo izquierdo
un elemento mayor que x. contiene los elementos <= que x y
el subarreglo derecho > que x, por
3) Buscar por la derecha un elemento lo tanto x esta ordenado.
menor o igual que x.
8. Hacer quicksort con el arreglo
4) Si no se han cruzado los índices izquierdo.
izquierda y derecha intercambiar
el elemento mayor. 9. Hacer quicksort con el arreglo
derecho.
ED/EOD-2010
4.2. Quick Sort (Clasificación por partición)
Recursivo (I, F) 2.3.3. Si P!=izq entonces
1.izq<- I, der<-F, P<-I, ban<-v ban<-v, aux<-A[P],
2.Repetir mientras (ban=v)
A[P]<-A[izq], A[izq]<-aux y
ban<-f
P<-izq
2.1.Repetir mientras(A[P]<=A[der])
y (P!=der) 2.3.4.{fin 2.3.3.}
der<-der-1 2.4.{fin 2.3.}
2.2.{fin 2.1.} 3.{fin 2}
2.3.Si P!=der entonces 4.Si (P-1)>I entonces
aux<-A[P], A[P]<-A[der], Recursivo(I, P-1)
A[der]<-aux y P<-der 5.{fin 4}
2.3.1.Repetir 6.Si F>(P+1) entonces
mientras(A[P]>=A[izq])y (P!=izq)
izq<-izq+1 Recursivo(P+1, F)
2.3.2.{fin 2.3.1.} 7.{fin 6}
Estructura de Datos
4.5 Shellsort (Inserción por incrementos decrecientes)
• Creado por Donald L. Shell en 1959.
• Análisis
– En éste método cada elemento se compara para su ubicación
correcta en el arreglo, con los elementos que se encuentran en
la parte izquierda del mismo.
– Si el elemento a insertar es más pequeño que el grupo de
elementos que se encuentran a su izquierda, es necesario
efectuar entonces varias comparaciones antes de su ubicación
– Shell propone que las comparaciones entre elementos se
efectúan con saltos de mayor tamaño pero con incrementos
decrecientes, así, los elementos quedarán ordenados en el
arreglo más rápidamente.
• Ej. A: 15 67 08 16 44 27 12 35
ED/EOD-2010
4.5 Shellsort (Inserción por incrementos decrecientes)
• Algoritmo
1.Hacer x<- N-1
2.Repetir mientras (x>1)
Hacer x<-ent(x/2) y ban<-v
2.1.Repetir mientras(ban = v)
Hacer ban<-f, i<-0
2.1.1.Repetir mientras((i+x) < N)
2.1.1.1.Si A[ i ]>A[i+x] entonces
Hacer aux<-A[ i ], A[i]<-A[i+x],
A[i+x]<-aux y ban<-v
2.1.1.2.{fin 2.1.1.1.}
Hacer i<-i+1
2.1.2.{fin 2.1.1.}
2.2.{fin 2.1.}
3.{fin 2.}
4.4 Mezcla natural (o equilibrada)
• Es una mejora del algoritmo de mezcla directa
puesto que en vez de considerar tramos de
tamaño fijo se toman en cuenta para la
ordenación en todo momento tramos de
longitud máxima.
• Al igual que mezcla directa se debe hacer un
proceso de partir el archivo o arreglo original
para mezclarlo, posteriormente mientras en el
archivo A haya elementos a mezclar.
ED/EOD-2010
4.4 Mezcla natural (o equilibrada)…
Ejemplo
A: 3, 1, 2, 4, 6, 9, 5, 8, 10, 7
1. Se separan todos los tramos
ordenados de la estructura:
A: [3], [1, 2, 4, 6, 9], [ 5, 8, 10], [7]
Estructura de Datos
4.6 Búsqueda Secuencial o lineal
• Descripción
– Consiste en localizar un registro (elemento) con un valor
de llave particular.
• Análisis
– Empezar del inicio de la lista e ir a través de cada registro
hasta encontrar la llave indicada (K) o hasta el final de la
lista.
– La búsqueda termina exitosamente cuando se localiza el
registro que contenga la llave buscada o cuando se alcanza
el final del archivo.
• Éste método es aplicable a cualquier estructura de datos.
. Estructura de Datos
4.6 Búsqueda Secuencial o lineal…
Algoritmo de Búsqueda Secuencial Desordenada
1.Hacer ban <- f, i<-0
2. Repetir mientras (i<N) y (ban=f)
2.1. Si A[i] = K entonces
Imprimir “el elemento si está en el arreglo”
y hacer ban<-v
2.2. {fin 2.1.}
i<-i+1
3. {fin 2.}
4. Si ban = f entonces
Imprimir “el elemento no está en el arreglo”
5. {fin 6.}
Estructura de Datos
Algoritmo de Búsqueda Secuencial Ordenada
1.Hacer ban <- f, i<-0
2. Si K = A[N-1] entonces imprimir “si existe”
De lo contrario
Si K > A[N-1] entonces imprimir “no existe”
De lo contrario
3. Repetir mientras (i<N) y (ban=f)
2.1. Si A[i] >= K entonces
hacer ban<-v
de lo contario
i<-i+1
2.2. {fin 2.1.}
3. {fin 2.}
4. Si A[i] = K entonces
Imprimir “el elemento si está en el arreglo”
de lo contrario
Imprimir “el elemento no está en el arreglo”
5. {fin 6.}
Estructura de Datos
4.7 Búsqueda Binaria
Consiste en dividir el intervalo de búsqueda en dos partes.
Análisis
◼ Se divide la estructura en dos partes ( cen= N/2).
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)
• Descripción: Consiste en aplicar una
función que traduce un conjunto de
posibles valores clave en un rango de
direcciones o claves relativas
• Colisión: se presenta cuando a diferentes
claves les corresponde una misma dirección
o clave relativa.
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)
Funciones Hash
• Son los diferentes cálculos que se realizan para obtener
una dirección relativa a partir de una clave.
• Módulo
H(K)=(K mod N)+1
donde N es el número de elementos del arreglo y K es la clave del dato a buscar
• Plegamiento
H(K)=dig_mens_sig((d1..di)*+(di+1..dj)*+... *+(d1..dn)+1
. Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)…
Solución de colisiones
Reasignación
Principio de comparación y reasignación.
◼ Prueba Lineal:
Análisis
Una vez detectada la colisión se debe recorrer el
arreglo secuencialmente a partir del punto de colisión.
El proceso de búsqueda concluye cuando el elemento
es hallado o bien cuando se encuentra una posición
vacía.
El arreglo se encuentra una estructura circular.
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)…
Algoritmo 2.1.1.Si Dx = N+1 entonces
1.D<-H(K) //genera dirección Dx<-1
2.Si V[D]=K entonces 2.1.2.{fin 2.1.1.}
Impr. “El elemento está en la 2.2.{fin 2.1.1.}
posición D” 2.3.Si V[Dx] = K entonces
De lo contrario Impr. “El elemento está en
la posición Dx”
Dx<-D+1
De lo contrario
2.1.Repetir mientras Impr. “El elemento no existe”
(Dx<=N)y(V[Dx]=!vacío) y
2.4.{fin 2.3.}
(V[Dx]!=K) y (Dx!=D)
3.{fin 2.}
Dx<-Dx + 1
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)…
Prueba cuadrática De lo contrario
Análisis I<-1 y Dx<-D+I2
Similar al método de prueba 2.1.Repetir mientras
(V[Dx]!=K)y(V[Dx]!=vacío)
lineal la diferencia es que las
direcciones alternativas se ++I y Dx<-D + I2
generan como D+1, D+4, 2.1.1.Si Dx > N entonces
D+9,...,D+i2 en vez de D+1, I<-0, Dx<-1 y D<-1
D+2,...,D+i; 2.1.2.{fin 2.1.1.}
Esto permite una mejor 2.2.{fin 2.1.}
distribución de claves 2.3.Si V[Dx]=K entonces
colisionadas. Impr. “El elemento está en la
Algoritmo posición Dx”
1.D<-H(K) De lo contrario
2.Si V[D]=K entonces Impr. “El elemento no está
en el arreglo”
Impr. “El elemento está en la 2.4.{fin 2.3.}
posición D”
3.{fin 2.}
4.8 Búsqueda Hash (Por conversión de claves)…
Doble dirección Hash Algoritmo
1.D<-H(K)
Análisis 2.Si V[D]=K entonces
◼ Detectada la colisión se Impr. “El elemento está en la
debe generar otra posición D”
dirección aplicando la De lo contrario Dx<-H(D)
función hash a la 2.1.Repetir mientras
dirección previamente (Dx<=N)y(V[Dx]!=K)y
obtenida. (V[Dx]!=vacío) y (Dx!=D)
◼ El proceso se detiene Dx<- H’(D)
cuando el elemento es 2.2.{fin 2.1.}
hallado o bien cuando se 2.3.Si V[Dx]=K entonces
encuentra una posición Impr. “El elemento está en
vacía. la posición Dx”
◼ La función hash que se
De lo contrario
aplique puede ser o no la Impr. “El elemento no está
en el arreglo”
misma que originalmente
2.4.{fin 2.3.}
se aplicó a la clave.
3.{fin 2.}
4.8 Búsqueda Hash (Por conversión de claves)…
Arreglos anidados
Análisis
◼ Cada elemento del arreglo tenga otro arreglo en el
cual se almacenen los elementos colisionados.
◼ Resulta una solución sencilla pero ineficiente
debido a que la estructura utilizada (arreglo) es de
tipo estática.
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)…
Encadenamiento
Análisis
◼ Cada elemento del arreglo tenga un apuntador a una
lista ligada, la cual se irá generando e irá almacenando
los valores colisionados a medida que se requiera.
◼ Es el método más eficiente de solución de colisiones
debido al dinamismo de la lista.
◼ Desventaja:
◼ Se ocupa espacio adicional al de la tabla
◼ Si las listas crecen demasiado se perderá la facilidad
de acceso directo del método hash.
Estructura de Datos
4.8 Búsqueda Hash (Por conversión de claves)…
Algoritmo
1.D<-H(K)
2.Si V[D].cve=K entonces
Impr. “El elemento está en la
posición D”
De lo contrario Q<-V[D].sig
2.1.Repetir mientras (Q!=NULL)y(Q.cve!=K)
Q<- Q.sig
2.2.{fin 2.1.}
2.3.Si Q=NULL entonces
Impr. “El elemento no está en la lista”
De lo contrario
Impr. “El elemento está en la lista”
2.4.{fin 2.3.}
3.{fin 2.}
PRÁCTICA #2: Implementación de los métodos de
búsqueda
• Construye una aplicación en java en la que permitas que el usuario, a
partir de un conjunto de datos dados, realice la búsqueda de un valor
por cualquiera de los métodos de búsqueda vistos en clase que
seleccione de un menú. Crea una plantilla que contenga los métodos
de búsqueda estudiados para que la aplicación o proyecto la utilice.
OFERTA:
Estructura de Datos
CONCLUSIONES…
• Ventajas:
1. Se pueden utilizar valores naturales de la llave,
ya que se traducen internamente a direcciones
fáciles de localizar.
2. Se logra independencia física y lógica, debido a
que los valores de las llaves son independientes
del espacio de direcciones.
3. No requiere almacenamiento adicional para los
índices.
Estructura de Datos
CONCLUSIONES…
• Desventajas:
1. No pueden usarse registros de longitud
variable.
2. El archivo no está clasificado.
3. No permite llaves repetidas.
4. Sólo permite acceso por una sola llave.
Estructura de Datos
CONCLUSIONES…
• COSTOS
1.Tiempo de procesamiento requerido
para aplicar la función hash.
2. Tiempo de procesamiento y los
accesos E/S requiere para solucionar
colisiones.
Estructura de Datos
Ejercicios Hash:
1. Sea V un arreglo de 10 elementos, obtén las direcciones relativas de las
siguientes claves aplicando las funciones hash vistas: 72, 34, 96, 79, 94,
19, 88, 63, 38, 46. Solucionar colisiones con prueba lineal.
2. Considera un arreglo V con 100 elementos, obtén las direcciones
relativas de las siguientes claves aplicando las funciones hash vistas:
5699, 7060, 4465, 1349, 1515, 3273, 5107, 1435, 6418, 2567.*
Solucionar colisiones con prueba cuadrática.
3. Calcula las direcciones alternativas de las siguientes claves mediante las
funciones hash, para un arreglo V con 20 elementos: 181, 112, 45, 136,
146, 143, 95, 155, 134, 33, 125, 155, 68, 187, 71.** Solucionar colisiones
con doble dirección hash.
Estructura de Datos
ESTRUCTURA DE DATOS
ED/EOD-2010