21
Home Page Title Page Contents Page 1 of 21 Go Back Full Screen Close Quit An´ alisis de Algoritmos de Ordenamiento y Selecci´ on Profesor: Julio Cesar Lopez [email protected] 21 de octubre de 2003

ordenamiento1.pdf

Embed Size (px)

Citation preview

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 1 of 21

    Go Back

    Full Screen

    Close

    Quit

    Analisis de Algoritmos deOrdenamiento y Seleccion

    Profesor: Julio Cesar [email protected]

    21 de octubre de 2003

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 2 of 21

    Go Back

    Full Screen

    Close

    Quit

    Problema de Ordenamiento

    Entrada:

    Sucesion de n numeros .

    Salida:

    Una permutacion (reordenamiento) de la entrada tal que:

    a1a

    2...a

    n

    Normalmente la sucesion sera representada por un arreglo de n elementos,o por una lista encadenada.

    Si se ordenan numeros o grandes registros es irrelevante el metodoescogido:

    registros

    llave

    datos

    llave

    datos

    esto es lo que se mueve!!

    Analizar el problema solo con numeros es suficientemente general

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 3 of 21

    Go Back

    Full Screen

    Close

    Quit

    Problemas de Ordenamientos

    ? Por insercion (Insertion Sort):

    O(n2) Ordena in place: no requiere sino una cantidad constante deespacio adicional para ordenar.

    ? Por Mezclas (Merge Sort):

    (n lg n) No ordena in place

    ? Heapsort :

    O(n lg n) Ordena in place

    ? Quicksort :

    (n2) Ordena in place Caso promedio : (n lg n)

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 4 of 21

    Go Back

    Full Screen

    Close

    Quit

    Problemas de Ordenamiento (Cont.)

    InsertionSort, HeapSort, MergeSort, QuickSort: Son algorit-mos de ordenamiento basados en comparacion. Se puede demostrarque un algoritmo de ordenamiento basado en comparacion siemprees del orden (n lg n).

    Se puede bajar esa cota? Si!!, pero no ordenando por comparacio-nes!!

    ? Por conteo.

    ? Radix Sort.

    ? BucketSort.

    El problema de Seleccionar el i-esimo elemento:

    ? Ordenar y escoger: (n lg n)

    ? Se puede hacer en O(n).Algoritmo de ordenamiento por comparaciones:

    ? MergeSort O(n lg n).

    ? InsertionSort Ordena in place O(n2).

    ? Se toman las mejores caractersticas de los dos algoritmo de ordena-miento basados en comparacion (MergeSort, InsertionSort), paracrear un nuevo algoritmo llamado HeapSort.

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 5 of 21

    Go Back

    Full Screen

    Close

    Quit

    Montculos (Heaps)

    ? La estructura de datosMontculo es un arreglo de objectos que pue-de ser visto como un arbol binario con raz, cuyos nodos pertenecena un conjunto totalmente ordenado, y tal que cumple las siguientesdos propiedades:

    Propiedad de orden: La raz de cada subarbol es mayor oigual que cualquiera de sus nodos restantes.

    Propiedad de forma: La longitud de toda rama es h o h 1,donde h es la altura del arbol. Ademas, si una rama termina enuna hoja a la derecha de otra hoja, esta ultima de altura h 1,la primera debe ser de altura h 1.

    Graficamente:

    Fig 1: Representacion de un Montculo

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 6 of 21

    Go Back

    Full Screen

    Close

    Quit

    Montculos (Heaps)

    a) b)

    1 2 3 4 5 6 7 8 9 10

    1

    7

    3

    6

    2

    4

    108 9

    5

    42

    16

    14 10

    7 9 3

    1

    8 16 14 10 7 9 3 2 4 18

    Fig 2: a) Arbol Binario b) Arreglo

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 7 of 21

    Go Back

    Full Screen

    Close

    Quit

    Montculos (Heaps)

    Un arreglo A que representa un montculo es un objeto con 2 atri-butos:

    Length [A]: numero de elementos en el arreglo.

    Heap-size[A]: numero de elementos en el montculo almacenados den-tro de A

    Aheapsize[A]

    length [A]

    A[1]

    A[2] A[3]

    A[4]

    A[heapsize[A]]Fig 3: Representacion de un Montculo

    A[1..heap size[A]] es el montculo representado.

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 8 of 21

    Go Back

    Full Screen

    Close

    Quit

    Montculos (Heaps)

    Eficiencia de las operaciones sobre montculos:

    Raz del arbol: A[1].

    Padre (i) return b i2c.

    Izq (i) return A[2i]

    Der (i) return A[2i+ 1]Tanto Padre, Izq y Der pueden ser considerados operaciones basicas,del mismo costo.

    Existen dos tipos de montculos binarios, los valores de los nodossatisfacen la propiedad de montculo.

    max-heap : Para todo nodo 2 i heap-size[A], A[Padre(i)] A[i], entonces la raz es el mayor elemento del montculo (Heapsort).

    min-heap : Para todo nodo 2 i heap-size[A], A[Padre(i)] A[i], entonces la raz es el menor elemento del montculo (Colas deprioridad).

    La altura de un montculo de n elementos es (lg n).

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 9 of 21

    Go Back

    Full Screen

    Close

    Quit

    Montculos (Heaps)

    A continuacion se describen los procedimientos que permiten orde-nar

    in place,

    y en tiempo O(n lg n), un arreglo de n elementos.Procedimientos para implementar una montculo.

    Heapify toma tiempo O(lg n).Build-Heap toma tiempo O(n).HeapSort toma tiempo O(n lg n).Max-Heap-Insert, Heap-Extract-Max, Heap-Increase-Key yHeap-Maximum toman tiempo O(lg n) (Colas de prioridad).

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 10 of 21

    Go Back

    Full Screen

    Close

    Quit

    Propiedad de Montculo (Heap)

    Como mantener la propiedad de orden?

    ? Supongamos que M es de la forma:

    monton monton

    no es necesariamenteun monton, pero tienela propiedad de forma

    Como recuperar la propiedad de orden?

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 11 of 21

    Go Back

    Full Screen

    Close

    Quit

    Heapify

    Heapify es una importante subrutina para manipular montculo.

    {Pre: subarbol de raz Izq(i) y subarbol de raz Der(i) son montcu-los}.{Post: subarbol de raz i es un montculo}.Heapify(A, i)1 izq Izq(i)2 der Der (i)3 if izq heap-size[A] and A[izq] > A[i]4 then pos-max izq5 else pos-max i6 if der heap-size[A] and A[der]>A[pos-max]7 then pos-max der8 if pos-max 6= i9 thenA[i] A[pos-max]10 Heapify(A, pos-max)

    El tiempo de ejecucion de Heapify se puede describir por la ecuacion derecurrencia:

    T (n) T (2n3) + (1)

    donde n es el numero de nodos del arbol.

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 12 of 21

    Go Back

    Full Screen

    Close

    Quit

    Heapify (Cont.)

    Por ejemplo:

    1

    7

    3

    6

    2

    4

    108 9

    5

    16

    10

    9 37

    2 1

    14

    8

    4

    1

    7

    3

    6

    2

    4

    108 9

    5

    16

    4 10

    9 314 7

    2 8 1

    1

    7

    3

    6

    2

    4

    108 9

    5

    16

    10

    9 37

    2 8 1

    14

    4

    Por el metodo maestro

    T (n) T (2n3) + (1) = O(n0 lg n) = O(lg n)

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 13 of 21

    Go Back

    Full Screen

    Close

    Quit

    Construccion de un Montculo

    Como construir un montculo?

    ? Utilizando Heapify:

    Build-Heap (A)1 Heap-size [A] length [A]2 for i b length [A]/2c down to 13 do Heapify (A, i)

    Invariante de Ciclo :Al comienzo de cada iteracion del ciclo for entre las linea 2-3, cada nodoi+ 1, i+ 2, ...,n es la raz del montculo.Ejemplo:

    4 1 3 2 16 9 10 14 8 7 A =

    ! ! !

    ! ! !

    ! ! !

    ! ! !

    ! ! !

    " " " "

    " " " "

    " " " "

    " " " "

    " " " "

    # # #

    # # #

    # # #

    # # #

    $ $ $ $

    $ $ $ $

    $ $ $ $

    $ $ $ $

    $ $ $ $

    % % % %

    % % % %

    % % % %

    % % % %

    % % % %

    & & & &

    & & & &

    & & & &

    & & & &

    & & & &

    ' ' '

    ' ' '

    ' ' '

    ' ' '

    ' ' '

    1

    7

    3

    6

    2

    4

    108 9

    heapify (A,5)

    5

    14 8

    9 102

    1 3

    4

    7

    16 9 10

    4

    31

    7

    16 2

    14 8

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 14 of 21

    Go Back

    Full Screen

    Close

    Quit

    Construccion de Montculo

    ! ! !

    ! ! !

    ! ! !

    ! ! !

    " " " "

    " " " "

    " " " "

    " " " "

    " " " "

    # # #

    # # #

    # # #

    # # #

    # # #

    $ $ $ $

    $ $ $ $

    $ $ $ $

    $ $ $ $

    % % %

    % % %

    % % %

    % % %

    & & &

    & & &

    & & &

    & & &

    ' ' '

    ' ' '

    ' ' '

    ' ' '

    heapify (A,3)heapify (A,4)

    2 8 7

    1614 9 10

    31

    4

    2 8 7

    3

    10

    14

    1

    916

    4

    ! !

    ! !

    ! !

    ! !

    " "

    " "

    " "

    " "

    # #

    # #

    # #

    # #

    $ $

    $ $

    $ $

    $ $

    % %

    % %

    % %

    % %

    & &

    & &

    & &

    & &

    ' '

    ' '

    ' '

    ' '

    heapify (A,1)heapify (A,2)

    2 8 1

    14 7 9 3

    16 10

    4

    2 4 1

    8 7

    14

    9 3

    10

    16

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 15 of 21

    Go Back

    Full Screen

    Close

    Quit

    Construccion de Montculo

    Analisis de Build-Heap:

    SencilloCada llamada a Heapify cuenta O(lg n)Se hacen O(n) llamadosCosto total O(n lg n)Sin embargo es una cota muy amplia.

    Mas exacto: Si el montculo tiene n nodos:

    H = |_ lg n _|

    # nodos altura1 H2 H-122 H-2

    ...2H1 H-(H-1)=1 2H 0

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 16 of 21

    Go Back

    Full Screen

    Close

    Quit

    Construccion de Montculo

    En un montculo de n elementos su altura es blg nc y el numerode nodos en un montculo de altura h es dn/2h+1e.

    Entonces, como Build-Heap hace un llamado a Heapify(A, i), pa-ra (casi) todo i, su complejidad se puede medir mas exactamentecomo:

    blgnch=0

    d n2h+1

    eO(h) = O(nblgnch=0

    h

    2h)

    = O(nn=0

    h

    2h)

    = O(n)

    (Recordar [(

    i=o kxk = |x|

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 17 of 21

    Go Back

    Full Screen

    Close

    Quit

    HeapSort

    El algoritmo HeapSort:

    HeapSort (A)1 Build-Heap (A)2 For i length[A]down to 23 do exchange A[1] A[i]4 heap-size [A] heap-size [A] 15 Heapify (A, 1)

    Invariante de Ciclo :Al comienzo de cada iteracion del ciclo for entre las linea 2-5, el subarregloA[1..i] es un montculo que contiene los i elementos pequenos de A[1..n] yel subarreglo A[i + 1..n] contiene los n i elementos mayores de A[1..n],ordenados.

    Analisis de HeapSort:

    O(n) construir

    +(n 1)O(lg n) Ordenar

    = O(n lg n) HeapSort

    Que resultado da el hacer un analisis mas exacto como el de Build-Heap?

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 18 of 21

    Go Back

    Full Screen

    Close

    Quit

    HeapSort

    Ejemplo:

    10

    8 9 3

    16

    14

    4 12

    7

    42

    7 9 3

    14 10

    8

    16

    1

    A[1] A[10]

    2

    7 9 3

    10

    16

    14

    8

    4

    1 2

    7 9 3

    10

    16

    8

    4

    1

    14

    Heapify(A,1)

    Heapify(A,1)

    A[1] A[9]

    A[1] A[8]

    2

    7 3

    16

    8

    4

    14

    10

    9

    1

    . . . . . . . . . . .

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 19 of 21

    Go Back

    Full Screen

    Close

    Quit

    Colas de Prioridad

    ? HeapSort es un excelente algoritmo, pero quickSort, en la practica,es el escogido. Sin embargo los montculos son muy utiles para im-plementar colas de prioridad.

    ? Una Cola de Prioridad es una estructura de datos con serviciosde insercion y retiro de elementos con base en una prioridad oprelacion asignada a cada elemento mediante una clave (un numeropor ejemplo). Por lo general se retira (se atiende) el elemento parael cual este numero es el maximo (maxima prioridad)

    Las 3 operaciones basicas sobre colas de prioridad son:

    Insert(C,x): Insertar el elemento x en la cola C.

    Maximo(C): devuelve el elemento de C de maxima prioridad.

    Retire-Max(C): retira y devuelve el elemento de maxima priori-dad de C.

    ? Aplicaciones:

    Priorizar trabajos en un computador compartido. Simulador de manejador de eventos Administracion de Agendas !!

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 20 of 21

    Go Back

    Full Screen

    Close

    Quit

    Colas de Prioridad

    El montculo es una estructura de datos para implementar esas ope-raciones:

    Heap-Maximum(A) return A[1]

    Tiempo de ejecucion: (1)

    Heap Extract Max (A)1 if heap-size [A] < 12 then error Monton vacio3 Max A[1]4 A[1] A[heap-size[A]]5 heap-size [A] heap-size[A] 16 Heapify (A, 1)7 return Max

    Tiempo de ejecucion: O(lg n)

  • Home Page

    Title Page

    Contents

    JJ II

    J I

    Page 21 of 21

    Go Back

    Full Screen

    Close

    Quit

    Colas de Prioridad (Cont.)

    Heap Increase Key (A, i, clave)1 if clave < A[i]2 then error La nueva clave es menor que la actual clave3 A[i] clave4 while i > 1 and A[padre(i)] < A[i]5 do exchange A[i] A[padre(i)]6 i padre(i)

    Tiempo de ejecucion : O(lg n)

    Max-Heap Insert (A, clave)1 heap-size [A] heap-size[A] + 12 A[heap-size[A]] 3 Heap Increase Key (A, heap size[A], clave)

    Tiempo de ejecucion : O(lg n)Tiempo total es : O(lg n)