Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-1
Ordenación
Todas las tarjetas están visibles Sólo visibles las tarjetas superiores
D ato s a ord enarAuxiliar A lmacen ami ent o p ri mario D ato s a ord enar
I/O
RAM RAM
A lmacen ami ent o
secu nd ari o
(externo )
CPU CPU
Algoritmo Algoritmo
Ordenación Interna Ordenación Externa
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
4
Algoritmos de ordenación externa (I)
Fichero de
datos a ordenar
• Dos diferencias importantes con la ordenación interna:
– El coste de acceso a un elemento es ahora varios ordenes de
magnitud superior que cualquier cálculo en CPU
– Restricción severa de acceso a los elementos, dependiente del tipo
de almacenamiento secundario utilizado.
• Limitar los movimientos entre el almacenamiento externo y
la memoria principal
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
5
Algoritmos de ordenación externa (II)
• Idea:
– Trabajar con varios dispositivos adicionales (discos, cintas) para
guardar operaciones intermedias
• Fases:
– Generación de tramos (división+distribución)
• Trocear el fichero inicial en bloques de datos ordenados (tramos)
• Guardar los tramos en dispositivo externo auxiliar
– Mezcla de tramos
• Fundir los tramos en sucesivas pasadas hasta tener un único tramo
Datos a ordenar Cintas disponibles
Cinta 1
División Cinta 2
+ Mezcla
Distribución Cinta 3
Campo 1 1 3 3 3 4 4 5 Ordenación
Campo 2 20 10 10 20 10 40 30 inestable
• Simétrico/asimétrico
– Cuando cuesta lo mismo ordenar 2341 que 5123
• Correcto/incorrecto
– Cuando siempre encuentra la solución correcta
– Es "lo típico"
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
9
Algoritmos de ordenación interna: estructuras
A:
A(k) ó A[k]
• Idea
5 2 196 8
Espacio disponible en
memoria
• Ejemplo
A={ 5 2 1 9 6 8 } i=2
Selecciona
carta 25 1 96 8 i=3,
carta=1
ordenado por ordenar
j =2 i=3
Busca 25 5 96 8 i=3,j=2
posición
22 5 96 8 i=3,j=1
Inserta
carta 12 5 96 8
ordenado por ordenar
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
12
Inserción directa (III)
A = InserciónDirecta(A, N) %A vector de registros a ordenar, N: nº de registros
1 For i=2 to N
carta = A[i]; % selecciona última carta
j=i-1; %busca punto de inserción
2 While (j>0 & carta < A[j]) % alternando comparaciones
A[j+1]=A[j]; % y movimientos
j=j-1;
end 2
A[j+1]=carta; % inserta la carta
end 1
Inserción directa
Seleccionar el
siguiente Búsqueda
• Uso de un centinela
– Evita salirse del array simplificando la condición
– Se añade el centinela en el extremo del array para detectar que se
llega al final del mismo
• Nota: Será necesario dimensionar A para tener N+1 elementos
A = InserciónDirectaCentinela(A, N)
1 For i=2 to N
carta = A[i]; % selecciona última carta
j=i-1;
A[0]=carta;
2 While (carta < A[j]) % comparación más sencilla
A[j+1]=A[j];
j=j-1;
end 2
A[j+1]=carta; % inserta la carta
end 1
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
14
Inserción binaria
• En inserción directa A(1:i-1) ya ordenado
– Mejora en la búsqueda del punto de inserción (mediante bisección)
IANSERCIÓN _BINARIA
= InserciónBinaria (A,(A)
N) iz m de
1 For i=2 to N
carta = A[i]; iz=1; de = i-1; 1 2 5 67 8 9
2 While iz de
m = floor[(iz+de)/2]; Zona ya ordenada
Inserción directa
Seleccionar el
siguiente Búsqueda
• Ejemplo:
p or orden ar
A={ 5 2 1 9 6 8 } i =1
min item 5 2 1 9 6 8
Selecciona
i =1 ,
i =1 k =3 k =3 ,x=1
Intercambia 1 2 5 9 6 8
o rd enad o p or orden ar
1 2 4 8
Ya
3 5 6 7 ordenadas
Fin
Fin
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
20
Mezcla directa (III)
• Ejemplo
• Característica dominante: :
– Intercambio entre pares de elementos
– Mezcla de inserción y selección directa
• IDEA:
– Hacer repetidas pasadas sobre el array ordenando parejas de
elementos contiguos
Intercambio
- +
A={ - + }
d esti no S ecuen cia or ig en
(ya ordenado) (por ordenar)
A = IntercambioBurbuja (A, N)
mueve 6 y 1 1 5 2 6 9 8 i =2 ,
j =6 :-1: 2
i =3 ,
mueve 8 y 2 1 2 5 6 8 9 j =6 :-1: 3
o rd enad o
• Se hacen pasadas inútiles
– controlar lo que realmente está ordenado
• Asimetría antinatural
– Alternar el sentido de las pasadas
1 pasada 3 pasadas
256 1 6 12 5
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
24
Intercambio directo: sacudida (I)
iz i z' d e Alternancia iz de
j j
A={ - + k - +} A={ - + - +}
d esti no S ecuen cia o rig en d esti no d esti no o rig en d esti no
(ya ordenado) (por ordenar) (ya ordenado) (ya ordenado) [iz ... d e](ya ordenado)
A = IntercambioSacudida (A, N)
iz=2; de=N; k=N; % inicializa origen [iz ... de]
1 Repeat
2 For j=de to iz step -1 % movimiento derecha-izquierda
if (A[j-1]>A[j]) then
x=A[j-1]; A[j-1]=A[j]; A[j]=x; k=j;
end 2
iz = k+1; % mueve extremo izq de origen
4 For j=iz to de % movimiento izquierda-derecha
if (A[j-1]>A[j]) then
x=A[j-1]; A[j-1]=A[j]; A[j]=x; k=j;
end 4
de = k-1; % mueve extremo dcha de origen
1 until (iz>de)
Fin
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
25
Intercambio directo: sacudida (II)
• Ejemplo p or orden ar
A={ 5 2 1 9 6 8 } i z=2 de=6
k =6
mueve 6 y 1 1 5 2 6 9 8 k =2
i z=3 de=6
mueve 5 y 9 1 2 5 6 8 9 k =6
i z=3 de=5
k =6
stop 1 2 5 6 8 9 i z=7 de=5
5 2 8 4 en 4
2 5 8 2 en 2
1 en 1
4 2 7 3
Inserción
directa
2 3 4 7
• Ejemplo p=4
de 4 en 4 53 1 9 24 78
4 grupos
23 1 85 4 7 9
2 3 1 8 5 4 7 9 i=3
grupo 1
p=2 1 3 2 8 5 4 7 9 i=4
grupo 2
2 grupos 1 3 2 8 5 4 7 9
de 2 en 2 i=5
grupo 1
1 3 2 8 5 4 7 9 i=6
grupo 2
1 3 2 4 5 8 7 9 i=7
grupo 1
1 3 2 45 87 9
de 1 en 1 1 3 2 4 5 8 7 9
p=1
1 grupo
ordenado
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
30
Heapsort
N items
Secuencia origen Secuencia destino
Siguiente Insertar en el siguiente
iter Selección en
C=N-2
N-1 items
Secuencia origen Secuencia destino
• TRUCO:
– guardar en cada iteración más información que el elemento mínimo
-> Estructura "montículo"
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
31
Heapsort: estructura montículo (I)
• Montículo:
– Secuencia estructurada ("ordenada") de items en árbol
4
18 5 6
20 7 1 2 3 4 5 6 7 8 9 10
16 14 19 11 25 18 20 16 14 19 11 12 15 13
8 9 10
12 15 13
Propiedad: Propiedad:
A[Padre (i)] A[i] i1 A[2i] A[i] A[2i1] i iz....de /2
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
32
Heapsort: estructura montículo (II)
4
18 Ejemplo:
5 6
20 7 1 2 3 4 5 6 7 8 9 10
16 14 19 11 25 18 20 16 14 19 11 12 15 13
8 9 10
12 15– Altura
13de un nodo: número de nodos en el camino hasta la hoja
Propiedad:
más alejada del subárbol con raíz enPropiedad:
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
ese nodo
A[Padre (i)] A[i] i1 A[2i] A[i] A[2i1] i iz....de /2 33
Heapsort: Mantener la propiedad (I)
i
Intercambia
-
iz de
Continua
comprobando +
propiedad
• Suposición
– Subárboles hijos 'iz' y 'de' tienen que ser ya montículos
• Versión recursiva o iterativa
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
34
Heapsort: Mantener la propiedad (II)
4
15 5
20 7 6 4
18 5
20 76
i
18 14 19 11 15 14 19 11
8 9 10 8 9 10
12 16 13 12 16 13
1
(c) 25
2 3
18 20
4 5 6 7
16 14 19 11
8 9 10
12 15 13
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
36
Heapsort: construye montículo inicial
A = ConstruyeMonticuloInicial (A, N) % Crea el montículo inicial
Zona Zona
DESORDENADA ORDENADA
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
38
Heapsort: algoritmo de ordenación (II)
A = Heapsort (A, N) % Algoritmo de ordenación basado en el montículo
Tam_Mont
https://www.youtube.com/watch?v=EreoMaOBTzE
19
14 14
15 i 19 204 25 13 12 i 13
4 20 25 5 65 i 19 20 25 4
12 (g) 111
13 18 (h)12 1
11 16 18 11 1 15 16 18
13 12 (i) 11
2 3 2 i i
19 20
i
1225 11 19 11
20 25 13 19 20 13
12 25
14 151 16 18 14 15 16 118 14 15 16 18 1
(g) 13 (h) 12 (i) 11
19 20 2 25 3 19 20 252 i
19 20 25 i
ya ordenado
i
12 11 11 13 12 13
14 15 16 18 14 15 16 18 14 15 16 18
19 20 25 19 20 25 19 20 25 ya ordenado
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
41
Quicksort (Ordenación rápida)
Intercambio directo
Intercambio Inventor:
A. Hoare, en 1962
- +
Método rápido
- +
Solucionar
Ojo, no hay proceso de mezcla
para unir las soluciones (como en
Mezcla Directa)
dividir
Solucionar Solucionar
N pequeño
dividir
Solución
Solucionar Solucionar
iz d d+1 de
Ejemplo:
d
1 3 1 42 9 58
El índice d se determina durante el
proceso de división a partir de un
valor umbral o "pivote"
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
44
Quicksort: Divide
[A, j] = Divide (A, iz, de) % devuelve el array reorganizado y la posición de corte d
[A, umbral] = SeleccionaUmbral (A, iz, de); % Además pone el pivote en A[iz]
i = iz ; j = de; % inicializa contadores
CONTINUAR = 1;
1 while (CONTINUAR = 1)
while (A[i] < umbral) i = i+1; end; % avanza a la derecha
while (umbral < A[j]) j = j- 1; end; % avanza a la izquierda
2 if (i<j) then
intercambiar A[i] con A[j];
i=i+1; j=j-1; % para salir while 1
else
CONTINUAR = 0; % j tiene la posición de corte
end 2
A[j]> umbral
end 1
iz
j
Fin
1 3 1 92 4 58
while (umbral < A[j]) j = j- 1; end;
2 if (i<j) then
intercambiar A[i] con A[j];
i=i+1; j=j-1; ij
1 3 1 42 9 58
else
CONTINUAR = 0;
end 2
end 1 j i
Fin
1 3 1 42 9 58 STOP
d
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
46
Quicksort: Algoritmo de ordenación
iz=1 d de=N
A={ }
1 d d+1 N
• Lo más sencillo:
– Hay un caso claramente malo ¿cuál es?
[A, u] = SeleccionaUmbral (A, iz, de) % iz y de indican la zona a considerar
u = A[iz]; % simplemente coge la clave del primer elemento (iz) como umbral
% también se podría coger el del final (es la misma idea)
Fin
• Suposición:
– Todas las claves son enteros en el rango 1-k, para algún
entero k
• Idea:
– determinar para cada elementos cuántos tienen menor clave que él y,
– utilizar dicho valor para determinar la posición en el array ordenado
1 N
A={ }
1 N
Hay 7 items con A[]<A[3]
Insertar en B[8]
B={ }
¿? Así no está
ordenado por
fechas (aunque el
algoritmo sea
estable)
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
54
Radix sort: Ejemplo bueno
a m d
Ordenar por fechas los siguientes elementos utilizando como
clave de ordenación
clave_a_utilizar = aaaa, mm, dd
(primero ordenamos por día, luego por mes,
y finalmente por año)
Así SÍ está
ordenado por
fechas
• Suposición:
– Las claves que aparecen en el array a ordenar, son valores
entre [0,1) y están "bastante bien repartidas“
300 datos
IDEAL: Las claves son
generadas por proceso
“aleatorio” que distribuye las
claves uniformemente en [0,1)
Recipientes
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
Fin
A B
0.995 0 0.075 0.055
0.075 1
0.873 2 0.262
0.757 3 0.386
0.901 4
0.915 5 0.515
0.515 6
0.055 7 0.757
0.262 8 0.873
0.386 9 0.995 0.901 0.915
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
61
Comparativa tiempos de ejecución