Beruflich Dokumente
Kultur Dokumente
Priority Queues
Un priority queue es una estructura de datos que sirve para manejar un conjunto de elementos, cada uno de los cuales esta asociado por un valor llamado key. La key asociada se puede reconocer como la prioridad del elemento.
Priority Queues
Un priority queue puede ser max-priority queue o min-priority-queue. Un max-priority queue soporta las siguientes operaciones INSERT que inserta un elemento MAXIMUM que devuelve el elemento que tiene la key (prioridad) mas grande EXTRACT-MAX saca y devuelve el elemento con mayor key (prioridad) INCREASE-KEY incrementa el valor del key (prioridad) de un elemento especifico
Priority Queues
Podemos utilizar un heap para implementar un priority queue Para implementar un max-priority queue se utiliza un max-heap Para implementar un min-priority queue se utiliza un min-heap
Operaciones
MAXIMUM
HEAP-MAXIMUM(A) { return A[1] }
HEAP-MAXIMUM
16 1 14 2 10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
Operaciones
EXTRACT-MAX
HEAP-EXTRACT-MAX(A) { if heap-size[A] < 1 { Error, heap underflow return null } else { max = A[1] A[1] = A[heap-size[A]] heap-size[A] = heap-size[A] 1 MAX-HEAPIFY(A,1) return max } }
max = 16
16 1 14 2 10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
heap-size = 10
max = 16
1 1 14 2 10 3
2 HEAP
4
1
16 10
14 10 8 7 9 3 2 4 16
heap-size = 10
max = 16
1 1 14 2 10 3
2 HEAP
4
1
16 10
14 10 8 7 9 3 2 4 16
heap-size = 9
max = 16
14 1 8
2
10 3
1
8
16 10
10 4 7 9 3 2 1 16
HEAP 14
heap-size = 9
Operaciones
INCREASE-KEY
HEAP-INCREASE-KEY(A,i,key){ if key < A[i] { Error nueva key menor que actual key } else { A[i] = key while i > 1 and A[PARENT(i)] < A[i] { A[i] A[PARENT(i)] i = PARENT(i) } } }
i=9 A[9] = 15
16 1 14 2 10 3
10 8 7 9 3 2 4 1
HEAP 16 14 10
i=9 Parent(i) = 4
16 1 14 2 10 3
9 15
10 8 7 9 3 2 15 1
HEAP 16 14 10
i=9 Parent(i) = 4
16 1 14 2 10 3
15 4
10 15 7 9 3 2 8 1
HEAP 16 14 10
i=4 Parent(i) = 2
16 1 14 2 10 3
15 4
10 15 7 9 3 2 8 1
HEAP 16 14 10
i=4 Parent(i) = 2
16 1 15 2 10 3
14 4
10 14 7 9 3 2 8 1
HEAP 16 15 10
i=2 Parent(i) = 1
16 1 15 2 10 3
14 4
10 14 7 9 3 2 8 1
HEAP 16 15 10
16 1 15 2 10 3
14 4
10 14 7 9 3 2 8 1
HEAP 16 15 10
Operaciones
INSERT
MAX-HEAP-INSERT(A,key) { heap-size[A] = heap-size[A] + 1 A[heap-size[A]] = - HEAP-INCREASE-KEY(A,heap-size[A],key) }
16 1 15 2 10 3
14 4
7 5
9 6
1 10 - 11
14 7 9 3 2 8 1 -
HEAP 16 15 10
16 1 15 2 10 3
14 4
7 5
9 6
1 10 20 11
14 7 9 3 2 8 1 20
HEAP 16 15 10
16 1 15 2 10 3
14 4
20 5
9 6
1 10
7 11
14 20 9 3 2 8 1 7
HEAP 16 15 10
16 1 20 2 10 3
14 4
15 5
9 6
1 10
7 11
14 15 9 3 2 8 1 7
HEAP 16 20 10
20 1 16 2 10 3
14 4
15 5
9 6
1 10
7 11
14 15 9 3 2 8 1 7
HEAP 20 16 10
20 1 16 2 10 3
14 4
15 5
9 6
1 10
7 11
14 15 9 3 2 8 1 7
HEAP 20 16 10