1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chương 4: Độ phức tạp của các giải thuật đồ thị pps

76 287 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 76
Dung lượng 1,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Duy t theo chi u sâu tr c – gi i thu t quyprocedure begin n the ready stack; while the ready stack is not empty do get a vertex from the stack, process it, and add any neighbor vertex th

Trang 1

ph c t p c a các gi i thu t th

Trang 2

N i dung

1 Các gi i thu t th c n b n

Trang 4

I H

Trang 5

m t nút khác trong th M t th mà không liên thông

thì bao g m nhi u thành ph n liên thông

l p l i

Trang 6

Thu t ng (tt

tiên và nh cu i cùng trùng nhau t l i i t m t nh

quay v chính nó)

M t th không có chu trình c g i là cây (tree) M t

nhóm các cây không liên thông c g i là r ng ( forest )

Trang 7

Thu t ng (tt

các th v i ch m t s ít c nh m t i c g i là th dày

undirected graphs Trong các th có tr ng s weighted

graphs , nh ng giá tr s (tr ng s ) c g n vào m i c nh

di n t thí d kho ng cách hay chi phí

Trong th có h ng (directed graphs) các c nh l m t

chi u : m t c nh i t x sang y ch không ph i i t y sang x.Các th có h ng, có tr ng s còn c g i là các m ng

(networks)

Trang 8

Cách bi u di n th

Ta ph i ánh x các tên nh thành nh ng s nguyên trong

t m tr gi a 1 và V

Gi s có t n t i hai hàm:

- hàm index: chuy n i t tên nh thành s nguyên

- hàm name: chuy n i s nguyên thành tên nh

Có hai cách bi u di n th :

- dùng ma tr n k c n

- dùng t p danh sách k c n

Trang 11

for x: = 1 to V do /*initialize the matrix */

for y: = 1 to V do a[x, y]: = false;

for x: = 1 to V do a[x, y]: = true;

Trang 12

Cách bi u di n b ng t p danh sách k c n

Trong cách bi u di n này, m i nh mà n i t i m t

nh c k t thành m t danh sách k c n

(adjacency list ) cho nh ó.

program adjlist (input, output);

const maxV = 100;

type link = ↑node

node = record v: integer; next: link end;

var j, x, y, V, E: integer;

t, x: link;

adj: array[1 maxV] of link;

Trang 13

new(t); t↑.v: = x; t↑.next: = adj[y];

adj[y]: = t; /* insert x to the first element of

y’s adjacency list */new(t); t↑.v = y; t↑.next: = adj[x];

adj[x]:= t; /* insert y to the first element of

x’s adjacency list */end;

end

Trang 15

Các ph ng pháp duy t th

t hay tìm ki m trên th : vi ng m i nh/nút trong th m t cách có h th ng.

Có hai cách chính duy t th :

- duy t theo chi u sâu tr c (depth irst search )

- duy t theo chi u r ng tr c (breadt irst search).

Trang 16

Duy t theo chi u sâu tr c – gi i thu t quy

procedure

begin

n the ready stack;

while the ready stack is not empty do

get a vertex from the stack, process it,

and add any neighbor vertex that has not been processed

for each vertex, say n, in the graph do

if the status of n is “not yet visited” then visit(n)

Trang 17

val: array[1 maxV] of integer;

procedure visit (k: integer);

Trang 18

0;

for k: = 1 to V do val[k]: = 0; /initialize

the status of all vetices */

for k: = 1 to V do

if val[k] = 0 then visit(k)

end;

Ghi chú: M ng val[ V] ch a tr ng thái c a các nh

val[k] = 0 n u nh k ch a h c vi ng ( not yet visited ),

val[k]: = j ngh a là nh jth mà c vi ng trong quá trìnhduy t là nh k

Trang 19

G E

A

G E

C

A

G E

C

A

G E

C B

F A

G E

C B

F Hình 4.2 Duy t theo chi u sâu tr c

Trang 20

Nh v y k t qu c a gi i thu t duy t FS trên th cho

hình 4.1a v i t p danh sách k c n cho hình 4.1c là

A F E G D C G

L u ý: th t c a các nh trong các danh sách k c n có nh

h ng n th t duy t c a các nh khi áp d ng DFS

Trang 21

ph c t p c a duy t theo chi u sâu tr c

Tính ch t 1.1 uy t theo chi u sâu tr c m t

th bi u di n b ng các danh sách k c n òi h i th i gian t l V E.

Ch ng minh: Chúng ta ph i gán tr cho m i ph n

t c a m ng val (do ó t l v i O(V)), và xét m i

nút trong các danh sách k t c n bi u di n th (do

ó t l v i O(E)).

Trang 22

t theo chi u sâu tr c bi u di n b ng ma

Trang 24

Duy t theo chi u sâu tr c – không quy

procedure list-dfs;

var id, k: integer; val: array[1 max V] of integer;

procedure visit(k: integer);

var t: link;

begin

push(k);

repeat

k: = pop; id:= id + 1; val[k]: = id; /* change the status of k to “visited” */

t =: adj[k]; /* find the neighbors of the vertex k */.

while t <> z do begin

if val[t↑.v] = 0 then begin

push(t↑.v); val[t↑.v]: = -1 /* change the status of t↑.v to “ready” */ end

else if val[t↑.v] = -1 then shift t↑.v to the top of the stack;

t: = t↑.next end

until stackempty

Trang 25

begin

0; stackinit;

for k: = 1 to V do val[k]: = 0; /* initialize the

status of all vertices */

Trang 26

B C G F

B C A

E

Hình 4.3a DFS d a vào stack G

Trang 28

Duy t theo chi u r ng tr c

Khi duy t th n u ta dùng m t queue thay vì m t stack, ta s

i n m t gi i thu t duy t theo chi u r ng tr c search).

(breadth-first-procedure

procedure (

begin

n o the ready queue;

while the ready queue is not empty do

get a vertex from the queue, process it, and add any neighbor

vertex that has not been processed to the queue and

change their status to ready.

end;

begin

Initialize status;

for each vertex, say n, in the graph

if the status of n is “not yet visited” then visit(n)

Trang 29

procedure

var id, k: integer; val: array[1 max V] of integer;

procedure visit(k: integer);

var t: link;

begin

put(k); /* put a vertex to the queue */

repeat

k: = get; /* get a vertex from the queue */

id: = id + 1; val[k]: = id; /* change the status of k to “visited” */

t: = adj[k]; /* find the neighbors of the vertex k */

Trang 30

0; queue-initialze;

for k: = 1 to V do val[k]: = 0; /initialize the

status of all vertices */

for k: = 1 to V do

if val[k] = 0 then visit(k)

end;

t theo chi u sâu tr c và duy t theo chi u r ng tr c

ch khác nhau ch gi i thu t u dùng stack và gi i thu tsau dùng hàng i Do ó, ph c t p tính toán c a DFS vàBFS là nh nhau

Trang 32

2 th c tr ng s

Chúng ta mu n mô hình hóa nh ng bài toán th c t s d ng

nh ng tr ng s weights hay chi phí (costs) c g n vào

Bài toán th nh t là bài toán cây bao trùm t i thi u; bài toán

th hai là bài toán tìm ng i ng n nh t

Trang 33

Cây bao trùm t i thi u

M t cây bao trùm t i thi u minimum spanning tree c a m t

th có tr ng s là m t t p các c nh ch m t t c các nhsao cho t ng tr ng s c a các c nh là nh nh t

Cây bao trùm t i thi u không nh t thi t là duy nh t trong

h

9 14

10 4

7

2 4

8

11

Hình 4.5 Cây bao

trùm t i thi u

Trang 34

Gi i thu t Prim

Gi i thu t Prim là gi i thu t gi i bài toán cây bao trùm

t i thi u Gi i thu t này c ng trình bày m t chi n l c

gi i m t bài toán t i u hóa: gi i thu t tham lam

gi i t i u toàn c c cho các bài toán

Tuy nhiên i v i bài toán cây bao trùm t i thi u, ta có th

ch ng minh r ng chi n l c tham lam có th em l i

cây bao trùm v i t ng tr ng s t i thi u

Trang 35

Xây d ng cây bao trùm t i thi u

Gi s chúng ta có m t th vô h ng, liên thông

G = (V, E) v i hàm gán tr ng s w: E R và mu n tìm m tcây bao trùm t i thi u cho G

Có m t gi i thu t t ng quát mà t o d ng d n cây bao trùm

t i thi u m t lúc thêm m t c nh

Gi i thu t này duy trì m t t p A mà luôn luôn là m t t p

con c a m t cây bao trùm t i thi u

T i m i b c, m t c nh (u, v) c ch n thêm vào t p A

mà không vi ph m h th c b t bi n A {(u, v)} luôn luôn là

m t t p con c a m t cây bao trùm t i thi u

Trang 37

Gi i thu t Prim

Trong gi i thu t Prim, t p A hình thành m t c u trúc cây M t

c nh an toàn c a vào A th ng là c nh có tr ng s nh

nh t n i cây A v i m t nh không thu c v cây

Cây bao trùm kh i i t m t nút r b t k r và phát tri n cho

n khi cây ph t t c m i nh trong V T i m i b c, m t

V - A

Trong quá trình th c hi n gi i thu t này, t t c nh ng nh

c nh có tr ng s nh nh t c a nh ng c nh n i v v i m t nhtrong cây Theo qui c key[v] = n u không t n t i m t

c nh nh v y

Trang 38

Tr ng p[v] l u tên c a nh cha c a nh v trong cây.

for each v ∈ Q and w(u, v) < key[v] then

/ * update the key field of vertice v */

begin

p[v] := u; key[v]: = w(u, v) end

end

end;

Trang 39

2 1

2 7

2 1

2 7

Trang 40

2 1

2 7

2 1

2 7

11

8

4

Trang 41

2 1

2 7

2 1

2 7

11 8

4

Trang 42

2 1

2 7

2 1

2 7

11

8

4

Trang 43

2 1

2 7

11 8

4

ph c t p c a gi i thu t Prim tùy thu c vào cách

mà chúng ta thi công hàng i có u tiên

Trang 44

ph c t p c a gi i thu t Prim

Tính ch t: N u Q c thi công nh là m t heap nh phân thì

th i gian tính toán c a gi i thu t Prim là O(E lgV)

N u Q c thi công nh là m t heap nh phân, chúng ta có

th l p ra m t heap trong b c kh i t o v i chi phí th i gian

là O(V)

Vòng l p while c th c hi n V l n và vì m i thao tác

EXTRACT-MIN có ph c t p O(lgV), chi phí tính toán

cho t t c các l nh g i EXTRACT-MIN là O(VlgV)

Vòng l p for bên trong vòng l p while c th c hi n t ng

c ng O(E) l n, vì t ng chi u dài c a t t c các danh sách k

c n là 2E Vi c c p nh t khóa c a nh v trong heap t n

O(lgV) l n Nh v y, t ng chi phí tính toán c a gi i thu t

Prim là O(V lgV + 2E lgV) = O(E lgV)

Trang 45

3 th có h ng

Các th có h ng là các th trong ó các c nh n i v icác nút có h ng

I H

Hình 4.7 M t thí d v th có h ng

Trang 46

Th ng thì h ng c a các c nh bi u th m i liên h tr c

sau precedence relationship trong ng d ng c mô hìnhhóa

m t ng dây s n xu t (assembly line)

Trong ph n này, chúng ta xem xét các gi i thu t sau:

- tính bao óng truy n (transitive closure)

- s p th t topo (topological sorting)

Trang 47

Vì th bao óng truy n thì th ng là th dày, do ó

chúng ta dùng cách bi u di n ma tr n k c n

Trang 48

if a[y, j] then a[x, j]: = true;

S Warshall ra gi i thu t này n m 1962, d a trên m t

quan sát n gi n: N u t n t i m t cách i t nút x n

x n nút j

Trang 50

Tính ch t 5.3.1 Gi ithu t Warshall tính baoóng truy n v i chi phíO(V3).

Trang 51

I H

2 3

1

1 1

4 2

5

3

2 1

2 2 1

1 1

1

Trang 55

Gi i thích gi i thu t Floyd

Gi i thu t Floyd l p V b c trên ma tr n k c n a

Sau b c l p th y, a[x, j] s ch a chi u dài nh nh t c a

b t k l i i nào t nh x n nh j mà không i qua

nh ng nh mang ch s l n h n y Ngh a là, x và j có th

b t k nh nào nh ng nh ng nh trung gian trên l i i

T i b c l p th y, ta tính các ph n t c a ma tr n a b ngcông th c sau:

ay[x,j] = min( ay-1[x,j], ay-1[x, y] + ay-1[y, j])

Ch s y ch tr c a m t ph n t trong ma tr n a sau b c

l p th y

Trang 58

T p th t riêng ph n

M t quan h trên t p S mà th a hai tính ch t b t i x ng

và truy n là m t quan h th t riêng ph n partial ordering

c a S, và m t t p có trên nó m t quan h th t riêng ph nthì c g i là t p th t riêng ph n (partially order set )

coi nh là m t t p th t riêng ph n

Trang 60

X p th t tôpô

Cho G là m t th có h ng không chu trình M t

th t tôpô (topological sort)T c a G là m t th t

tuy n tính mà b o toàn th t riêng ph n ban u

trong t p nh V[G].

Ngh a là: n u u < v trong V (t c là n u có m t l i i

t u n v trong G), thì u xu t hi n tr c v trong th

t tuy n tính T.

Trang 61

I H

theo th t sau:

J K L M A G H I F E D B C

Trang 62

S p th t tôpô1 (Ph ng pháp

Có vài ph ng pháp s p th t tôpô

Ph ng pháp 1

Ý t ng c n b n là tìm m t nút không có nút i sau (no

successor) lo i b nó ra kh i th và a nó vào m t danh

sách

L p l i quá trình này cho n khi th r ng thì s sinh ra m tdanh sách o ng c danh sách này ta s c th t tôpô.Algorithm:

while aph has a node with no successors do

remove one such node from the graph and

add it to the end of a list

if the loop terminates with the graph empty

then the list shows the reserse of a topological order

else the graph contains a cycle

Trang 63

I H

D E F I H G A M L K J

Hình 4.8 S p th t tôpô b ng ph ng pháp 1

Trang 64

Start with nodes with no predecessor, put them in the stack.

while the stack is not empty do

if the node at top of the stack has some successors

then

push all its successors onto the stack

else pop it from the stack and add it to the list

Trang 65

8 5

Trang 66

nh i tr c p[v] mà là m t nh khác hay là NIL Gi i thu tgán tr cho thu c tính p sao cho d y các nh i tr c xu t

phát t nh v s cho ra l i i ng n nh t t s n v

Trang 67

Ta g i d[v] là c l ng l i i ng n nh t (shortest path estimate).

Quá trình n i l ng m t c nh (u, v) bao g m vi c th xem ta có

th c i thi n l i i ng n nh t n v mà ang tìm th y b ng cách iqua u và n u nh v y, ta c p nh t d[v] và p[v] M t b c n i l ng

s làm gi m c l ng l i i ng n nh t d[v] và c p nh t thu c

tính p[v]

Nh ng l i i ng n nh t v s n i l ng

Trang 68

v

v Relax(u,

(

ì 4.10: S n i l ng c a m t c nh

Trang 69

Trong gi i thu t sau ây, ta dùng hàng i có u tiên Q

ch a t t c các nh trong V-S, l p khóa theo thu c tính d Và

Gi i thu t Dijkstra

Trang 70

procedure dijkstra(G, w, s);

/* G is a graph, w is a weight function and s is the source node */begin

for each vertex v ∈ V[G] do /* initialization */

begin d[v]: = ∞; p[s]: = NIL end;

d[s]: = 0; S: = ∅; Q: = V[G]

while Q is not empty do

begin

u: = EXTRACT-MIN (Q); S: = S ∪ {u};

for each vertex v ∈ Adj [u] do /* relaxation */

if d[v] > d [u] + w(u, v) thenbegin d[v]: = d[u] + w(u, v); p[v]: = u endend

end

Trang 71

-S a vào t p S, nó th c s s d ng chi n l c tham

lam

• Gi i thu t tham lam th ng không m b o em l i l i gi i

t i u trong tr ng h p t ng quát, nh ng i v i bài toánnày, gi i thu t Dijkstra th c s em l i nh ng l i i ng n

nh t

• Gi i thu t Dijkstra t ng t nh gi i thu t Prim dùng

tính cây bao trùm t i thi u Nó c ng dùng m t hàng i có

nh ó vào t p, và i u ch nh l i tr ng s c a nh ng nhcòn l i bên ngoài t p

Gi i thu t Dijkstra

Trang 72

M t thí d

10

0 0

Trang 74

5

2 3

10

5

2 3

(s, : <s, x, u> (s, v : <s, x, u, v>

(s, x : <s, x> (s, y : <s, x, y, y>

Trang 75

í , m i thao tác EXTRACT-MIN t nO(V), và có t t c |V| thao tác nh v y, do ó ta có m t chiphí tính toán cho thao tác này là O(V2)

nh trong các danh sách k c n dj[v] c xét úng m t

l n trong su t ti n trình c a gi i thu t

Vì t ng s nh trong t t các các danh sách k c n là |E|, có

t t c |E| b c l p cho vòng l p for, v i m i l n l p t n O(1)

Th i gian tính toán c a gi i thu t là

O(V2 + E) = O(V2)

ph c t p c a gi i thu t Dijkstra

Trang 76

• à ó ê

ú , m i thao tác EXTRACT-MIN t n chi phí O(lgV),

và có t t c |V| thao tác này, do ó ta có t ng chi phí cho

thao tác EXTRACT-MIN là O(VlgV)

Phép gán d[v]: = d[u] + w(u, v) òi h i m t thao tác c p

nh t khóa c a nh v trong heap và nó t n O(lgV) Có t t c

|E| thao tác nh v y Do ó t ng th i gian tính toán c a gi ithu t là

O(V lgV + E lgV)

ph c t p c a gi i thu t Dijkstra

Ngày đăng: 05/08/2014, 20:21

HÌNH ẢNH LIÊN QUAN

Hình  M t th thí d - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
nh M t th thí d (Trang 4)
Hình 4.1b: Ma tr n k - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.1b Ma tr n k (Trang 9)
Hình 4.1c: Bi u di n b ng t p danh sách k c n c a th hình 4.1 - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.1c Bi u di n b ng t p danh sách k c n c a th hình 4.1 (Trang 14)
Hình 4.3a DFS d a vào stackG - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.3a DFS d a vào stackG (Trang 26)
Hình 4.3b  N i dung c a stack khi th c hi n duy t theo chi u sâu tr c - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.3b N i dung c a stack khi th c hi n duy t theo chi u sâu tr c (Trang 27)
Hình 4.5 Cây bao - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.5 Cây bao (Trang 33)
Hình 4.6. M t thí - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.6. M t thí (Trang 39)
Hình 4.7. M t thí d v th có h ng - Chương 4: Độ phức tạp của các giải thuật đồ thị pps
Hình 4.7. M t thí d v th có h ng (Trang 45)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w