Sie sind auf Seite 1von 26

Priority Queues

Ing. Andrea Quan

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

Das könnte Ihnen auch gefallen