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

CÁC THUẬT TOÁN DUYỆT đồ THỊ

17 292 1

Đ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 17
Dung lượng 82 KB

Nội dung

CÁC PHÉP DUYỆT ĐỒ THỊKhái niệm duyệt đồ thị Thuật toán duyệt đồ thị Duyệt đồ thị theo chiều sâu Duyệt đồ thị theo chiều rộng... KHÁI NIỆM DUYỆT ĐỒ THỊ  Duyệt đồ thị là một cách liệt

Trang 1

CHƯƠNG 6

CÁC THUẬT TOÁN

DUYỆT ĐỒ THỊ

Trang 2

NỘI DUNG

Các thuật toán duyệt đồ thị

Một số ứng dụng của các thuật toán duyệt đồ thị

Trang 3

6.1 CÁC PHÉP DUYỆT ĐỒ THỊ

Khái niệm duyệt đồ thị

Thuật toán duyệt đồ thị

Duyệt đồ thị theo chiều sâu

Duyệt đồ thị theo chiều rộng

Trang 4

KHÁI NIỆM DUYỆT ĐỒ THỊ

 Duyệt đồ thị là một cách liệt kê tất cả các đỉnh của

đồ thị thành một danh sách tuyến tính

- Cho một cách “đi qua” tất cả các đỉnh của đồ thị để truy nhập, thêm bớt thông tin …

- Duyệt đồ thị không phụ thuộc vào hướng của cạnh

Trang 5

VÍ DỤ 5.1

A

B

D

H

C

E

G F

1

5

6 7

8

Thứ tự duyệt: A, B, D, H, E, G, F, C

Trang 6

6.2 THUẬT TOÁN DUYỆT ĐỒ THỊ

Cho đồ thị G = (V, E) với x 0 là một đỉnh của G

Dùng một cấu trúc dữ liệu kiểu danh sách, kí hiệu là

DS, để chứa các đỉnh

Trang 7

6.2 THUẬT TOÁN DUYỆT ĐỒ THỊ (tiếp)

Thuật toán

1) Khởi đầu: DS  {x 0}

2) Lấy đỉnh x ra khỏi đầu DS

3) Duyệt đỉnh x

4) Nạp các đỉnh của F(x) vào DS

5) Nếu DS   thì quay lên bước 2)

6) Dừng

Trang 8

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU

Danh sách DS được tổ chức theo kiểu stack (danh

sách vào sau – ra trước – LIFO).

Mỗi lần duyệt một đỉnh ta duyệt đến tận cùng mỗi

nhánh rồi mới chuyển sang duyệt nhánh khác

Trang 9

VÍ DỤ 6.2 Thứ tự duyệt của các đỉnh trên đồ thị:

4 3

12

11 5

6

7

8

9 1

2

10

13 14

Trang 10

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

1 Bắt đầu duyệt từ một đỉnh x 0 nào đó của đồ thị

2 Chọn x là đỉnh kề nào đó của x0 và lặp lại quá trình

duyệt đối với đỉnh x Giả sử đang xét đỉnh x.

- Nếu tìm được đỉnh y chưa được duyệt thì xét đỉnh

này và bắt đầu từ đó tiếp tục quá trình duyệt

- Nếu không còn đỉnh kề với x chưa được duyệt thì nói rằng đỉnh x đã duyệt xong, quay trở lại tiếp

tục duyệt từ đỉnh mà từ đó đến được đỉnh x

- Nếu quay trở lại đúng đỉnh x 0 thì phép duyệt kết thúc

Trang 11

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

Thuật toán 6.1 (Depth-First Search)

Dữ liệu: Biểu diễn mảng DK các danh sách kề của

đồ thị vô hướng G

Kết quả: Danh sách các đỉnh của đồ thị G.

Trang 12

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

Thuật toán 6.1

1 procedure D_SAU (v) ;

2 begin

3 Thăm_đỉnh (v) ;

4 Duyet [v] := true ;

5 for u  DK[v] do

6 if ! Duyet [u] then D_SAU (u) ;

7 end ;

Trang 13

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

8 BEGIN { Chương trình chính }

9 for v  V do Duyet [v] := false ;

10 for v  V do

11 if ! Duyet [v] then D_SAU (v)

12 END

Trang 14

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

Nhận xét:

- Độ phức tạp: O(n+m)

- Đỉnh được thăm càng muộn càng sớm trở thành

duyệt xong

- Dùng một ngăn xếp lưu trữ các đỉnh đang duyệt để cải tiến thuật toán

Trang 15

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

Thuật toán cải tiến:

1 procedure D_SAU_2 (v) ;

2 begin

3 S :=  ;

4 Thăm_đỉnh (v) ;

5 Duyet [v] := true ;

6 push v onto S ; {Nạp v lên đỉnh của S }

Trang 16

6.3 DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (tiếp)

7 while S   do

8 begin

9 while  u  DK[top(S)] do

10 if ! Duyet [u] then

11 begin

12 Thăm_đỉnh (u) ;

13 Duyet [u] := true ;

14 push u onto S

15 end ;

16 pop(S) {Loại bỏ phần tử ở đỉnh của S}

17 end

18 end ;

Trang 17

VÍ DỤ 6.3

Đồ thị và quá trình duyệt theo chiều sâu

1

8

4

7

9

Ngày đăng: 29/12/2015, 21:50

TỪ KHÓA LIÊN QUAN

w