Thuật toán trên đồ thị

42
Thuật toán trên đồ thị

description

Thuật toán trên đồ thị. Một số khái niệm. Đồ thị: G = {V, E}, trong đó  V  = n, n>0, và E VV, V – tập đỉnh, E – tập cạnh và E  = m, m 0 . Nếu (a,b) E mà suy ra (b,a) E và (b,a) = (a,b) thì G – vô hướng. Ngược lại, G – có hướng. Nếu e=(a,b) E thì a gọi là liền k ề với b - PowerPoint PPT Presentation

Transcript of Thuật toán trên đồ thị

Page 1: Thuật toán trên đồ thị

Thuật toán trên đồ thị

Page 2: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 2

Một số khái niệm

Đồ thị: G = {V, E},

trong đó V= n, n>0, và E VV,

V – tập đỉnh, E– tập cạnh và E= m, m0.

Nếu (a,b)E mà suy ra (b,a) E và (b,a) = (a,b) thì G – vô hướng.

Ngược lại, G – có hướng.

Nếu e=(a,b)E thì

a gọi là liền kề với b

và e liên thuộc với a và b.

Ký hiệu V= { u1, u2, ..., un}

Page 3: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 3

Một số khái niệm (2)Cho đồ thị: G = {V, E}, Dãy

(uo,uk) = <uo, u1, ..., um>,

với (ui,ui+1) E, i = 0,...,k-1 và

ui V, i = 0,...,k

được gọi là đường đi từ uo tới uk.

Số cạnh có trên (uo,uk) được gọi là độ dài của đường đi (trong định nghĩa trên là m).

Page 4: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 4

Một số khái niệm (3)Đồ thị: G = {V, E},

Cho ánh xạ f: E R+, với eE, f(e) – trọng số cạnh e.

Đồ thị G = {V,E,f} gọi là có trọng số

Xét đường đi

(uo,uk) = <uo, u1, ..., um>,

Đại lượng

((uo,uk)) = f(ui,ui+1)i = 0,...,k-1

được gọi là độ dài đường đi từ uo tới uk.

Page 5: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 5

Một số khái niệm (4)Đồ thị: G = {V, E},

Đường kính của đồ thị là độ dài lớn nhất đường đi giữa các cặp đỉnh.

Đồ thị G gọi là liên thông nếu giữa hai đỉnh bất kỳ có đường đi.

Đường đi

(uo,uk) = <uo, u1, ..., um>

gọi là kín nếu uo=uk.

Page 6: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 6

Một số khái niệm (5)Đồ thị: G = {V, E},

Đường đi

(uo,uk) = <uo, u1, ..., um>

gọi là đơn nếu mỗi cạnh có mặt trên đường đi không quá 1 lần.

Đường đi kín và đơn gọi là chu trình.

Page 7: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 7

Một số khái niệm (6)Đồ thị

G = {V, E}

liên thông, không có chu trình gọi là cây.

Trong cây

T = {V,E}

nếu có một đỉnh đặc biệt được gọi là gốc thì cây được gọi là

có thứ tự.

Page 8: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 8

Duyệt đồ thịĐồ thị G = {V, E} liên thông

Depth-First Search for all xV visited(x):= false;i:=0;DFS(v);output p[1..n];

Procedure DFS (v: đỉnh)a) visited(v):= true;b) i:=i+1; p[i] := v;c) for each w liền kề của v

If (visited(w)= false);DFS(w);

Thời gian tính toán

O(|V|+|E|)

Page 9: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 9

Duyệt đồ thị (2)Đồ thị G = {V, E} liên thông

Breadth-First Search MakeNil(Q);for all xV visited(x):= false;i:=1; visited(v):= true; p[i] := v;enqueue(v,Q);while (QNIL)

a) u:=front(Q);dequeue(Q);b) for each x liền kề của v

If (visited(x)= false);enqueue(x,Q);visited(x):=true;inc(i); p[i]=x;

output p[1..n];

Thời gian tính toán

O(|V|+|E|)

Page 10: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 10

Single-Source Shortest Paths

Cho G={V,E} liên thông, f: ER+ và u, v V.

Ký hiệu (u,v) = {(u,v)}

Tìm *(u,v)

(*(u,v)) = min {((u,v)) : (u,v) (u,v)}

The Implementation of Dijkstra’s Algorithm

Với xV ký hiệu L(x) – độ dài đường đi ngắn nhất *(u,x);

Giá trị khởi tạo L(u) = 0; L(x) = + với xV\{u}

Ký hiệu

tập S: nếu xS thì L(x) = (*(u,x))

V+(x) = {y V : (x,y) E}

V-(x) = {y V : (y,x) E}

Page 11: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 11

Single-Source Shortest Paths(2)The Implementation of Dijkstra’s Algorithm L(u) = 0; for all xV\{u} do L(x) = +

while (S(v) = false)

1) L(a) = min {L(x): xV \ S; S(a)=true;

2) for all x (V\S) V+(a)

if L(a)+ f(a,x)<L(x) then L(x):=L(a)+f(a,x);

k := 0; pk := v;

while (pku)

1) Tìm y V-(pk) sao cho L(y) + f(y,pk) = L(pk)

2) pk+1 = x;

3) k++;

Output p[k..0], L(v);

Running time

O(|V||E|)

Page 12: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 12

Single-Source Shortest Paths(3)

Page 13: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh+ 13

Single-Source Shortest Paths(4)

Chứng minh thuật toán

1. t S, L(t) = (*(u,t)). Khi k = 0 có 1 đỉnh t = u !

2. L(a) = min {L(t): t V\S} L(a) = (*(u,a)) và *(u,a) chỉ chứa các đỉnh (không kể a) thuộc S. Giả thiết đúng khi k=0.

Giả sử Lk(a) > (*(u,a)). Đặt = L(a).

Kí hiệu t là đỉnh ngay trước a trên *(u,a): L(t) + f(t,a)= (*(u,a))

hay Lk(t) < (*(u,a)) < Lk(a)

Nếu tS thì do L(t) + f(t,a)= (*(u,a)) < . Đặt L(a)= L(t)+f(t,a)< . Nghĩa là giảm được L(a). Vô lý!

Nếu t S, theo thuật toán Lk(a) < Lk(t) < = L(a).

Mâu thuẫn.

Nghĩa là (*(u,a)) = Lk(a)

Page 14: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 14

Single-Source Shortest Paths(5)Floyd Shortest-Path

Kí hiệu V={1, 2, ..., n}

for x=1 to n

for y=1 to n

if ((x,y) E) D(x,y) = f(x,y) else D(x,y) = +for k=1 to n

for x=1 to n

for y=1 to n

D(x,y) = min{D(x,y), D(x,k)+D(k,y)}

Xác định đường đi: tương tự Dijsktra

Running time

O(|V|3)

Page 15: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 15

Single-Source Shortest Paths (6)

Cho G={V,E} liên thông, không trọng số (f:E{1}) và u, v V.

Ký hiệu (u,v) = {(u,v)}.

Độ dài đường đi tính bằng số cạnh tham gia.

Tìm *(u,v)

(*(u,v)) = min {((u,v)) : (u,v) (u,v)}

Với xV ký hiệu L(x) – độ dài đường đi ngắn nhất *(u,x);

Giá trị khởi tạo L(u) = 0; L(x) = + với xV\{u}

Ký hiệu

tập Am = { xV: L(x) = m}

V+(x) = {y V : (x,y) E}

V-(x) = {y V : (y,x) E}

Page 16: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 16

Single-Source Shortest Paths(7)The Implementation of Algorithm

m=0; L(u) = m; Am={u};for all xV\{u} do L(x) = + while (L(v) = +)

1) Am+1 ={ };

2) for all x Am

for all y V+(x) if (L(y) = +) then

L(y):= m+1;

Am+1 = Am+1 {y};

pm := v; po := u;for k:= m-1 downto 1

1) Tìm y V-(pk+1) Ak;

2) pk = y;Output p[0..m], L(v)=m;

Running time

O(|V||E|)

Page 17: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 17

Minimum Spanning TreeCho G={V,E}. T={V,E*}, E* E, liên thông, không có chu trình gọi là cây khung của GRemark:

1. Đồ thị vô hướng là cây u,v V, (u,v) là đường đi đơn2. Đồ thị G có cây khung G liên thông

Kí hiệu (G) là tập các cây khung của G.

Bài toán 1. Cho G liên thông. Tìm T (G). Bài toán 2. Cho G có trọng số và T(G). Kí hiệu (T) là tổng trọng

số các cạnh thuộc T. Tìm T*(G) sao cho

(T*) = min {(T) : T(G)}

T* - minimum spanning tree của G.

Page 18: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 18

Minimum Spanning Tree (2)

Bài toán 1. Cho G liên thông. Tìm T (G).

for all x V checked(x) = false;DFS(v);

void DFS(u: đỉnh); checked[u] = true; for each x V(u) if checked(x)=false

{T:= T(u,x); DFS (x);}

void BFS( a: đỉnh); enqueue (a, Q); checked[ a] = true; while ! empty(Q)

u = front(Q); dequeue(Q);for each x V(u) if checked(x) = false

{ T:=T (u, x); enqueue(x Q); checked(x)=true; }

for all x V checked(x) = false;mkenull(Q); BFS(v);

O(|V||E|)

Page 19: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 19

Minimum Spanning Tree (3)Bài toán 2. Cho G có trọng số và T(G). Kí hiệu (T) là tổng trọng

số các cạnh thuộc T. Tìm T*(G) sao cho

(T*) = min {(T) : T(G)}

T* - minimum spanning tree của G.

Thuật toán PRIME1. T:= { e E, f(e) - min};2. While Số cạnh(T) < n-1 do

Chọn e là cạnha) liên thuộc với một đỉnh của T;b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

Thuật toán KRUSKAL1. T:= {};2. While Số cạnh(T) < n-1 do

Chọn e là cạnha);b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

O(m+nlgn)

Page 20: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 20

Minimum Spanning Tree (4)Thuật toán PRIME1. T:= { e E, f(e) - min};2. While Số cạnh(T) < n-1 do

Chọn e là cạnha) liên thuộc với một đỉnh của T;b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

Thuật toán KRUSKAL1. T:= {};2. While Số cạnh(T)<n-1 do

Chọn e là cạnha);b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

Page 21: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 21

Minimum Spanning Tree (5)Thuật toán PRIME1. T:= { e E, f(e) - min};2. While Số cạnh(T) < n-1 do

Chọn e là cạnha) liên thuộc với một đỉnh của T;b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

Xét cấu trúc:V={1, 2, ...,n}E= g(1..m) of record

d, c : tên đỉnh;t : trọng số;

end;Sử dụng S: đánh dấu đỉnh thuộc T

1) sort g(1).t...g(m).t;2) for x=1 to n do S(x)=0;3) k:=1; T(k) := g(1); S(T(k).d) :=1; S(T(k).c) :=1;4) := T(1).t;5) while (k<n-1)

a) j=2; while (S(g(j).d)=S(g(j).c)) j:= j +1; c) k:= k+1; T(k):=g(j); := + T(k).t; S(T(k).d):= 1; S(T(k).c):= 1;

6) output T(1)..T(n-1), ;

Time of Algorithm is O(nm)

Page 22: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 22

Minimum Spanning Tree (6)Thuật toán KRUSKAL1. T:= {};2. While Số cạnh(T) < n-1 do

Chọn e là cạnha);b) T{ e} không có chu trình;c) có trọng số nhỏ nhất.

T := T { e};3. Output T, (T);

Xét cấu trúc:V={1, 2, ...,n}E= g(1..m) of record

d, c : tên đỉnh;t : trọng số;

end;Sử dụng S: đánh dấu cây con

1) sort g(1).t...g(m).t;2) for x=1 to n do S(x)=x; k=0; =0; j=1;3) while (k<n-1)

a)while (S(g(j).d)=S(g(j).c)) j= j+1; c) k:= k+1; T(k):=g(j); = + T(k).t; p=S(T(k).d); h=S(T(k).c); for x:=1 to n do if (S(x)=h) S(x)=p;

4) output T(1)..T(n-1), ;Time of Algorithm is O(nm)

Page 23: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 23

Minimum Spanning Tree (7)Thuật toán PRIM (1)

1. for all i V L(i):=∞;

2. p(v) := null; L(v) := 0;

3. H = V;

4. while (H null)

L(a)=min{ L(x): xH}; H=H\{a};

for all xV(a)H

if L(x) > f(a, x) then

{L(x) = f(a, x); p(x) := a;}

5. output {(x,p(x)), xV, p(x)null;}

Time of Algorithm is O(n2)

= 9+8+7+6+4 = 34

Page 24: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 24

Minimum Spanning Tree (8)Thuật toán PRIM

1. for all i V L(i):=∞;

2. p(v) := null; L(v) := 0;

3. H = V;

4. while (H null)

L(a)=min{ L(x): xH}; H=H\{a};

for all xV(a)H

if L(x) > f(a, x) then

{L(x) = f(a, x); p(x) := a;}

5. output {(x,p(x)), xV, p(x)null;}

(a,b) (c,b) (d,f) (e,d) (f,c)

= 8+9+7+6+4 = 34

V\H H a b c d e f

p b b b c f f d c

a b c d e f 0

b a c f d e 8 9 10

b a c f d e

b a c f d e 9 4

b a c f d e 7 9

b a c f d e 6

b a c f d e

Page 25: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 25

The Network Flow ProblemT = {G,f} - mạng vận tải

G={V,E} có hướng

! a, z : V(a)=, V+(z)= ,

a- cửa vào và z-cửa ra

e: f(e)- khả năng của mạng tại e

Luồng trên mạng T

: E Ro

e E, 0(e)f(e)

v V\{a,z} thoả mãn: )1()()()( )(

vEe vEe

ee

)2()()(,)()()( )(

zEe aEe

eaQezQ

Từ (1) Q(a) = Q(z).

Ký hiệu = Q(a) - giá trị của luồng

Page 26: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 26

The Network Flow Problem (2)

Bài toán:

Cho T = {G,f}

Tìm sao cho đạt giá trị lớn nhất

Page 27: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 27

The Network Flow Problem (3)

Thuật toán:

Ý tưởng:

1. Chọn luồng khởi tạo;

2. Tìm các đường tăng được (dãy các đỉnh từ cửa vào đến cửa ra mà ta có thể thêm hoặc bớt hàm trên mỗi cung của dãy này cùng một giá trị nào đó mà vẫn đảm bảo là luồng đồng thời làm tăng giá trị của luồng). Ví dụ, dãy

{ (x0x1) (x1x4) (x4 x3) (x3z) }

là đường tăng được. Thêm vào các cung trên dãy này một giá trị là 2. Hàm ’ nhận được vẫn là luồng.

3. Lặp lại bước 2 cho đến khi không còn đường tăng được

Page 28: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 28

The Network Flow Problem (4)

Thuật toán:

for each e E do (e) := 0;

:= 0;

repeat

xoá nhãn, dấu

gán nhãn, dấu và tính giá trị tăng được *;

if chưa cực đại

thực hiện tăng luồng ;

:= + *;

until -cực đại;

Page 29: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 29

The Network Flow Problem (5)

Gán nhãn, xác định giá trị tăng được *:

1) Gán chỉ số cho các đỉnh, u0 = a;

2) Gán dấu cho cung e thích hợp:

Nếu e=(uk,x), (e)<f(e) thì M(e)=‘+’, Nếu e=(x,uk), (e)>0 thì M(e)= ‘‘.

2) Nhãn của đỉnh x: L(x)={c(x), (x)}

c(x)=k, chỉ số của uk và giá trị lớn nhất mà luồng có thể tăng được kể từ cửa vào cho đến nút x.

Nếu dấu e = (uk,x) là ‘+’ thì có thể tăng , ngược lại, nếu dấu e=(x,uk) là ‘-‘có thể giảm .

Ví dụ, e=(x1,x4) có thể gán dấu +

L(x4) = {1, 6} nếu xét dãy các đỉnh từ x0, x1, x4.

Page 30: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 30

The Network Flow Problem (6)1) (u0) := +; R := {u0};

2) while (R ) & (L(z)= { })

a) chọn uk R; R := R\{uk};

b) for each x V+(uk) or x V(uk)

if L(x) = { }

if (xV+(uk)) & ((uk,x)<f(uk,x))

c(x) = k;

M(uk, x) = ‘+’;

(x) = min {(uk), f(uk,x) - (uk,x)};

if (x,uk)>0

c(x) = k;

M(x,uk) = ‘’;

(x) = min { (uk), (x,uk) };

if (L(x){ }) R := R {x}

3) if L(z) ={ } MAX() = TRUE

else MAX() = FALSE;

4) * := (z);R={ uo

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=1

=0

=1

=0

=1

=1

=0

=1

=0{ ,}

{ 0 ,7}

+

{ 0,10}+

{ 0,2}

+

R={ u1 , u2 , u3R={u2, u3

{1,6}

R={u4, u2, u3R={u2, u3

{4,1}

*=1

+

+

Page 31: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 31

The Network Flow Problem (7)x := z;

while x u0

j := c(x);

if (M(uj,x)=‘+’) (uj,x) = (uj,x)+*

else (x,uj) = (x,uj)- *;

x = uj;

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=1

=0

=1

=0

=1

=1

=0

=1

=0{ ,}

{ 0 ,7}

+

{ 0,10}+

{ 0,2}

+

{1,6}

{4,1}

*=1+

+

x = z, j = c(x) = 4

(u4,z) = (u4,z) + 1

x = u4 j = c(x) = 1

(u1,u4) = (u1,u4) + 1

x = u1 j = c(x) = 0

(u0,u1)=(u0,u1) + 1

x = u0. STOP.

Page 32: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 32

The Network Flow Problem (8)Định nghĩa

W V\ {z}, a W, W* := V \W.

Nhát cắt: (W,W*) ={ e=(u,v): u W, u W*}

Dung lượng f(W,W*) =f(e), e (W,W*)

Ví dụ:

W = {u0, u1, u2} W*={u3, u4, z}

(W,W*) = {(u0,u3), (u1,u4), (u2,u3)}

f(W,W*) = 3+7+10 = 20

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=1

=0

=1

=0 =1

=1

=0

=1

=0

Định lý max z

bằng giá trị bé nhất của các nhát cắt trong mạng T

Page 33: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 33

The Network Flow Problem (8)Định lý

max z = giá trị bé nhất của các nhát cắt trong mạng T

Chứng minh

Giả sử -luồng cực đại.

Thực hiện thủ tục gán nhãn.

Kí hiệu W ={xV: L(x)}, W* = V\W

Do a W, z W (W,W*) – nhát cắt.Nếu cửa ra z W, L(z) , tăng luồng = +(z). Mâu

thuẫn! Vì - luồng cực đại.

Xét (x,y)(W,W*). Rõ ràng (x,y) = f(x,y) Nếu (x,y)<f(x,y) L(y) , yW, trái với giả thiết y W*

Xét (u,v)E, uW*, vW (u,v) = 0.Nếu (u,v)>0 thì L(u) , uW.

Như vậy, (W,W*)=f(W,W*), (W*,W)=0.

Tự chứng minh: (W,W*)(W*,W) f(W,W*)

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=7

=8

=7

=2 =2

=16

=10

=3

=3

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=7

=8

=7

=2 =2

=16

=10

=3

=3{ ,}

+

{0,1}

{0,2}+

{2,2}

= 18

Page 34: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 34

The Network Flow Problem (8)Định lý

max z = giá trị bé nhất của các nhát cắt trong mạng T

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=7

=8

=7

=2 =2

=16

=10

=3

=3

f =7

f =2

f =15

f =3

f =7

f =10

f =3

f =10

f =8

z

u3

u4

u2

u1

uo

=7

=8

=7

=2 =2

=16

=10

=3

=3{ ,}

+

{0,1}

{0,2}+

{2,2}

= 18

Xét mạng đã gán nhãn với L(z)=.

W = {u0, u1, u2, u4} W*={u3, z}

(W,W*) = {(u0,u3), (u2,u3), (u4,u3), (u4,z)}

f(W,W*) = 3+10+3+2 = 18

(W,W*) = 18

(W*,W) = 0

Page 35: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 35

The Network Flow Problem (8)

Author(s) Y ear ComplexityFord; Fulkerson 1956 Edmonds; Karp 1969 O(E2V )Dinic 1970 O(EV2)Karzanov 1973 O(V3)Cherkassky 1976 O(EV2)Malhotra; et al : 1978 O(V3)Galil 1978 O(V5/3.E2/3)Galil and Naamad 1979 O(EV.log2V )Sleator and Tarjan 1980 O(EV.log V )Goldberg and Tarjan 1985 O(EV.log (V2/E))

Page 36: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 36

Mạng PERT (1)

Bài toán:

Dự án A có n công việc tên là 1, 2, …, n. Việc thứ i, i=1,..,n, có

một số việc tiên quyết, lưu trong danh sách Ci, tức là bắt

buộc phải thực hiện xong các việc trong Ci mới được thực

hiện việc i. Trong điều kiện cho trước, việc i cần thời gian ti

để hoàn thành.

Dự án A được khởi động vào thời điểm t0.

1) Tính thời điểm sớm nhất T có thể hoàn thành dự án A.

2) Trong thời hạn đã được nêu ra ở phần 1) hãy chỉ ra thời điểm bắt đầu sớm nhất, muộn nhất có thể được đối với từng công việc và thời gian dự trữ của từng công việc.

Page 37: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 37

Mạng PERT (2)

Ví dụ P1:TT Tên công việc Việc TQ Thời gian

1 Khảo sát 0 3

2 Đào móng 1 6

3 Tập kết vật liệu 1 4

4 Xây móng, tường 2,3 14

5 Làm mộc 3 20

6 Lắp cửa 4,5 4

7 Đổ trần – mái 3,4 25

8 Trát tường, trần 4,7 5

9 Quét vôi 6,8 3

10 Lắp đặt thiết bị 6,8,9 5

11 Xây hàng rào, cổng 7,8 4

Page 38: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 38

Mạng PERT (3)

Sử dụng mô hình đồ thị có hướng G={V,E}:

Mỗi công việc tương ứng với một đỉnh V ={1, 2,...,n}.

Thêm vào 2 đỉnh đặc biệt là 0 và n+1, ý nghĩa là Khởi công và Kết thúc.

t0 = 0, C0 = . Với i {1,...,n}, Ci= , đặt Ci= {0},

tn+1= 0, Cn+1= { j {1,...,n}: jCk, k=1,2...,n}u Cv (u,v) E

f(u,v) = tu.

Page 39: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 39

Mạng PERT (4)

Thuật toán:

Kí hiệu: xi – thời điểm sớm nhất bắt đầu việc i

yi – thời điểm sớm nhất kết thúc việc i

pi – thời điểm muộn nhất kết thúc việc i

Đặt t0=0. Suy ra: x0=0,

T = xn+1 = yn+1 = pn+1

xj = max { xi + f(i,j) : i Cj }.

pi = min { pj - f(i,j), j mà (i,j) E }.

Page 40: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 40

Mạng PERT (5)xj = max { xi + f(i,j) : i Cj }.

TT Công việc TQ f(i,j) Biểu thức tính (max) Thời điểm x

0 Khởi công 0 0

1 Khảo sát 0 3 0 0

2 Đào móng 1 6 0+3 3

3 Tập kết vật liệu 1 4 0+3 3

4 Xây móng, tường 2,3 14 3+6, 3+4 9

5 Làm mộc 3 20 3+4 7

6 Lắp cửa 4,5 4 9+14, 7+20 27

7 Đổ trần – mái 3,4 25 3+4, 9+14 23

8 Trát tường, trần 4,7 5 9+14, 23+25 48

9 Quét vôi 6,8 3 27+4, 48+5 53

10 Lắp đặt thiết bị 6,8,9 5 27+4, 48+5, 53+3 56

11 Hàng rào, cổng 7,8 4 23+25, 48+5 53

12 Kết thúc 10,11 0 56+5, 53+4 61

Page 41: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 41

Mạng PERT (6)pi = min { pj - f(i,j), j mà (i,j) E }.

TT Công việc TQ f(i) Biểu thức tính (min) Thời điểm p

0 Khởi công 0 0

1 Khảo sát 0 3 9-6, 9-4 3

2 Đào móng 1 6 23-14 9

3 Tập kết vật liệu 1 4 23-14, 49-20 48-25 9

4 Xây móng, tường 2,3 14 53-4, 48-25, 53-5 23

5 Làm mộc 3 20 53-4 49

6 Lắp cửa 4,5 4 56-3, 61-5 53

7 Đổ trần – mái 3,4 25 53-5, 61-4 48

8 Trát tường, trần 4,7 5 56-3, 61-5, 61-4 53

9 Quét vôi 6,8 3 61-5 56

10 Lắp đặt thiết bị 6,8,9 5 61-0 61

11 Hàng rào, cổng 7,8 4 61-0 61

12 Kết thúc 10,11 0 61

Page 42: Thuật toán trên đồ thị

21.04.23 Dao Thanh Tinh 42

Mạng PERT (7)

TT Tên công việc Việc trước

f(i) BĐ sớm nhất (x)

Dự trữ

BĐ muộn nhất

KT muộn nhất (p)

0 Khởi công 0 0

1 Khảo sát 0 3 0 0 0 3

2 Đào móng 1 6 3 0 3 9

3 Tập kết vật liệu 1 4 5 0 5 9

4 Xây móng, tường 2,3 14 9 0 9 23

5 Làm mộc 3 20 29 0 29 49

6 Lắp cửa 4,5 4 49 0 49 53

7 Đổ trần – mái 3,4 25 23 0 23 48

8 Trát tường, trần 4,7 5 48 0 48 53

9 Quét vôi 6,8 3 53 0 53 56

10 Lắp đặt thiết bị 6,8,9 5 56 0 56 61

11 Hàng rào, cổng 7,8 4 57 0 57 61

12 Hoàn thiện 10,11 0 61 0 61 61