You are on page 1of 23

Algorytm Coffmana-Grahama

(Minimalizacja długości harmonogramu)

Definicja problemu: (P2 | pi = 1, prec | Cmax)

Autor: Przemysław Sempruch1


Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Kroki algorytmu (1)

1. Numeruj zadania przypisując im etykiety L od 1 do n

2. Szereguj zadania listowo, przy czym kolejność na liście odpowiada


malejącym etykietom zadań

2
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Kroki algorytmu (2)
1. Numeruj zadania przypisując im etykiety L od 1 do n
2. Szereguj zadania listowo, przy czym kolejność na liście odpowiada malejącym etykietom zadań

Początkowo zadania nie mają przyporządkowanych list następników


oraz etykiet L.

for i :=1 to n do begin

A := zbiór zadań bez etykiet L, których wszystkie bezpośrednie


następniki już mają etykiety ;

foreach Z in A do begin

przypisz do s_list(Z) malejący ciąg etykiet L jego bezpośrednich


następników;
end;

wybierz Z in A o leksykograficznie najmniejszym s_list(Z) ;


Oznaczenia:
L(Z) :=i ;
Z – zadanie
end; A – zbiór zadań
s_list(Z) – ciąg etykiet następników zadania Z

3
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Kroki algorytmu (3)
1. Numeruj zadania przypisując im etykiety L od 1 do n
2. Szereguj zadania listowo, przy czym kolejność na liście odpowiada malejącym etykietom zadań

Szeregowanie listowe:

1. Ustal kolejność zadań na liście (ustalona w p. 1)

1. Za każdym razem, gdy zwalnia się jakaś maszyna/maszyny, wybieraj


pierwsze (według „listy”) wolne (w tym momencie) zadania i przypisuj je do
zwalniających się procesorów.

Zadanie Zi jest wolne od chwili, w której ukończony został


jej ostatni poprzednik Zj (Zj Zi). Zadanie niezależne jest zawsze wolne!

4

Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład

z9
z4

z15
z1 z10

z5

z16
z11

z2
n = 19
z6 z17
z12

z7 z13 z18
z3

z19
z8 z14

5
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)

z9 Iteracje: 1, 2, 3
z4
1 Zadania z15, z17, z19 nie mają następników.
Ich lista s_list() będzie więc pusta.
z15
z1 z10 () Pozostaje w kolejnych krokach przyporządkować
kolejnemu zadaniu numer bieżącej iteracji.
z5

z16
z11

2
z2 z17
z6
z12 ()

z7 z13 z18
z3

3
z19
z8 z14 ()

6
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
4
z9 Iteracja: 4
z4
(1)
1 A = { z9, z10, z12, z16, z18 }
z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
leksykograficznego.
z16
z11 (2) Zadanie z9, ma najmniejszą listę.
Etykietujemy je liczbą 4.
2
z2 z17
z6
z12 ()
(2,1)

z7 z13 z18
z3
(2)

3
z19
z8 z14 ()

7
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
4
z9 Iteracja: 5
z4
(1)
(4) 1 A = { z4, z10, z12, z16, z18 }
z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
leksykograficznego.
z16
z11 (2) Zadania z16 i z18 mają najmniejszą listę.
Wybieramy dowolne spośród nich - z18 .
2 Etykietujemy je liczbą 5.
z2 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
z19
z8 z14 ()

8
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
4
z9 Iteracja: 6
z4
(1)
(4) 1 A = { z4, z10, z12, z14, z16 }
z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
z16
z11 (2) Zadanie z16 ma najmniejszą listę.
Etykietujemy je liczbą 6.
2
z2 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
z19
z8 z14 ()
(5,3)

9
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
4
z9 Iteracja: 7
z4
(1)
(4) 1 A = { z4, z10, z11, z12, z14 }
z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
z16
z11 (2) Zadania z10 i z12 mają najmniejszą listę.
Wybieramy dowolne spośród nich - z12 .
(6,3,1)
2 Etykietujemy je liczbą 7.
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
z19
z8 z14 ()
(5,3)

10
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
4
z9 Iteracja: 8
z4
(1)
(4) 1 A = { z4, z10, z11, z14 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
z16
z11 (2) Zadanie z10 ma najmniejszą listę.
Etykietujemy je liczbą 8.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
z19
z8 z14 ()
(5,3)

11
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 9
z4
(1)
(4) 1 A = { z4, z5, z11, z14 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) z16
z11 (2) Zadanie z4 ma najmniejszą listę.
Etykietujemy je liczbą 9.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
z19
z8 z14 ()
(5,3)

12
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 10
z4
(1)
(4) 1 A = { z5, z11, z14 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) z16
z11 (2) Zadanie z14 ma najmniejszą listę.
Etykietujemy je liczbą 10.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(2)

3
10
z19
z8 z14 ()
(5,3)

13
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 11
z4
(1)
(4) 1 A = { z5, z11, z13 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z11 ma najmniejszą listę.
Etykietujemy je liczbą 11.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(10,6,5) (2)

3
10
z19
z8 z14 ()
(5,3)

14
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 12
z4
(1)
(4) 1 A = { z5, z7, z13 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z5 ma najmniejszą listę.
Etykietujemy je liczbą 12.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

5
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)

3
10
z19
z8 z14 ()
(5,3)

15
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 13
z4
(1)
(4) 1 A = { z7, z13 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z13 ma najmniejszą listę.
Etykietujemy je liczbą 13.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(2,1)

13 5
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)

3
10
z19
z8 z14 ()
(5,3)

16
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 14
z4
(1)
(4) 1 A = { z6, z7, z8 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z7 ma najmniejszą listę.
Etykietujemy je liczbą 14.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(13,12,7) (2,1)

14 5
13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)

3
10
z19
z8 z14 ()
(5,3)
(13,7)

17
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 15
z4
(1)
(4) 1 A = { z1, z6, z8 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(14,12,9) (2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z8 ma najmniejszą listę.
Etykietujemy je liczbą 15.
(6,3,1)
2
z2 7 z17
z6
z12 ()
(13,12,7) (2,1)

14 5
13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)

3
15 10
z19
z8 z14 ()
(5,3)
(13,7)

18
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 16
z4
(1)
(4) 1 A = { z1, z3, z6 }
8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(14,12,9) (2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z6 ma najmniejszą listę.
Etykietujemy je liczbą 16.
(6,3,1)
16 2
z2 7 z17
z6
z12 ()
(13,12,7) (2,1)

14 5
13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)
(15,14,9)
3
15 10
z19
z8 z14 ()
(5,3)
(13,7)

19
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 17
z4
(1)
(4) 1 A = { z1,z3 }
17 8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(14,12,9) (2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z1 ma najmniejszą listę.
Etykietujemy je liczbą 17.
(6,3,1)
16 2
z2 7 z17
z6
z12 ()
(13,12,7) (2,1)

14 5
13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)
(15,14,9)
3
15 10
z19
z8 z14 ()
(5,3)
(13,7)

20
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 18
z4
(1)
(4) 1 A = { z3 }
17 8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(14,12,9) (2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z3 ma najmniejszą listę.
Etykietujemy je liczbą 18.
(6,3,1)
16 2
z2 7 z17
z6
z12 ()
(13,12,7) (2,1)

14 5
18 13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)
(15,14,9)
3
15 10
z19
z8 z14 ()
(5,3)
(13,7)

21
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 1)
9 4
z9 Iteracja: 19
z4
(1)
(4) 1 A = { z2 }
17 8 z15
Wyznaczamy listy s_list() dla każdego zadania
z1 z10 () ze zbioru A.
12
(14,12,9) (2,1)
z5 Wybieramy listę najmniejszą w sensie porządku
6
leksykograficznego.
(8,7,4) 11 z16
z11 (2) Zadanie z2 ma najmniejszą listę.
Etykietujemy je liczbą 19.
19 (6,3,1)
16 2
z2 7 z17
z6
(18,12) z12 ()
(13,12,7) (2,1)

14 5
18 13
z7 z13 z18
z3
(11,10,4) (10,6,5) (2)
(15,14,9)
3
15 10
z19
z8 z14 ()
(5,3)
(13,7)

22
Algorytm Coffmana-Grahama
(Minimalizacja długości harmonogramu) Przykład (faza 2)
9 4
z9
z4 Wyznaczamy porządek zadań zgodnie
1 z malejącymi etykietami:
17
8 z15
z1 12
z10 z2, z3, z1, z6, z8, z7, z13, z5, z11, z14,
z5
z4, z10, z12, z16, z18, z9, z19, z17, z15
6
11 Z16
z11

19
2
16
z2 7 z17
z6
z12

14
13 5
18
z7 z13 z18
z3 Uzyskany harmonogram:

3
15 10
z19 z1 z6 z7 z5 z14 z10 z16 z9 z17
z14 M2
z8
M1 z2 z3 z8 z13 z11 z4 z12 z18 z19 z15

10
Cmax = 10

23

You might also like