Академический Документы
Профессиональный Документы
Культура Документы
Heaps
Un heap (binario) es una estructura de datos implementada con un arreglo, el cual representa un rbol binario completo.
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?
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 estn completos, excepto posiblemente el ltimo nivel, el cual se va llenando de izquierda a derecha conforme van ingresando los nodos.
COMPLETOS
NO COMPLETOS
Ejemplo
16 14 8 2 4 1 7 9 10 3
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16
1
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14
1 2
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
3
7
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
4
9
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
Ejemplo
16 14 8 2 4 1 7 9 10 3
HEAP
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
Heaps
Existen dos tipos de binary heaps
max heaps min heaps
heap property
Max heap property: Para cada nodo i diferente del padre A[Parent(i)] A[i]
heap property
Max heap property: Para cada nodo i diferente del padre A[Parent(i)] A[i] Root guarda el mayor elemento
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]
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
Manteniendo la max-heap-property
Algoritmo MAX-HEAPIFY Este algoritmo sirve para mantener la max-heapproperty Recibe como parmetros 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
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) }
Ejemplo
4 16 14 2
HEAP 4 2 1
10 7 9
8
4
1
1
16 10
2 3
10
14 7
4 5
9
6
3
7
2
8
8
9
1
10
MAX-HEAPIFY(A,1)
i=1 l= r= largest =
4 1
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
16 2
10 3
14 4
2 HEAP
8
4
1
16 10
10 14 7 9 3 2 8 1
MAX-HEAPIFY(A,1)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
10 3
14 4
8
4
1
10
10 14 7 9 3 2 8 1
HEAP 16
MAX-HEAPIFY(A,2)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 4 7 9 3 2 8 1
HEAP 16 14 10
MAX-HEAPIFY(A,4)
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
i=9 l = 18 r = 19 largest = 9
16 1
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
i=9 l = 18 r = 19 largest = 9
16 1
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
i=9 l = 18 r = 19 largest = 9
16 1
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
i=9 l = 18 r = 19 largest = 9
16 1
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) } }
14 2
10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
MAX-HEAPIFY(A,9)
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
16 1 14 2 10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
16 1 14 2 10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
Ejemplo
4 1 2 14
HEAP 4 2 1
10/2 = 5
3 16 9
10
8
4
1
7
1
2
10
3
3
2
4
16 9
5 6
10 14 8
7 8 9
7
10
Ejemplo
4 1 2 14
HEAP 4 2 1
MAX-HEAPIFY(A,5)
3 16 9
10
8
4
1
7
1
2
10
3
3
2
4
16 9
5 6
10 14 8
7 8 9
7
10
Ejemplo
4 1 2 14
HEAP 4 2 1
MAX-HEAPIFY(A,4)
3 16 9
10
8
4
1
7
1
2
10
3
3
2
4
16 9
5 6
10 14 8
7 8 9
7
10
Ejemplo
4 1 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,4)
3 16 9
10
8
4
1
7
1
2
10
3
3
14 16 9
4 5 6
10 2
7 8
8
9
7
10
Ejemplo
4 1 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,3)
3 16 9
10
8
4
1
7
1
2
10
3
3
14 16 9
4 5 6
10 2
7 8
8
9
7
10
Ejemplo
4 1 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,3)
10 16 9
8
4
1
7
1
2
10
10
3
14 16 9
4 5 6
3
7
2
8
8
9
7
10
Ejemplo
4 1 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,2)
10 16 9
8
4
1
7
1
2
10
10
3
14 16 9
4 5 6
3
7
2
8
8
9
7
10
Ejemplo
4 16 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,2)
10 7 9
8
4
1
1
16 10
2 3
10
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Ejemplo
4 16 14 2
HEAP 4 2 1
MAX-HEAPIFY(A,1)
10 7 9
8
4
1
1
16 10
2 3
10
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Ejemplo
16 14 8 2
HEAP 4 2 1
10 7 9
10
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
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 tendramos que usar MIN-HEAPIFY y BUILDMIN-HEAP
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) } }
Ejemplo
4 1 2 14
HEAP 4 2 1
3 16 9
10
8
4
1
7
1
2
10
3
3
2
4
16 9
5 6
10 14 8
7 8 9
7
10
Ejemplo
4 1 2 14
HEAP 4 2 1
BUILD-MAX-HEAP(A)
3 16 9
10
8
4
1
7
1
2
10
3
3
2
4
16 9
5 6
10 14 8
7 8 9
7
10
Ejemplo
16 14 8 2
HEAP 4 2 1
BUILD-MAX-HEAP(A)
10 7 9
10
16 14 10
1 2 3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
heapsize
Ejemplo
1 14 8 2
HEAP 4 2 1
A[1] A[10]
10 7 9
4
1
1
16
14 10
2 3
10
8
4
7
5
9
6
3
7
2
8
4
9
16
10
Ejemplo
1 14 8 2
HEAP 4 2 1
Heapsize[A] - 1
10 7 9
4
1
1
16
14 10
2 3
10
8
4
7
5
9
6
3
7
2
8
4
9
16
10
heapsize
Ejemplo
14 8 4 2
HEAP 4 2 1
MAX-HEAPiFY(A,1)
10 7 9
1
14
1
16
8
2
10
10
3
4
4
7
5
9
6
3
7
2
8
1
9
16
10
Ejemplo
1 8 4 2
HEAP 4 2 1
A[1] A[9]
10 7 9
14
1 8
16
10
10
14 16
Ejemplo
1 8 4 2
HEAP 4 2 1
Heapsize[A] - 1
10 7 9
14
1 8
16
10
10
14 16
heapsize
Ejemplo
10 8 4 2
HEAP 4 2 1
MAX-HEAPiFY(A,1)
9 7 1
14 16
10 8 9
10
14 16
Ejemplo
9 8 4 10
HEAP 4 2 1
3 7 1
14 16
9 8 3
10
10 14 16
Ejemplo
8 7 4 10
HEAP 4 2 1
3 2 1
14 16
8 7 3
10
10 14 16
Ejemplo
7 4 1 10
HEAP 4 2 1
3 2 8
14 16
7 4 3
10
10 14 16
Ejemplo
4 2 1 10
HEAP 4 2 1
3 7 8
14 16
4 2 3
10
10 14 16
Ejemplo
3 2 4 10
HEAP 4 2 1
1 7 8
14 16
3 2 1
10
10 14 16
Ejemplo
2 1 4 10
HEAP 4 2 1
3 7 8
14 16
2 1 3
10
10 14 16
Ejemplo
1 2 4 10
HEAP 4 2 1
3 7 8
14 16
1 2 3
10
10 14 16
Ejemplo
1 2 4 10
HEAP 4 2 1
3 7 8
14 16
1 2 3
10
10 14 16
Ejemplo
1 2 4 10
HEAP 4 2 1
3 7 8
14 16
1 2 3
10
10 14 16