Heaps en java

89
Heaps Ing. Andrea Quan

Transcript of Heaps en java

Page 1: Heaps en java

Heaps

Ing. Andrea Quan

Page 2: Heaps en java

Heaps

Un heap (binario) es una estructura de datos implementada con un arreglo, el cual representa un árbol binario completo.

Page 3: Heaps en java

Heaps

Un heap (binario) es una estructura de datos implementada con un arreglo, el cual representa un árbol binario completo.

¿Qué es un arbol binario completo?

Page 4: Heaps en java

Heaps

Un heap (binario) es una estructura de datos implementada con un arreglo, el cual representa un árbol binario completo.

¿Qué es un arbol binario completo? Un árbol binario completo se define como un árbol

binario en el cual todos sus niveles están completos, excepto posiblemente el último nivel, el cual se va llenando de izquierda a derecha conforme van ingresando los nodos.

Page 5: Heaps en java

COMPLETOS NO COMPLETOS

Page 6: Heaps en java

Arbol binario completo à heap

Cada nodo del árbol corresponde a un elemento en el arreglo el cual guarda el valor del nodo. Esta correspondencia es descrita por las siguientes reglas:

– arreglo[1] es la raíz del árbol – Dado un índice en el arreglo i

•  parent (i) = i/2 •  left (i) = 2i •  right (i) = 2i + 1

Page 7: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

Page 8: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 1

Page 9: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 1 2

Page 10: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 1 2 3

Page 11: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 1 2 3 4

Page 12: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 1 2 3 4 5

Page 13: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 1 2 3 4 5 6

Page 14: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 1 2 3 4 5 6 7

Page 15: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 1 2 3 4 5 6 7 8

Page 16: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1 2 3 4 5 6 7 8 9

Page 17: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1 1 2 3 4 5 6 7 8 9 10

Page 18: Heaps en java

Ejemplo

1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1 1 2 3 4 5 6 7 8 9 10

Page 19: Heaps en java

Heaps

•  Existen dos tipos de binary heaps –  max heaps –  min heaps

•  Ambos tipos satisfacen una heap property: –  max heaps satisfacen la max heap property –  min heaps satisfacen la min heap property

Page 20: Heaps en java

heap property •  Max heap property:

Para cada nodo i diferente del padre A[Parent(i)] ≥ A[i]

Page 21: Heaps en java

heap property •  Max heap property:

Para cada nodo i diferente del padre A[Parent(i)] ≥ A[i] à  Root guarda el mayor elemento

Page 22: Heaps en java

heap property •  Max heap property:

Para cada nodo i diferente del padre A[Parent(i)] ≥ A[i] à  Root guarda el mayor elemento

•  Min heap property: Para cada nodo i diferente del padre

A[Parent(i)] ≤ A[i]

Page 23: Heaps en java

heap property •  Max heap property:

Para cada nodo i diferente del padre A[Parent(i)] ≥ A[i] à  Root guarda el mayor elemento

•  Min heap property: Para cada nodo i diferente del padre

A[Parent(i)] ≤ A[i] à Root guarda el menor elemento

Page 24: Heaps en java

Ejemplo Max Heap

1

16

14 10

8 7 9

2 4

3

Page 25: Heaps en java

Ejemplo Min Heap

11

1

2 3

8 7 9

12 14

10

Page 26: Heaps en java

Manteniendo la max-heap-property

•  Algoritmo MAX-HEAPIFY –  Este algoritmo sirve para mantener la max-heap-

property –  Recibe como parámetros al arreglo A, y un índice i en

el arreglo. –  Cuando es llamado este algoritmo se asume que los

subarboles izquierdo y derecho del nodo satisfacen la max-heap-property

Page 27: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else {

largest = i

}

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

Page 28: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1 1 2 3 4 5 6 7 8 9 10

Page 29: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l =

r =

largest =

MAX-HEAPIFY(A,1)

Page 30: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r =

largest =

MAX-HEAPIFY(A,1)

Page 31: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest =

MAX-HEAPIFY(A,1)

Page 32: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest =

MAX-HEAPIFY(A,1)

Page 33: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest = 2

MAX-HEAPIFY(A,1)

Page 34: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest = 2

MAX-HEAPIFY(A,1)

Page 35: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest = 2

MAX-HEAPIFY(A,1)

Page 36: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 1

l = 2

r = 3

largest = 2

MAX-HEAPIFY(A,1)

Page 37: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 2

r = 3

largest = 2

MAX-HEAPIFY(A,2)

Page 38: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 2

MAX-HEAPIFY(A,2)

Page 39: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 2

MAX-HEAPIFY(A,2)

Page 40: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 4

MAX-HEAPIFY(A,2)

Page 41: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 4

MAX-HEAPIFY(A,2)

Page 42: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

4 10

14 7 9

2 8

3

HEAP à 16 4 10 14 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 4

MAX-HEAPIFY(A,2)

Page 43: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 2

l = 4

r = 5

largest = 4

MAX-HEAPIFY(A,2)

Page 44: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 4

r = 5

largest = 4

MAX-HEAPIFY(A,4)

Page 45: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 8

r = 9

largest = 4

MAX-HEAPIFY(A,4)

Page 46: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 8

r = 9

largest = 4

MAX-HEAPIFY(A,4)

Page 47: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 8

r = 9

largest = 4

MAX-HEAPIFY(A,4)

Page 48: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 8

r = 9

largest = 9

MAX-HEAPIFY(A,4)

Page 49: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

4 7 9

2 8

3

HEAP à 16 14 10 4 7 9 3 2 8 1

i = 4

l = 8

r = 9

largest = 9

MAX-HEAPIFY(A,4)

Page 50: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > a[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > a[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 4

l = 8

r = 9

largest = 9

MAX-HEAPIFY(A,4)

Page 51: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 9

l = 8

r = 9

largest = 9

MAX-HEAPIFY(A,9)

Page 52: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 9

l = 18

r = 19

largest = 9

MAX-HEAPIFY(A,9)

Page 53: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 9

l = 18

r = 19

largest = 9

MAX-HEAPIFY(A,9)

Page 54: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 9

l = 18

r = 19

largest = 9

MAX-HEAPIFY(A,9)

Page 55: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

}

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

i = 9

l = 18

r = 19

largest = 9

MAX-HEAPIFY(A,9)

Page 56: Heaps en java

MAX-HEAPIFY(A,i) {

l = LEFT(i)

r = RIGHT(i)

if l ≤ heapsize[A] and A[l] > A[i] {

largest = l

} else { largest = i }

if r ≤ heapsize[A] and A[r] > A[largest] {

largest = r

}

if largest ≠ i {

A[i] A[largest]

MAX-HEAPIFY(A,largest)

}

} FIN

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

MAX-HEAPIFY(A,9)

Page 57: Heaps en java

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

Page 58: Heaps en java

Arbol binario completo à max heap

•  Podemos utilizar el algoritmo MAX-HEAPIFY aplicandolo en forma button-up para convertir un arbol binario completo, representado por un arreglo, en un max heap.

•  Utilizamos el algoritmo BUILD-MAX-HEAP

Page 59: Heaps en java

BUILD-MAX-HEAP(A) {

heap-size[A] = length[A]

for i = length[A]/2 downto 1 {

MAX-HEAPIFY(A,i)

}

}

Page 60: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

2 16 9

14 8

10

HEAP à 4 1 3 2 16 9 10 14 8 7

10/2 = 5

1 2 3 4 5 6 7 8 9 10

Page 61: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

2 16 9

14 8

10

HEAP à 4 1 3 2 16 9 10 14 8 7

MAX-HEAPIFY(A,5)

1 2 3 4 5 6 7 8 9 10

Page 62: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

2 16 9

14 8

10

HEAP à 4 1 3 2 16 9 10 14 8 7

MAX-HEAPIFY(A,4)

1 2 3 4 5 6 7 8 9 10

Page 63: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

14 16 9

2 8

10

HEAP à 4 1 3 14 16 9 10 2 8 7

MAX-HEAPIFY(A,4)

1 2 3 4 5 6 7 8 9 10

Page 64: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

14 16 9

2 8

10

HEAP à 4 1 3 14 16 9 10 2 8 7

MAX-HEAPIFY(A,3)

1 2 3 4 5 6 7 8 9 10

Page 65: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 10

14 16 9

2 8

3

HEAP à 4 1 10 14 16 9 3 2 8 7

MAX-HEAPIFY(A,3)

1 2 3 4 5 6 7 8 9 10

Page 66: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 10

14 16 9

2 8

3

HEAP à 4 1 10 14 16 9 3 2 8 7

MAX-HEAPIFY(A,2)

1 2 3 4 5 6 7 8 9 10

Page 67: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

MAX-HEAPIFY(A,2)

1 2 3 4 5 6 7 8 9 10

Page 68: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 1

4

16 10

14 7 9

2 8

3

HEAP à 4 16 10 14 7 9 3 2 8 1

MAX-HEAPIFY(A,1)

1 2 3 4 5 6 7 8 9 10

Page 69: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1 1 2 3 4 5 6 7 8 9 10

Page 70: Heaps en java

Heapsort

•  El algoritmo de heapsort sirve para ordenar un árbol (arreglo)

•  El algoritmo utiliza BUILD-MAX-HEAP para ordenar el árbol (arreglo) ascendentemente.

•  Si queremos ordenar descendentemente tendríamos que usar MIN-HEAPIFY y BUILD-MIN-HEAP

Page 71: Heaps en java

HEAPSORT(A) {

BUILD-MAX-HEAP(A)

for i = length[A] downto 2 {

A[1] A[i]

heap-size[A] = heap-size[A] – 1

MAX-HEAPIFY(A,1)

}

}

Page 72: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

2 16 9

14 8

10

HEAP à 4 1 3 2 16 9 10 14 8 7 1 2 3 4 5 6 7 8 9 10

Page 73: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 7

4

1 3

2 16 9

14 8

10

HEAP à 4 1 3 2 16 9 10 14 8 7

BUILD-MAX-HEAP(A)

1 2 3 4 5 6 7 8 9 10

Page 74: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 1

16

14 10

8 7 9

2 4

3

HEAP à 16 14 10 8 7 9 3 2 4 1

BUILD-MAX-HEAP(A)

heapsize

1 2 3 4 5 6 7 8 9 10

Page 75: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

14 10

8 7 9

2 4

3

HEAP à 1 14 10 8 7 9 3 2 4 16

A[1] A[10]

1 2 3 4 5 6 7 8 9 10

Page 76: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

14 10

8 7 9

2 4

3

HEAP à 1 14 10 8 7 9 3 2 4 16

Heapsize[A] - 1

1 2 3 4 5 6 7 8 9 10

heapsize

Page 77: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

14

8 10

4 7 9

2 1

3

HEAP à 14 8 10 4 7 9 3 2 1 16

MAX-HEAPiFY(A,1)

1 2 3 4 5 6 7 8 9 10

Page 78: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

8 10

4 7 9

2 14

3

HEAP à 1 8 10 4 7 9 3 2 14 16

A[1] A[9]

Page 79: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

8 10

4 7 9

2 14

3

HEAP à 1 8 10 4 7 9 3 2 14 16

Heapsize[A] - 1

heapsize

Page 80: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

10

8 9

4 7 1

2 14

3

HEAP à 10 8 9 4 7 1 3 2 14 16

MAX-HEAPiFY(A,1)

Page 81: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

9

8 3

4 7 1

10 14

2

HEAP à 9 8 3 4 7 1 2 10 14 16

Page 82: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

8

7 3

4 2 1

10 14

9

HEAP à 8 7 3 4 2 1 9 10 14 16

Page 83: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

7

4 3

1 2 8

10 14

9

HEAP à 7 4 3 1 2 8 9 10 14 16

Page 84: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

4

2 3

1 7 8

10 14

9

HEAP à 4 2 3 1 7 8 9 10 14 16

Page 85: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

3

2 1

4 7 8

10 14

9

HEAP à 3 2 1 4 7 8 9 10 14 16

Page 86: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

2

1 3

4 7 8

10 14

9

HEAP à 2 1 3 4 7 8 9 10 14 16

Page 87: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

2 3

4 7 8

10 14

9

HEAP à 1 2 3 4 7 8 9 10 14 16

Page 88: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

2 3

4 7 8

10 14

9

HEAP à 1 2 3 4 7 8 9 10 14 16

Page 89: Heaps en java

Ejemplo

2

1

4 6 5

3

7

8 9 10 16

1

2 3

4 7 8

10 14

9

HEAP à 1 2 3 4 7 8 9 10 14 16