o cómo evitar tener que buscar una aguja en un pajar

Post on 01-Aug-2022

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1Diego Gutiérrez

23. Ordenación de vectores (tablas)

3Diego Gutiérrez

Ordenación

O cómo evitar tener que buscar una aguja en un pajar

4Diego Gutiérrez

Ordenación

O cómo evitar tener que buscar una aguja en un pajar

¿Cómo buscamos una palabra en un diccionario? ¿O un número de teléfono en una guía?

Usando nuestro conocimiento de cómo están ordenados los datos

5Diego Gutiérrez

Ordenación

O cómo evitar tener que buscar una aguja en un pajar

¿Cómo buscamos una palabra en un diccionario? ¿O un número de teléfono en una guía?

Usando nuestro conocimiento de cómo están ordenados los datos

Sin un orden lógico en los datos, las búsquedas podrían ser terriblemente largas

Agilizar las operaciones de búsqueda es una razón que justifica la importancia de contar con estructuras de datos ordenadas.

6Diego Gutiérrez

Ordenación

Ordenar: organizar los datos según un criterio

La comparación (aplicación del criterio) de dos elementos cualesquiera del conjunto a ordenar debe resultar en un valor lógico que indique si los elementos cumplen el criterio de ordenación

Aunque todos sabemos ordenar un número pequeño de elementos (por orden alfabético, por numeración creciente o decreciente…) la tarea se haría casi imposible para grandes cantidades de elementos. Entran en juego los algoritmos y los ordenadores

7Diego Gutiérrez

Ordenación

La importancia de contar con tablas de datos ordenadas se justifica por la eficiencia de los algoritmos de búsqueda binaria que pueden ser aplicados (esp. si n>100 aprox.)

Algunos de los algoritmos de ordenación más utilizados son inserción, intercambio (burbuja), selección, mezcla o quicksortLa elección de un determinado algoritmo depende de factores como el tamaño de la tabla, el tipo de datos, la forma de acceso a la información o la cantidad de memoria disponible.

8Diego Gutiérrez

Ordenación

El problema:

Entrada: secuencia ⟨a1, a2, …, an⟩ de elementosSalida: permutación ⟨a'1, a'2, …, a'n⟩ tal que a'1≤a'2≤…≤a'n

Suponemos definida una función medida que, aplicada a los datos de la tabla proporciona como resultados valores pertenecientes a un tipo escalar y, por lo tanto, comparables

Ejemplo:Entrada: 8 2 4 9 3 6Ordenación exigida: medida(a'1) <= medida(a‘2) <= ...<= medida(a‘n)

Salida: 2 3 4 6 8 9

secuencia de datos ordenadosde acuerdo con un determinado criterio de ordenación.

9Diego Gutiérrez

Para ilustrar estas ideas, vamos a considerar una tabla T con unnúmero reducido de datos, por ejemplo ocho datos :

10Diego Gutiérrez

Para ilustrar estas ideas, vamos a considerar una tabla T con unnúmero reducido de datos, por ejemplo ocho datos :

Se muestran a continuación ahora los valores de la medida de cada uno de los datos. Por simplicidad, se ha considerado en este ejemplo que los valores de medida son datos de tipo entero.

11Diego Gutiérrez

La ordenación de la tabla T debe conducir a una reorganización de sus datos que satisfaga que sus medidas respectivas estén ordenadas de forma no decreciente (“≤”). Tras la ordenación, el valor de la tabla T es el siguiente :

Se puede comprobar que los valores de las medidas de cada uno de ellos respeta el criterio de ordenación no decreciente (“≤”).

12Diego Gutiérrez

Ordenación

Tres algoritmos:SelecciónInserciónIntercambio directo (o burbuja)

No usan tablas auxiliares para la ordenación

Desde el punto de vista didáctico son excelentes ejemplos de diseño de algoritmos sobre estructuras de datos indexadas

Otros algoritmos más eficientes (quicksort, mergesort…) no se presentan ya que su complejidad sobrepasa el ámbito de este curso

13Diego Gutiérrez

Método de selección:

Su eficiencia destaca cuando se aplica a tablas de dimensión reducida.

El método se basa en una idea muy sencilla y fácil de programar. Se trata de iterar a lo largo de la tabla, buscando en cada iteración el elemento menor (es decir, el dato cuya medida es la menor) entre los que quedan por ordenar para situarlo en la posición que le corresponde.

http://www.youtube.com/watch?v=boOwArDShLU&feature=related

14Diego Gutiérrez

Método de selección

En la iteración i-ésima se parte de que la subtabla T(1..i-1) ya está ordenada (con los i-1 valores menores de la tabla). Se busca entonces el elemento siguiente en la ordenación dentro de la subtabla T(1..n) y se permuta con el elemento de la posición T(i)

46 21 8 22 11

http://www.youtube.com/watch?v=boOwArDShLU

15Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

46 21 8 22 11

16Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 21 46 22 11

17Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 21 46 22 11

18Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 21 46 22 11

19Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 46 22 21

20Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 46 22 21

21Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 46 22 21

22Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

23Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

24Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

25Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

26Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

27Diego Gutiérrez

Método de selección

Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada

8 11 21 22 46

(El último elemento evidentemente ya está en su sitio)

28Diego Gutiérrez

Método de selecciónalgoritmo Seleccion (referencia a: tpTabla; valor n: integer);{ Pre: a=a0Post: La tabla a almacena una permutación de a0 y sus datos están ordenados}variables

i, j, pos_min: integer; {i: lugar, j: elemento, pos_min: posición del mínimo}min: tpElemento;

principiopara i:=1 hasta n-1 hacer

pos_min:=i; min:=a[pos_min] para j=i+1 hasta n hacer

si condición entonces {nueva posición, nuevo mínimo}pos_min:=j; min:= a[pos_min] fsi

fparasi pos_min <> i entonces {si i no era el menor, se intercambia}

a[pos_min]:=a[i];a[i] = min; fsi

fparafin

a[j] < a[pos_min]

29Diego Gutiérrez

Método de selecciónalgoritmo Seleccion (referencia a: tpTabla; valor n: integer);{ Pre: a=a0Post: La tabla a almacena una permutación de a0 y sus datos están ordenados}variables

i, j, pos_min: integer; {i: lugar, j: elemento, pos_min: posición del mínimo}min: tpElemento;

principiopara i:=1 hasta n-1 hacer

pos_min:=i; min:=a[pos_min] para j=i+1 hasta n hacer

si condición entonces {nueva posición, nuevo mínimo}pos_min:=j; min:= a[pos_min] fsi

fparasi pos_min <> i entonces {si i no era el menor, se intercambia}

a[pos_min]:=a[i];a[i] = min; fsi

fparafin

Podemos no evaluar esta condición… (coste)

30Diego Gutiérrez

Método de selección

Simple y fácil de implementar…No muy eficiente para grandes tablas

31Diego Gutiérrez

Método de inserción directa

Inserción directa

El método es algo menos eficiente que el de ordenación por selección, salvo si la tabla a ordenar presenta una secuencia cuyos datos están próximos a la deseada tras la ordenación

Se itera n-2 veces. En la iteración i se parte de la precondición de que la subtabla T(1..i-1) está ordenada según valores no decrecientes (<=) de la medida de sus datos. La acción a iterar consiste en la inserción del dato T(i) en la posición que le corresponda de la subtabla T(1..i).

En cada iteración crece en una unidad el número de datos ya ordenados.

32Diego Gutiérrez

Método de inserción directa

Inserción directa:

El método es similar a ordenar por orden creciente una serie de cartas en la mesa: se examina la que se tiene en la mano, se analizan las ya ordenadas hasta encontrar el lugar correspondiente, se hace hueco y se inserta la carta.

http://www.youtube.com/watch?v=gTxFxgvZmQs

Para tener i cartas ordenadas, se parte de i-1 cartas ordenadas e inserta la nueva carta en el lugar correspondiente

O sea, se insertan elementos en una parte que ya está ordenada

33Diego Gutiérrez

Método de inserción directa

Inserción directa: Esquema básico

Se recorre la tabla con un bucle (índice i) desde el segundo elemento hasta el final, de forma que se van dejando ordenadas todas las posiciones inferiores. “Se hace hueco”: El elemento que se quiere insertar se guarda en una variable auxiliar y se va recorriendo la parte ordenada desde el final hasta el principio y desplazando los elementos para dejar el hueco donde insertar.El elemento en cuestión (el de índice i) se inserta en el lugar que le corresponde dentro de la parte ordenada.

para i:=2 hasta n hacerinsertar ai en el lugar adecuado en la secuencia a1….ai-1

fpara

34Diego Gutiérrez

Método de inserción directa

Elemento a buscarElementos

ordenados

ij

35Diego Gutiérrez

Método de inserción directa

Inserción directa

36Diego Gutiérrez

Método de inserción directa

Inserción directa

37Diego Gutiérrez

Método de inserción directa

Inserción directa

38Diego Gutiérrez

Método de inserción directa

Inserción directa

39Diego Gutiérrez

Método de inserción directa

Inserción directa

40Diego Gutiérrez

Método de inserción directa

Inserción directa

41Diego Gutiérrez

Método de inserción directa

Inserción directa

42Diego Gutiérrez

Método de inserción directa

Inserción directa

43Diego Gutiérrez

Método de inserción directa

Inserción directa

44Diego Gutiérrez

Método de inserción directa

Inserción directa

45Diego Gutiérrez

Método de inserción directa

Inserción directa

fin

Ver también http://www.wanginator.de/studium/applets/insertionsort_de.html

46Diego Gutiérrez

Método de inserción directa

Algoritmo detallado

algoritmo Insercion_Directa (referencia a: tpTabla; valor n: integer);{Pre: a = a0; Post: a es una permutación de a0 cuyos elementos están ordenados}variables

i, j: integer;{i: elemento a insertar, j: punto de inserción}aux: tpDato;

principiopara i:=2 hasta n hacer

aux:=a[i]; j:=i-1;mientras j>0 y a[j]>a[0] hacer {buscar punto inserción}

a[j+1] := a[j]; j := j-1

fmq;a[j+1] := aux; {insertar a[i] en su posición correcta}

fparafin

47Diego Gutiérrez

Método de inserción directa

Elemento a buscarElementos

ordenados

ij

Más rápido, también fácil de implementar

48Diego Gutiérrez

Método de la burbuja (o intercambio)

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

26 14 26 15 1 3

http://www.youtube.com/watch?v=1JvYAXT_064&mode=related&search

49Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

26 14 26 15 1 3

50Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 26 15 1 3

51Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 26 15 1 3

52Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 26 15 1 3

53Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 26 1 3

54Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 26 1 3

55Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 1 26 3

56Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 1 26 3

57Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 1 3 26

58Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 1 3 26

59Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 26 15 1 3 26

60Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 26 1 3 26

61Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 26 1 3 26

62Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 1 26 3 26

63Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 1 26 3 26

Si en la última iteración realizada los últimos elementos intercambiados son los de las posiciones j y j+1, la siguiente sólo necesitará comparar hasta el j-1, j (a partir de ahí ya estáordenada)

64Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 1 3 26 26

65Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 1 3 26 26

66Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 15 1 3 26 26

67Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 1 15 3 26 26

68Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 1 15 3 26 26

69Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 1 3 15 26 26

70Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

14 1 3 15 26 26

71Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 14 3 15 26 26

72Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 14 3 15 26 26

73Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 3 14 15 26 26

74Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 3 14 15 26 26

75Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 3 14 15 26 26

76Diego Gutiérrez

Método de la burbuja

Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez

1 3 14 15 26 26

77Diego Gutiérrez

Método de la burbuja

Ineficiente

78Diego Gutiérrez

Método de la burbuja

Algoritmo:

algoritmo Burbuja (referencia a: tpTabla; valor n: integer);variables

j: integer; {índice}aux: tpDato;ult_comp, ult_int: integer; {índices de la última pareja a comparar e intercambiada}

principioult_comp = (n-1) {comparo todos hasta el penúltimo} mientras que ult_comp>=1 hacer

ult_int = 1; {terminará si no hay más intercambios} para j=1 hasta ult_comp hacer

si condición_intercambio entonces aux:=a[j]; a[j]:=a[j+1]; a[j+1]:=aux;ult_int:=j; fsi fpara

ult_comp:=ult_int-1; fmqFin

a[j] > a[j+1]

79Diego Gutiérrez

Método de la burbuja

Algoritmo:

algoritmo Burbuja (referencia a: tpTabla; valor n: integer);variables

j: integer; {índice}aux: tpDato;ult_comp, ult_int: integer; {índices de la última pareja a comparar e intercambiada}

principioult_comp = (n-1) {comparo todos hasta el penúltimo} mientras que ult_comp>=0 hacer

ult_int = 1; {terminará si no hay más intercambios} para j=1 hasta ult_comp hacer

si condición_intercambio entonces aux:=a[j]; a[j]:=a[j+1]; a[j+1]:=aux;ult_int:=j; fsi fpara

ult_comp:=ult_int-1; fmqFin

80Diego Gutiérrez

Conclusiones:

top related