You are on page 1of 9

Algoritmos.

Ordenación Externa

1
Algoritmos. Ordenación externa (1)
„ Un algoritmo es una secuencia ordenadas de acciones
primitivas que realizan un trabajo.
„ Un algoritmo debe ser finito y estar bien definido.
„ Los algoritmos a diferencia de los programas no son
directamente interpretables por el ordenador, deben ser
traducidos a un lenguaje de programación concreto.
„ Ordenación de ficheros
… Si el fichero es pequeño, se puede copiar en memoria y utilizar los
algoritmos de ordenación (burbuja, inserción directa, ordenación
rápida, …)
… Cuando los ficheros son demasiado grandes es necesario recurrir a
técnicas que actúan sobre el propio fichero (métodos de
ordenación externa).

2
Algoritmos. Ordenación Externa (2)
„ Si se tienen tantos datos que ordenar que no caben en
memoria o va creciendo el número de datos, es necesario
utilizar ficheros como lugar de almacenamiento.
„ Tipos de ordenación externa:
1. Sin usar algoritmos de ordenación de datos en memoria (por
mezcla directa)
1. Con bloques de igual tamaño.
2. Con bloques de distintos tamaño.
2. Usando algoritmos de ordenación de datos en memoria (por
secuencias equilibradas).
„ Operaciones:
… Dividir o partir un fichero desordenado en partes más pequeñas.
… Ordenar en memoria.
… Mezclar o fusionar conjuntos de datos ordenados.

3
Mezcla directa: bloques iguales
„ Ordenar un fichero c a partir del propio fichero y dos ficheros auxiliares a
y b mediante mezcla o fusión directa de bloques iguales.
„ Ejemplo fichero c→ 19 27 2 8 36 5 20 15 6 Dividir en bloques iguales.
… Dividir el fichero c en dos fichero auxiliares a y b:
„ Fichero a→19 27 2 8 36
„ Fichero b→5 20 15 6
… Mezclar los ficheros a y b en c, ordenando de 2 en 2:
„ Fichero c→5|19 20|27 2|15 6|8 36
… Partir el fichero c de 2 en 2:
„ Fichero a→5 19 2 15 36
„ Fichero b→20 27 6 8
… Mezclar los ficheros a y b en c, ordenando de 4 en 4:
„ Fichero c→5|19|20|27 2|6|8|15 36
… Partir el fichero c de 4 en 4:
„ Fichero a→5 19 20 27 36
„ Fichero b→2 6 8 15
… Mezclar los ficheros a y b en c, ordenando de 8 en 8:
„ Fichero c→2|5|8|15|19|20|27 36
… Partir el fichero c de 8 en 8:
„ Fichero a→2 5 8 15 19 20 27
„ Fichero b→36
… Mezclar los ficheros a y b en c, ordenando de 16 en 16: 4
„ Fichero c→2 5 8 15 19 20 27 36
Mezcla directa: bloques distintos
„ Ordenar un fichero c a partir del propio fichero y dos ficheros auxiliares a
y b mediante mezcla o fusión directa de bloques distintos.
„ Ejemplo fichero c→ 19 27 2 8 36 5 20 15 6 Dividir en bloques de
números consecutivos ordenados.
… Dividir el fichero c en dos fichero auxiliares a y b:
„ Fichero a→19 27 | 5 20 | 6
„ Fichero b→2 8 36 | 15
… Mezclar los bloques ordenados de los ficheros a y b en c:
„ Fichero c→2 8 19 27 36 | 5 15 20 | 6
… Partir el fichero c en los bloques ordenados:
„ Fichero a→2 8 19 27 36 | 6
„ Fichero b→5 15 20
… Mezclar los bloques ordenados de ficheros a y b en c:
„ Fichero c→2 5 8 15 19 20 27 36 | 6
… Partir el fichero c en los bloques ordenados:
„ Fichero a→2 5 8 15 19 20 27 36
„ Fichero b→6
… Mezclar los bloques ordenados de ficheros a y b en c:
„ Fichero c→2 5 6 8 15 19 20 27 36

5
Secuencias equilibradas
„ Ordenar un fichero c a partir del propio fichero y dos ficheros auxiliares a
y b usando algoritmos de ordenación de datos en memoria (por
secuencias equilibradas).
„ Ejemplo fichero c→ 19 27 2 8 36 5 20 15 6. Ordenar en memoria
(algoritmos de ordenación) en bloques de 3.
… Ordenar bloques y colocar alternativamente en los ficheros a y b:
„ Fichero c→19 27 2 8 36 5 20 15 6
„ Memoria: 2 19 27 ………..Fichero a→2 19 27 |
„ Memoria: 5 8 36 …………Fichero b→5 8 36 |
„ Memoria: 6 15 20 ………..Fichero a→2 19 27 | 6 15 20
… Mezclar los bloques ordenados de los ficheros a y b en c:
„ Fichero c→2 5 8 19 27 36 | 6 15 20
… Dividir el fichero c en los bloques ordenados:
„ Fichero a→2 5 8 19 27 36
„ Fichero b→6 15 20
… Mezclar los bloques ordenados de ficheros a y b en c:
„ Fichero c→2 5 6 8 15 19 20 27 36

6
Ordenación de ficheros (1)
… Ordenar un fichero c a partir del propio fichero y dos ficheros
auxiliares a y b.
1. Fase de distribución: reparte equitativamente los tramos
ordenados del fichero c sobre los ficheros a y b.
2. Fase de fusión o mezcla: fusión de los ficheros a y b sobre el
fichero c.

… Repetir las fases (1) y (2) hasta que el número de tramos


ordenados del fichero c, sea 1.
… Una forma de reducir el número de iteraciones es distribuir los
tramos ordenados sobre más de dos ficheros.

7
Ordenación de ficheros (2)
… Distribuir los tramos ordenados de un fichero en dos ficheros auxiliares.
1. Si el elemento i pertenece al mismo tramo ordenado.
2. Entonces transferir el elemento i al fichero auxiliar actual y pasar al elemento
siguiente.
3. Sino transferir el elemento i al fichero auxiliar siguiente y pasar al elemento
siguiente.

… Fusionar ordenadamente el contenido de dos ficheros ordenados en otro


fichero destino.
1. Si el elemento i de un fichero (1º) es menor que el elemento j del otro fichero (2º)
2. Entonces transferir el elemento i del fichero 1º al destino y pasar al elemento
siguiente del fichero 1º.
3. Sino transferir el elemento j del fichero 2º al destino y pasar al elemento siguiente
del fichero 2º.

fichero c: 18 32 10 60 14 42 44 68 12 24 30 48
18 32 - 10 60 - 14 42 44 68 - 12 24 30 48 (tramos ordenados)
fichero a:
fichero b:
8
Ordenación de ficheros (3)

You might also like