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. 2.

Con bloques de igual tamaño. Con bloques de distintos tamaño.

2.

Usando algoritmos de ordenación de datos en memoria (por secuencias equilibradas). Dividir o partir un fichero desordenado en partes más pequeñas. Ordenar en memoria. Mezclar o fusionar conjuntos de datos ordenados.
3

Operaciones:

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:
Fichero c→2 5 8 15 19 20 27 36

4

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.

2.

Fase de distribución: reparte equitativamente los tramos ordenados del fichero c sobre los ficheros a y b. 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. 2. 3.

Si el elemento i pertenece al mismo tramo ordenado. Entonces transferir el elemento i al fichero auxiliar actual y pasar al elemento siguiente. 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. 2. 3.

Si el elemento i de un fichero (1º) es menor que el elemento j del otro fichero (2º) Entonces transferir el elemento i del fichero 1º al destino y pasar al elemento siguiente del fichero 1º. 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)

9