3 - ordenacion

84
Algorítmica y Complejidad Tema 3 – Ordenación. Departamento Informática Aplicada

Upload: irene-sanchez-martin

Post on 23-Nov-2015

48 views

Category:

Documents


3 download

TRANSCRIPT

  • Algortmica y Complejidad

    Tema 3 Ordenacin.

    Departamento Informtica Aplicada

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    2

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    3

  • Introduccin.

    4 Ordenacin.

    Dado un conjunto de elementos

    a1, a2, a3, an sobre los que se puede establecer una relacin de orden, se dice que la permutacin

    ak1, ak2, ak3, ... akn est ordenada si se verifica

    f(ak1) f(ak2) f(ak3) ... f(akn)

  • Introduccin.

    5 Ordenacin.

    Los elementos a ordenar pueden ser complejos:

    Type Alumno is Record DNI : Natural; Matricula : string (1..6); Nombre : string (1..20); Apellidos : string (1..40); End record;

    Llamaremos clave al campo utilizado en la ordenacin.

  • Introduccin.

    6 Ordenacin.

    Ordenacin Sobre la misma estructura a ordenar (in situ). Sobre estructuras adicionales.

    Ordenacin Interna. Sobre memoria principal. Externa. Sobre memoria secundaria.

    Nos centraremos en la ordenacin interna de vectores de nmeros enteros.

  • Introduccin.

    7 Ordenacin.

    Algoritmo natural:

    Es ms rpido si la estructura est ordenada con anterioridad.

    (Ya sea de forma total o parcial)

    Algoritmo estable:

    Mantiene el orden relativo de los elementos con la misma clave.

    (til si los elementos han sido ordenados previamente por otra clave)

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    8

  • Algoritmo de insercin.

    9 Ordenacin.

    Secuencia original. h 1

    c 2

    e 3

    v 4

    s n-1

    p n

    Insertar en el lugar adecuado de la zona ordenada. h

    1 c 2

    e 3

    v 4

    s n-1

    p n

    Repetir el proceso para el resto de los elementos. c

    1 h 2

    e 3

    v 4

    s n-1

    p n

    h 1

    c 2

    e 3

    v 4

    s n-1

    p n Elementos ordenados.

    Elementos desordenados.

    Mtodo

  • Algoritmo de insercin.

    10 Ordenacin.

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (1)

    2 1

    8 2

    5 3

    9 4

    0 5

    4 6

    (2)

    2 1

    5 2

    8 3

    9 4

    0 5

    4 6

    (3)

    2 1

    5 2

    8 3

    9 4

    0 5

    4 6

    (4)

    0 1

    2 2

    5 3

    8 4

    9 5

    4 6

    (5)

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (6)

    Ejemplo

  • Algoritmo de insercin.

    11 Ordenacin.

    for i in A'First+1..A'Last loop end loop;

    for i in A'First+1..A'Last loop valor := A(i); j := i - 1;

    end loop;

    Implementacin

    for i in A'First+1..A'Last loop valor := A(i); j := i - 1; while (j>=AFirst) and then (A(j)>valor) loop A (j+1) := A (j); j := j - 1; end loop;

    end loop;

    for i in A'First+1..A'Last loop valor := A(i); j := i - 1; while (j>=AFirst) and then (A(j)>valor) loop A (j+1) := A (j); j := j - 1; end loop; A(j+1) := valor;

    end loop;

    for i in A'First+1..A'Last loop valor := A(i); j := i - 1; while (j>=AFirst) and then (A(j)>valor) loop A (j+1) := A (j); j := j - 1; end loop; A(j+1) := valor;

    end loop;

    O ( n2 )

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    12

  • Algoritmo de seleccin.

    13 Ordenacin.

    Secuencia original. h 1

    e 2

    c 3

    v 4

    s n-1

    p n

    Lo intercambia con el menor. c 1

    e 2

    h 3

    v 4

    s n-1

    p n

    Repetir el proceso para el resto de los elementos. c

    1 e 2

    h 3

    v 4

    s n-1

    p n

    h 1

    e 2

    c 3

    v 4

    s n-1

    p n

    Busca el menor entre l y el resto.

    Mtodo

  • 14 Ordenacin.

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (1)

    0 1

    2 2

    5 3

    9 4

    8 5

    4 6

    (2)

    0 1

    2 2

    5 3

    9 4

    8 5

    4 6

    (3)

    0 1

    2 2

    4 3

    9 4

    8 5

    5 6

    (4)

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (5)

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (6)

    Algoritmo de seleccin. Ejemplo

  • Algoritmo de seleccin.

    15 Ordenacin.

    for i in A'First..A'Last-1 loop end loop;

    for i in A'First..A'Last-1 loop valor_min := A (i); indice_min := i;

    end loop;

    for i in A'First..A'Last-1 loop valor_min := A (i); indice_min := i; for j in i+1..A'Last loop

    end loop; end loop;

    for i in A'First..A'Last-1 loop valor_min := A (i); indice_min := i; for j in i+1..A'Last loop if A (j) < valor_min then valor_min := A (j); indice_min := j; end if; end loop;

    end loop;

    for i in A'First..A'Last-1 loop valor_min := A (i); indice_min := i; for j in i+1..A'Last loop if A (j) < valor_min then valor_min := A (j); indice_min := j; end if; end loop; A (indice_min) := A (i); A (i) := valor_min;

    end loop;

    for i in A'First..A'Last-1 loop valor_min := A (i); indice_min := i; for j in i+1..A'Last loop if A (j) < valor_min then valor_min := A (j); indice_min := j; end if; end loop; A (indice_min) := A (i); A (i) := valor_min;

    end loop; O ( n2 )

    Implementacin

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    16

  • Algoritmo de la burbuja.

    17 Ordenacin.

    Secuencia original. h 1

    c 2

    e 3

    v 4

    s n-1

    p n

    El menor ya est colocado. Repetir el proceso para el resto. c

    1 h 2

    e 3

    v 4

    p n-1

    s n

    h 1

    c 2

    e 3

    v 4

    s n-1

    p n

    Se van comparando los elementos contiguos y si estn desordenados se intercambian.

    h 1

    c 2

    e 3

    v 4

    p n-1

    s n

    h 1

    c 2

    e 3

    v 4

    p n-1

    s n

    h 1

    c 2

    e 3

    v 4

    p n-1

    s n

    Mtodo

  • Algoritmo de la burbuja.

    18 Ordenacin.

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (1)

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (2)

    8 1

    2 2

    5 3

    0 4

    9 5

    4 6

    (3)

    8 1

    2 2

    0 3

    5 4

    9 5

    4 6

    (4)

    8 1

    0 2

    2 3

    5 4

    9 5

    4 6

    (5)

    0 1

    8 2

    2 3

    5 4

    9 5

    4 6

    (6)

    Ejemplo

  • Algoritmo de la burbuja.

    19 Ordenacin.

    0 1

    8 2

    2 3

    5 4

    9 5

    4 6

    0 1

    8 2

    2 3

    5 4

    9 5

    4 6

    (7)

    0 1

    8 2

    2 3

    5 4

    4 5

    9 6

    (8)

    0 1

    8 2

    2 3

    4 4

    5 5

    9 6

    (9)

    0 1

    8 2

    2 3

    4 4

    5 5

    9 6

    (10)

    0 1

    2 2

    8 3

    4 4

    5 5

    9 6

    (11)

    Ejemplo

  • Algoritmo de la burbuja.

    20 Ordenacin.

    0 1

    2 2

    8 3

    4 4

    5 5

    9 6

    0 1

    2 2

    8 3

    4 4

    5 5

    9 6

    (12)

    0 1

    2 2

    8 3

    4 4

    5 5

    9 6

    (13)

    0 1

    2 2

    8 3

    4 4

    5 5

    9 6

    (14)

    0 1

    2 2

    4 3

    8 4

    5 5

    9 6

    (15)

    Ejemplo

  • Algoritmo de la burbuja.

    21 Ordenacin.

    0 1

    2 2

    4 3

    8 4

    5 5

    9 6

    0 1

    2 2

    4 3

    8 4

    5 5

    9 6

    (16)

    0 1

    2 2

    4 3

    8 4

    5 5

    9 6

    (17)

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (18)

    Ejemplo

  • Algoritmo de la burbuja.

    22 Ordenacin.

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (19)

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    (20)

    Ejemplo

  • Algoritmo de la burbuja.

    23 Ordenacin.

    for i in A'First+1..A'Last loop end loop;

    for i in A'First+1..A'Last loop for j in reverse i..A'Last loop

    end loop; end loop;

    for i in A'First+1..A'Last loop for j in reverse i..A'Last loop if A(j-1) > A(j) then

    end if; end loop;

    end loop;

    for i in A'First+1..A'Last loop for j in reverse i..A'Last loop if A(j-1) > A(j) then v := A(j); A(j) := A(j-1); A(j-1) := v; end if; end loop;

    end loop;

    for i in A'First+1..A'Last loop for j in reverse i..A'Last loop if A(j-1) > A(j) then v := A(j); A(j) := A(j-1); A(j-1) := v; end if; end loop;

    end loop;

    Se puede mejorar haciendo que termine si no se produce ningn intercambio.

    Implementacin

  • Algoritmo de la burbuja.

    24 Ordenacin.

    for i in A'First+1..A'Last loop cambio := False; for j in reverse i..A'Last loop if A(j-1) > A(j) then v := A(j); A(j) := A(j-1); A(j-1) := v; cambio := True; end if; end loop; exit when not cambio;

    end loop; O ( n2 )

    Implementacin

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    25

  • Algoritmo heapsort.

    26 Ordenacin.

    Un montculo se puede representar como un rbol binario completo.

    a

    b c

    e d f

    Debe tener todos sus niveles completos excepto el ltimo que puede no estarlo.

    Los niveles se rellenan de izquierda a derecha.

  • Algoritmo heapsort.

    27 Ordenacin.

    Se pueden representar sobre un array.

    a 1

    b 2

    c 3

    d 4

    e 5

    f 6

    Ejemplo:

    Si i = 2 a 1

    b 2

    c 3

    d 4

    e 5

    f 6

    Hijo izq. 2x2 = 4

    Hijo der. 2x2+1 = 5

    Padre 2/2 = 1

    nodo i Padre i / 2

    Hijo izq. 2 i

    Hijo der. 2 i + 1

    a

    b c

    e d f

  • Algoritmo heapsort.

    28 Ordenacin.

    Montculo

    Min-heap

    Padre hijo.

    La raz contiene el mnimo.

    Suele utilizarse para colas de prioridad. Max_heap

    Padre hijo

    La raz contiene el mximo.

    Es el que usaremos para heapsort.

  • Algoritmo heapsort.

    29 Ordenacin.

    c 1

    e 2

    v 3

    s n-1

    p n

    v

    s p

    e c

    Construccin del montculo. (Respetando las reglas)

    v 1

    s 2

    p 3

    e n-1

    c n

    Equivalente

    Mtodo

  • Algoritmo heapsort.

    30 Ordenacin.

    v

    s p

    e c

    v 1

    s 2

    p 3

    e n-1

    c n

    Equivalente

    Mtodo

  • Algoritmo heapsort.

    31 Ordenacin.

    c

    s p

    e

    Descolocado

    v

    c 1

    s 2

    p 3

    e n-1

    v n

    Equivalente

    Mtodo

  • Algoritmo heapsort.

    32 Ordenacin.

    Se repite el proceso hasta que todo el array est ordenado.

    (El montculo se vaca)

    s

    e p

    c

    s 1

    e 2

    p 3

    c n-1

    v n

    Equivalente

    Mtodo

  • Algoritmo heapsort.

    33 Ordenacin.

    Ejemplo

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    9

    8 5

    0 2 4

    Construccin del montculo.

    9 1

    8 2

    5 3

    2 4

    0 5

    4 6

  • Algoritmo heapsort.

    34 Ordenacin.

    Ejemplo

    4 1

    8 2

    5 3

    2 4

    0 5

    9 6

    Equivalente

    9

    8 5

    0 2

    4

    8 5

    0 2

    8 1

    4 2

    5 3

    2 4

    0 5

    9 6

    Equivalente

    4

    9

    4

    8

    4

  • Algoritmo heapsort.

    35 Ordenacin.

    Ejemplo 9

    8

    4 5

    0 2

    0 1

    4 2

    5 3

    2 4

    8 5

    9 6

    Equivalente

    0

    4 5

    2

    5 1

    4 2

    0 3

    2 4

    8 5

    9 6

    Equivalente

    8

    0

    0

    5

  • Algoritmo heapsort.

    36 Ordenacin.

    Ejemplo 8 9

    5

    4 0

    2

    2 1

    4 2

    0 3

    5 4

    8 5

    9 6

    Equivalente

    2

    4 0 4 1

    2 2

    0 3

    5 4

    8 5

    9 6

    Equivalente

    5

    4

    2

    2

  • Algoritmo heapsort.

    37 Ordenacin.

    Ejemplo 5 8 9

    4

    2 0 0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    Equivalente

    0

    2 2 1

    0 2

    4 3

    5 4

    8 5

    9 6

    Equivalente

    4

    0

    2

    0

  • Algoritmo heapsort.

    38 Ordenacin.

    Ejemplo 4 5 8 9

    2

    0 0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    Equivalente

    2

    0

  • Algoritmo heapsort.

    39 Ordenacin.

    Ejemplo 2 4 5 8 9

    0

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    Equivalente

    0

  • Algoritmo heapsort.

    40 Ordenacin.

    construir_monticulo; limite := A'Last; construir_monticulo; for i in reverse A'First+1 .. A'Last loop end loop;

    limite := A'Last; construir_monticulo; for i in reverse A'First+1 .. A'Last loop

    v := A(A'First); A(A'First) := A(i); A(i) := v;

    end loop;

    limite := A'Last; construir_monticulo; for i in reverse A'First+1 .. A'Last loop

    v := A(A'First); A(A'First) := A(i); A(i) := v; limite := limite - 1;

    end loop;

    limite := A'Last; construir_monticulo; for i in reverse A'First+1 .. A'Last loop

    v := A(A'First); A(A'First) := A(i); A(i) := v; limite := limite - 1; colocar ((A'First));

    end loop;

    Implementacin

  • Algoritmo heapsort.

    41 Ordenacin.

    procedure construir_monticulo is begin end construir_monticulo;

    procedure construir_monticulo is begin

    for i in reverse A'Range loop colocar (i); end loop;

    end construir_monticulo;

    Implementacin

  • Algoritmo heapsort.

    42 Ordenacin.

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin end colocar;

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin hijo_izq := 2 * i; hijo_der := 2 * i + 1;

    end colocar;

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin hijo_izq := 2 * i; hijo_der := 2 * i + 1; if (hijo_izq A(i)) then mayor := hijo_izq; else mayor := i; end if;

    end colocar;

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin hijo_izq := 2 * i; hijo_der := 2 * i + 1; if (hijo_izq A(i)) then mayor := hijo_izq; else mayor := i; end if; if (hijo_der A(mayor)) then mayor := hijo_der; end if;

    end colocar;

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin hijo_izq := 2 * i; hijo_der := 2 * i + 1; if (hijo_izq A(i)) then mayor := hijo_izq; else mayor := i; end if; if (hijo_der A(mayor)) then mayor := hijo_der; end if; if mayor /= i then v := A(i); A(i) := A(mayor); A(mayor) := v; colocar (mayor); end if;

    end colocar;

    procedure colocar (i : integer) is hijo_izq, hijo_der, mayor : integer;

    begin hijo_izq := 2 * i; hijo_der := 2 * i + 1; if (hijo_izq A(i)) then mayor := hijo_izq; else mayor := i; end if; if (hijo_der A(mayor)) then mayor := hijo_der; end if; if mayor /= i then v := A(i); A(i) := A(mayor); A(mayor) := v; colocar (mayor); end if;

    end colocar; O ( n log ( n ) )

    Implementacin

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    43

  • Ordenacin.

    Secuencia original. c 1

    v 2

    e 3

    h 4

    f n-1

    p n

    Algoritmo quicksort.

    c 1

    v 2

    e 3

    h 4

    f n-1

    p n

    Seleccin de un pivote.

    44

    c 1

    v 2

    f n-1

    p n

    e 3

    h 4 Si se encuentra una pareja,

    se intercambian.

    Contina el proceso hasta que se cruzan los ndices. c

    1 f 2

    e 3

    h 4

    v n-1

    p n

    c 1

    v 2

    e 3

    h 4

    f n-1

    p n

    A(i) > pivote? A(j) < pivote?

    Buscar elementos fuera de orden respecto al pivote.

    Mtodo

  • Ordenacin.

    Algoritmo quicksort.

    45

    Tras el proceso anterior, el array tiene este aspecto:

    Se repite el proceso para cada uno de los segmentos y se contina hasta que todo el array haya sido ordenado.

    Elementos menores que el pivote y

    desordenados entre si.

    Elementos mayores que el pivote y

    desordenados entre si.

    j i

    Mtodo

  • 46 Ordenacin.

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    Algoritmo quicksort.

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (2)

    i j

    4 1

    2 2

    5 3

    9 4

    0 5

    8 6

    (4)

    i j

    1 2 2

    5 3

    9 4

    0 5 6

    (3)

    i j 4 8 4

    1 2 2

    0 3 4

    5 5

    8 6

    (6)

    i j

    9

    4 1

    2 2 3

    9 4 5

    8 6

    (5)

    i j 0 5

    8 1

    2 2

    5 3

    9 4

    0 5

    4 6

    (1)

    Pivote

    Ejemplo

  • 47 Ordenacin.

    Algoritmo quicksort.

    4 5 5

    8 6

    9 4 1

    2 2

    0 3

    (7)

    Pivote

    i j 4 1

    2 2

    0 3

    (8) 4

    5 5

    8 6

    9

    1 2 2 3

    (9) 4 0 i j

    4 5 5

    8 6

    9

    1 2 2 3

    (10) 4 0 i j

    4 5 5

    8 6

    9

    i j 0 1 2

    4 3

    (11) 2 4

    5 5

    8 6

    9

    4 5 5

    8 6

    9 0 1

    2 2

    4 3

    (12)

    Pivote

    4 5 5

    8 6

    9 0 1

    2 2

    4 3

    (13)

    i j

    4 5 5

    8 6

    9 0 1

    2 2

    4 3

    (14)

    i j

    4 5 6 0 1

    2 2

    4 3

    (15)

    i j 9 5 8

    Ejemplo

  • 48 Ordenacin.

    Algoritmo quicksort.

    Pivote

    4 5 6 0 1

    2 2

    4 3

    (16) 9 5 8

    i j

    4 5 6 0 1

    2 2

    4 3

    (17) 9 5 8

    i j 9 8

    4 5 6 0 1

    2 2

    4 3

    (18) 5

    0 1

    2 2

    4 3

    5 4

    8 5

    9 6

    Ejemplo

  • Algoritmo quicksort.

    49 Ordenacin.

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin end QuickSort;

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der;

    end QuickSort;

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der; loop

    exit when i > j; end loop;

    end QuickSort;+

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der; loop while A(i) < pivote loop i := i + 1; end loop; while A(j) > pivote loop j := j - 1; end loop;

    exit when i > j; end loop;

    end QuickSort;

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der; loop while A(i) < pivote loop i := i + 1; end loop; while A(j) > pivote loop j := j - 1; end loop; if i j; end loop;

    end QuickSort;

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der; loop while A(i) < pivote loop i := i + 1; end loop; while A(j) > pivote loop j := j - 1; end loop; if i j; end loop; if izq < j then QuickSort (izq, j); end if; if der > i then QuickSort (i, der); end if;

    end QuickSort;

    procedure QuickSort (izq, der : integer) is i, j : integer;

    Begin pivote := seleccionar_pivote; i := izq; j := der; loop while A(i) < pivote loop i := i + 1; end loop; while A(j) > pivote loop j := j - 1; end loop; if i j; end loop; if izq < j then QuickSort (izq, j); end if; if der > i then QuickSort (i, der); end if;

    end QuickSort;

    O ( n log ( n ) )

    Implementacin

  • Ordenacin.

    Algoritmo quicksort.

    50

    Criterios de eleccin del pivote:

    El algoritmo ser ms eficiente cuando produzca particiones equilibradas.

    El algoritmo funcionar correctamente con independencia del pivote elegido.

    Pero la eleccin puede influir en el tiempo de ejecucin.

  • Ordenacin.

    Algoritmo quicksort.

    51

    Criterios de eleccin del pivote:

    Criterio 1: Elegir el primer elemento.

    Funciona bien si la disposicin del vector es aleatoria, pero es muy habitual que la lista ya est algo ordenada.

    En esos casos es la peor opcin!

  • Ordenacin.

    Algoritmo quicksort.

    52

    Criterios de eleccin del pivote:

    Criterio 2: Elegir un elemento de forma aleatoria.

    Muy buena opcin. El problema es cmo generar la aleatoriedad y

    cmo hacerlo de forma rpida.

    Criterio 3: Elegir la mediana.

    Magnfica opcin. El problema es que consumira mucho tiempo.

  • Ordenacin.

    Algoritmo quicksort.

    53

    Criterios de eleccin del pivote:

    Criterio 4: Elegir la mediana de entre unos pocos elementos.

    Da muy buenos resultados hallando la mediana entre el primer elemento, el ltimo y el central.

    function seleccionar_pivote return integer is v, centro : integer;

    Begin centro := (izq + der) / 2; if A(izq) > A(centro) then v := A(izq); A(izq) := A(centro); A(centro) := v; end if; if A(izq) > A(der) then v := A(izq); A(izq) := A(der); A(der) := v; end if; if A(centro) > A(der) then v := A(centro); A(centro) := A(der); A(der) := v; end if; return A(centro);

    end seleccionar_pivote;

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    54

  • Algoritmo countingsort.

    55 Ordenacin.

    Mtodo

    Es til cuando los elementos de la entrada son discretos y estn dentro de un intervalo de tamao razonable.

    1. Se crea un array de contadores C tal que C(i) contenga el nmero de apariciones de i.

    2. Se modifica el array anterior para que C(i) contenga el nmero de elementos menores o iguales a i.

    3. Se utiliza este array para situar cada elemento en su lugar adecuado. La salida se realiza sobre un nuevo array.

  • Algoritmo countingsort.

    56 Ordenacin.

    Ejemplo Etapa 1

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    0 1

    0 2

    0 3

    0 4

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    0 1

    1 2

    0 3

    1 4

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    0 1

    1 2

    0 3

    2 4

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    0 1

    1 2

    0 3

    3 4

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    1 0

    0 1

    1 2

    0 3

    3 4

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    1 0

    0 1

    2 2

    0 3

    3 4

    1

  • Algoritmo countingsort.

    57 Ordenacin.

    Ejemplo

    1 0

    0 1

    2 2

    0 3

    3 4

    1 0 1 2 3 4 +

    1 0

    0 1

    2 2

    0 3

    3 4

    1 0

    1 1 2 3 4 +

    1 0

    0 1

    2 2

    0 3

    3 4

    1 0

    1 1

    3 2 3 4 +

    1 0

    0 1

    2 2

    0 3

    3 4

    1 0

    1 1

    3 2

    3 3 4 +

    1 0

    0 1

    2 2

    0 3

    3 4

    1 0

    1 1

    3 2

    3 3

    6 4 +

    Etapa 2

  • Algoritmo countingsort.

    58 Ordenacin.

    Ejemplo

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    1 0

    1 1

    3 2

    3 3

    6 4

    1 2 3 4 5 6

    3 1 = 2

    Etapa 3

    (1)

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    1 0

    1 1

    2 2

    3 3

    6 4

    1 2 2 3 4 5 6

    (2)

    2 0

    1 1 = 0

  • Algoritmo countingsort.

    59 Ordenacin.

    Ejemplo

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    1 1

    2 2

    3 3

    6 4

    0 1 2

    2 3 4 5 6

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    1 1

    2 2

    3 3

    5 4

    0 1 2

    2 3 4 5

    4 6

    6 1 = 5 5 1 = 4

    Etapa 3

    (3) (4)

    4 4

  • 4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    1 1

    1 2

    3 3

    4 4

    0 1

    2 2

    2 3 4

    4 5

    4 6

    (6)

    Algoritmo countingsort.

    60 Ordenacin.

    Ejemplo

    4 1

    2 2

    4 3

    4 4

    0 5

    2 6

    0 0

    1 1

    2 2

    3 3

    4 4

    0 1 2

    2 3 4

    4 5

    4 6

    2 1 = 1 4 1 = 3

    Etapa 3

    (5)

    2 4

  • 61 Ordenacin.

    Implementacin Algoritmo countingsort.

    ---------------- Etapa 1 --------------- for i in C'Range loop

    C(i) := 0; end loop;

    ---------------- Etapa 1 --------------- for i in C'Range loop

    C(i) := 0; end loop; for i in A'Range loop

    C(A(i)) := C(A(i)) + 1; end loop;

    ---------------- Etapa 1 --------------- for i in C'Range loop

    C(i) := 0; end loop; for i in A'Range loop

    C(A(i)) := C(A(i)) + 1; end loop; ---------------- Etapa 2 --------------- for i in C'First+1..C'Last loop

    C(i) := C(i) + C(i-1); end loop;

    ---------------- Etapa 1 --------------- for i in C'Range loop

    C(i) := 0; end loop; for i in A'Range loop

    C(A(i)) := C(A(i)) + 1; end loop; ---------------- Etapa 2 --------------- for i in C'First+1..C'Last loop

    C(i) := C(i) + C(i-1); end loop; ---------------- Etapa 3 --------------- for i in reverse A'Range loop

    B(C(A(i))) := A(i); C(A(i)) := C(A(i)) - 1;

    end loop; O ( n )

    ---------------- Etapa 1 --------------- for i in C'Range loop

    C(i) := 0; end loop; for i in A'Range loop

    C(A(i)) := C(A(i)) + 1; end loop; ---------------- Etapa 2 --------------- for i in C'First+1..C'Last loop

    C(i) := C(i) + C(i-1); end loop; ---------------- Etapa 3 --------------- for i in reverse A'Range loop

    B(C(A(i))) := A(i); C(A(i)) := C(A(i)) - 1;

    end loop;

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    62

  • Algoritmo radixsort.

    63 Ordenacin.

    Puede utilizarse cuando las claves se componen de secuencias de elementos que admiten un orden.

    (nmeros, letras, fechas, ...) Bsicamente, en el computador todo se representa con nmeros. No se necesita realizar comparaciones entre las claves.

  • 64 Ordenacin.

    28 1

    23 2

    51 3

    79 4

    10 5

    43 6

    0 3 51 42 6 7 8 9

    35 7

    16 8

    41 9

    83 10

    17 11

    54 12

    83 13

    07 14

    34 15

    Algoritmo radixsort. Ejemplo

  • 65 Ordenacin.

    28 1

    23 2

    51 3

    79 4

    10 5

    43 6

    0 3 51 42 6 7 8 9

    35 7

    16 8

    41 9

    83 10

    17 11

    54 12

    83 13

    07 14

    34 15

    Algoritmo radixsort. Ejemplo

  • 66 Ordenacin.

    28

    1

    23

    2

    51

    3

    79

    4

    10

    5

    43

    6

    0 3 51 42 6 7 8 9

    35

    7

    16

    8

    41

    9

    83

    10

    17

    11

    54

    12

    83

    13

    07

    14

    34

    15

    Algoritmo radixsort. Ejemplo

  • 67 Ordenacin.

    1 2 3 4 5 6

    0 3 51 42 6 7 8 9

    7 8 9 10 11 12 13 14 15 23 43 83 83 54 34 35 16 17 07 28 79 10 51 41

    Algoritmo radixsort. Ejemplo

  • 68 Ordenacin.

    1 2 3 4 5 6

    0 3 51 42 6 7 8 9

    7 8 9 10 11 12 13 14 15 23 43 83 83 54 34 35 16 17 07 28 79 10 51 41

    Algoritmo radixsort. Ejemplo

  • 69 Ordenacin.

    1 2 3 4 5 6

    0 3 51 42 6 7 8 9

    7 8 9 10 11 12 13 14 15

    28

    23 51 79 10

    43 35 16

    41 83

    17

    34

    83

    07

    54

    Algoritmo radixsort. Ejemplo

  • 70 Ordenacin.

    1 2 3 4 5 6

    0 3 51 42 6 7 8 9

    7 8 9 10 11 12 13 14 15 17 23 28 34 35 41 43 51 54 79 83 83 07 10 16

    Algoritmo radixsort. Ejemplo

  • 71 Ordenacin.

    for pos in 1..Num_Digitos loop end loop;

    for pos in 1..Num_Digitos loop for i in A'Range loop Distribuir (A(i), pos); end loop;

    end loop;

    for pos in 1..Num_Digitos loop for i in A'Range loop Distribuir (A(i), pos); end loop; for i in A'Range loop Recargar (A(i)); end loop;

    end loop;

    Algoritmo radixsort.

    for pos in 1..Num_Digitos loop for i in A'Range loop Distribuir (A(i), pos); end loop; for i in A'Range loop Recargar (A(i)); end loop;

    end loop;

    O ( n )

    Implementacin

  • 72 Ordenacin.

    Dos modalidades:

    Radix LSD

    El tratamiento de las claves se realiza de derecha a izquierda.

    til con claves numricas.

    Radix MSD

    El tratamiento de las claves se realiza

    de izquierda a derecha.

    til con claves alfabticas.

    Algoritmo radixsort.

  • Ordenacin.

    1. Introduccin. 2. Algoritmo de insercin. 3. Algoritmo de seleccin. 4. Algoritmo de la burbuja. 5. Algoritmo heapsort. 6. Algoritmo quicksort. 7. Algoritmo countingsort. 8. Algoritmo radixsort. 9. Algoritmo bucketsort.

    73

  • Algoritmo bucketsort.

    74 Ordenacin.

    Mtodo Adecuado cuando los elementos de la entrada se distribuyen de forma aleatoria y uniforme sobre un determinado intervalo.

    Existe una variante recursiva en la que la ordenacin dentro de cada cubeta se hace tambin con bucketsort.

    1. Para n elementos a ordenar se crean n cubetas. En cada una se almacenan aquellos que cumplen una determinada condicin (excluyente) de orden.

    2. Se distribuyen los elementos entre las cubetas.

    3. En cada cubeta se ordenan mediante insercin.

    4. Se sacan de las cubetas de forma ordenada.

  • Algoritmo bucketsort.

    75 Ordenacin.

    Ejemplo

    0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99

    28 1

    23 2

    51 3

    79 4

    10 5

    43 6

    35 7

    16 8

    41 9

    83 10

  • Algoritmo bucketsort.

    76 Ordenacin.

    Ejemplo

    0-9

    10 16

    10-19

    28 23

    20-29

    35

    30-39

    43 41

    40-49

    51

    50-59 60-69

    79

    70-79

    83

    80-89 90-99

    1 2 3 4 5 6 7 8 9 10

  • Algoritmo bucketsort.

    77 Ordenacin.

    Ejemplo

    0-9

    10 16

    10-19

    28 23

    20-29

    35

    30-39

    43 41

    40-49

    51

    50-59 60-69

    79

    70-79

    83

    80-89 90-99

    1 2 3 4 5 6 7 8 9 10

    Ordenar mediante insercin

  • Algoritmo bucketsort.

    78 Ordenacin.

    Ejemplo

    0-9

    10 16

    10-19 20-29 30-39

    35 23 28

    41 43

    40-49

    51

    50-59 60-69

    79

    70-79

    83

    80-89 90-99

    1 2 3 4 5 6 7 8 9 10

  • Algoritmo bucketsort.

    79 Ordenacin.

    Ejemplo

    0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99

    10 1

    16 2

    23 3

    28 4

    35 5

    41 6

    43 7

    51 8

    79 9

    83 10

  • 80 Ordenacin.

    Implementacin Algoritmo bucketsort.

    A : array (1..max) of integer := (.........); type puntero is acces celda; type celda is

    record N : integer; P : puntero; end record;

    cubeta : array (0..max-1) of puntero := (others => null);

  • 81 Ordenacin.

    Implementacin Algoritmo bucketsort.

    for i in A'Range loop distribuir (A(i));

    end loop;

    for i in A'Range loop distribuir (A(i));

    end loop; for i in cubeta'Range loop

    ordenar_cubeta (i); end loop;

    for i in A'Range loop distribuir (A(i));

    end loop; for i in cubeta'Range loop

    ordenar_cubeta (i); end loop; concatenar_cubetas;

  • 82 Ordenacin.

    Implementacin Algoritmo bucketsort.

    procedure distribuir (num : integer) is n : integer;

    begin end distribuir;

    procedure distribuir (num : integer) is n : integer;

    begin n := num / 10; c := cubeta(n); cubeta(n) := new celda'(num, c);

    end distribuir;

  • 83 Ordenacin.

    Implementacin Algoritmo bucketsort.

    procedure concatenar_cubetas is i : integer;

    begin end concatenar_cubetas;

    procedure concatenar_cubetas is i : integer;

    begin

    for j in reverse cubeta'Range loop

    end loop; end concatenar_cubetas;

    procedure concatenar_cubetas is i : integer;

    begin

    for j in reverse cubeta'Range loop c := cubeta(j); while c /= null loop

    end loop; end loop;

    end concatenar_cubetas;

    procedure concatenar_cubetas is i : integer;

    begin i := A'Last; for j in reverse cubeta'Range loop c := cubeta(j); while c /= null loop A(i) := c.N; c := c.P; i := i - 1; end loop; end loop;

    end concatenar_cubetas;

  • 84 Ordenacin.

    Implementacin Algoritmo bucketsort.

    for i in A'Range loop distribuir (A(i));

    end loop; for i in cubeta'Range loop

    ordenar_cubeta (i); end loop; concatenar_cubetas;

    O ( n )

    O ( n )

    O ( n2 ) Algoritmo de insercin

    O ( n2 ) ? O ( n )

    La aleatoriedad uniforme de los elementos a ordenar hace que el nmero de elementos esperados en cada cubeta sea 1 (o muy pequeo). As, la complejidad de la ordenacin deja de ser significativa.