1. Trang chủ
  2. » Giáo án - Bài giảng

giải thuật lý thuyế đồ thị

37 311 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

Cho G = (V,E) là đồ thị có tập các đỉnh V và tập các cạnh E. v là một đỉnh trong V va u là đỉnh kề của v, sao cho u cũng thuộc V. Khi đó ta dán nhãn cho tất cả các đỉnh của đồ thị là 0. Chọn một đỉnh v thuộc tập V để bắt đầu duyệt. Gán nhãn đỉnh v này la 1v đã được duyệt. Chọn đỉnh u trong tập V kề với đỉnh v mà nhãn là 0. Duyệt qua đỉnh u và gán nhãn u là 1. Tiếp tục quá trình duyệt đến khi tất cả các đỉnh đồ thị có nhãn là 1.

Chương 5: Giải thuật đồ thị 5.1 Cấu trúc lưu trữ đồ thị d anh sách kề 5.2 Tìm kiếm đồ thị 5.3 Cây bao trùm ngắn 5.4 Sắp xếp tôpô      5.1 Lưu trữ danh sách kề  Danh sách đỉnh v1, v2, ,  Danh sách kề đỉnh Adj(vi) , i=1 n A B C B A C C A B D A F E A C F C D D E D A E E F B C       F 5.2 Tìm kiếm đồ thị   Tìm kiếm ưu tiên chiều sâu Tìm kiếm ưu tiên chiều rộng  Tìm đường ngắn Kí hiệu: V(G)=tập đỉnh G, E(G)=tập cạnh G Hàm Color(u) trạng thái đỉnh trình tìm kiếm Color(u) nhận giá trị : WHITE, GRAY, BLACK Lúc đầu, Color(u)=WHITE nghĩa chưa xét, với đỉnh u bắt đầu xét, Color(u)=GRAY, u xét xong Color(u)=BLACK       Nội dung toán tìm kiếm  Cho đồ thị G=(V,E) đỉnh s Xuất phát từ đỉnh s, duyệt qua tất đỉnh đồ thị Kí hiệu:  V(G)=tập đỉnh G, E(G)=tập cạnh G  Hàm Color(u) trạng thái đỉnh trình tìm kiếm Color(u) nhận giá trị : WHITE, GRAY, BLACK Lúc đầu, Color(u)=WHITE nghĩa chưa xét, với đỉnh u bắt đầu xét, Color(u)=GRAY, u xét xong Color(u)=BLACK 5.2.1 Tìm kiếm ưu tiên chiều sâu (DFS) Thủ tục đệ quy: Procedure DFS(G) {Khởi tạo: Mọi đỉnh u chưa xét } for each u ∈ V[G]   color[u]:= WHITE ; for each đỉnh u ∈   V[G] if color[u] = WHITE       then DFS-Visit (u)   Procedure DFS-Visit (u) color[u] := GRAY  for each v ∈ Adj[u] if color[v] =WHITE    then   DFS-Visit (v) color[u]:= BLACK        Tìm kiếm ưu tiên chiều sâu (DFS) Thủ tục không đệ quy: Procedure DFS(G,s) 1.For each u in V[G]  color[u]:= WHITE ; 2.color[s]:=GRAY; 3.Push(s,Stack) 4.While Stack # ∅ u:= Pop(Stack); if có v∈ Adj(u) and color(v)=WHITE then color(v):=GRAY ; Push(v,Stack); else color(u):=BLACK; 9.end; CHÚ Ý:  Hàm Push(v,Stack) đặt phần tử v vào đỉnh ngăn xếp Stack  Hàm Pop(Stack) lấy phần tử đửng đỉnh ngăn xếp khỏi ngăn xếp        Ví dụ: DFS(A) D A E B A A Adj(v)∩ Trắng B,C,D,E A,B B C C,D,E,F A,B,C C E,F D,E,F A,B,C,E E A,B,C C F A,B,C,F F D A,B,C,F, D D D A,B,C,F F F A,B,C C C A,B B B A A A Stack (Sám) C       F Rỗng v Đỉnh trắng B,C,D,E,F D,F Đỉnh đen E D Ví dụ: DFS(A) (tiếp) D A D A E E B F C B D A C E F C B F C D A E B D A E F B C D A E F       B C F Ví dụ: DFS(A) (tiếp) D A D A E B C D A E B F E C D E E C F C A D A B B F F       B C F 5.3.2 Tìm kiếm ưu tiên chiều rộng (BFS)  10 11 Procedure BFS(G,s) for each u ∈ V[G] color[u]:= WHITE;Prev(u)=Null; color[s]:=GRAY; Q:= {s} While Q # ∅ u:= Head(Q); /*lấy u phần tử đứng đầu hàng đợi để xét*/ For each v ∈ Adj(u) if color(v)= WHITE then color(v):=GRAY; Prev(v):= u; ENQUEUE(Q,v);/*đặt v vào cuối hàng đợi*/ DeQueue(Q,u);/* Gỡ u khỏi hàng đợi */ Color(u):= BLACK;      10 Ví dụ: Giải thuật PRIM Bổ sung loại bỏ cạnh đươc xét Bổ sung cạnh AB,AC,AD,AF BE,BD AB AF FC,FG GC,GD,GE FG AC CD CD GE Bổ sung đỉnh A B A B 12 9 E D F C 10 11 G F G C D E Đủ đỉnh      23 Giải thuật PRIM (tiếp) A F B 12 C 10 D 11 E G A E G F A F G       A F B 12 C 10 D 11 G B 12 C 10 D 11 E E G F B 12 C 10 D 11 E B 12 C 10 D 11 A A F B 12 C 10 D 11 E G 24 Đặc trưng giải thuật PRIM  Trong trình xây dựng , T G Khi T chứa tất đỉnh G, T trở thành bao trùm G       25 Giải thuật KRUSKAL Mô tả ngôn ngữ tự nhiên V’:={}, E’={} (rỗng); m’=0; While m’ < n-1 Begin Chọn cạnh (u,v) có ϕ(u,v) nhỏ cho thêm vào E’ T chu trình E’:= E’ ∪ {(u,v)} ; m’:=m’+1; End;       26 Giả mã giải thuật KRUSKAL Procedure KRUSCAL A:= ∅ For each u in V(G) Make-Set(u); Sắp xếp cạnh E(G) theo số không giảm w; For each (u,v) in E(G) if Find-Set(u) Find-Set(v) then A:= A U (u,v); Union(u,v); Chú ý:  A rừng trình xây dựng  Make_Set(u) thủ tục tạo tập gồm phần tử u;  Hàm File-Set(u) tìm tập hợp có chứa phần tử u  Thủ tục Union(u,v) thực phép hợp hai tập chứa u v  27 Giải thuật Kruskal - Ví dụ B E A D F C 8 G Cạnh xét Các rừng Chọn AB(3) {A},{B},{C},{D},{E}, {F}, {G} AB AD(4) {A,B},{D},{C},{E},{F}, {G} AD FG(4) {A,B,D}, {C},{E},{F},{G} FG BD(5) {A,B,D}, {C},{E},{F,G} CF(6) {A,B,D}, {C},{E},{F,G} CF AF(6) {A,B,D}, {E},{C,F,G} AF AC(7) {A,B,D,C,F,G}, {E} DG(8) {A,B,D,C,F,G}, {E} EG(8) {A,B,D,C,F,G}, {E} EG DC(9) {A,B,D,C,F,G,E} BE(9) {A,B,D,C,F,G,E}       28 Giải thuật KRUSKAL: Ví dụ A B D F C E  G       Trong trình xây dựng T chu trình nên rừng 29 Đặc điểm giải thuật KRUSKAL Trong trình xây dựng T có không?  Trong trình xây dựng T chu trình nên rừng, không Khi cạnh (u,v) tạo thành chu trình với cạnh có T ?  Khi hai đầu mút u, v thuộc T       30 6.4 Sắp xếp tô pô  Bài toán: Cho đồ thị có hướng, xếp đỉnh đường thẳng cho cạnh hướng từ trái sang phải A D B C A E B D C E F F       31 Giải thuật xếp tôpô Ngôn ngữ tự nhiên mô tả thuật toán tìm xếp tôpô G=(V,E) sau: Nếu đỉnh G có bậc vào >0 G xếp tôpô Nếu v ∈ V(G) có bậc vào (không có cạnh vào) đặt đầu danh sách, xóa v cạnh xuất phát từ v khỏi G G’ Tiếp tục làm với G’        32 Sắp xếp tôpô – Ví dụ A D B C A F E D B C B F E D C E D C F F E E F C F E       F 33 Tìm bao trùm theo chiều sâu  Chọn đỉnh v0 cho vào T  Xét đỉnh v cho vào T chưa xét xong:  Nếu có đỉnh u kề với v chưa nằm T bổ xung cạnh (v,u) đỉnh u vào T; thay v u để tiếp tục xét đỉnh u với v;  Nếu tất đỉnh kề với v nằm T đỉnh v xét xong quay lại xét đỉnh đứng trước v trình tìm kiếm  Nếu đỉnh v0 xét xong dừng 34 Ví dụ A F Xét Bổ xung cạnh đỉnh π(v) A (AB), đỉnh B π(B)=A B (BD), đỉnh D π(D)=B D (DC), đỉnh C π(C)=D C (CF), đỉnh F π(F)=C F Không còn,quay lại C C Không còn, quay lại D D (CG), đỉnh G G (GE), đỉnh E B C D E G A F B C D E G 35 Tìm bao trùm theo chiều rộng A Xét Bổ xung cạnh Số cạnh đỉnh A (AB),(AC),(AD),(AF) đỉnh B,C,D,F B (BE), đỉnh E F B D E (DG), đỉnh G G A C D C F B C D E G 36 Hết chương 37 ... m cạnh  Hàm trọng số ϕ: E → R+ OUTPUT:  T= bao trùm nhỏ   Giải thuật Prim Giải thuật Kruskal       20 Giải thuật Prim Mô tả ngôn ngữ tự nhiên /*Khởi tạo: đỉnh chưa xét*/ V’:={s},... Giả mã giải thuật DIJSKTRA Giả mã- Khởi tạo For each v in V(G) L(v):= +∞ ; Pre(v):= Null; Q:=V(G); L(s)= 0; Chú giải: Hàm Q hàng đợi ưu tiên lúc đầu gồm tất đỉnh G      16 Giải thuật DIJSKTRA... xét xong Color(u)=BLACK       Nội dung toán tìm kiếm  Cho đồ thị G=(V,E) đỉnh s Xuất phát từ đỉnh s, duyệt qua tất đỉnh đồ thị Kí hiệu:  V(G)=tập đỉnh G, E(G)=tập cạnh G  Hàm Color(u)

Ngày đăng: 01/10/2017, 00:42

Xem thêm: giải thuật lý thuyế đồ thị

TỪ KHÓA LIÊN QUAN

Mục lục

    Chương 5: Giải thuật trên đồ thị

    5.1. Lưu trữ bằng danh sách kề

    5.2. Tìm kiếm trên đồ thị

    Nội dung bài toán tìm kiếm

    5.2.1. Tìm kiếm ưu tiên chiều sâu (DFS)

    Tìm kiếm ưu tiên chiều sâu (DFS)

    Ví dụ: DFS(A)

    Ví dụ: DFS(A) (tiếp)

    5.3.2. Tìm kiếm ưu tiên chiều rộng (BFS)

    Ví dụ: BFS(A)

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w