LY THUYET DO THI BAI 10

3 10 0
LY THUYET DO THI BAI 10

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

Thông tin tài liệu

Ngược lại, nếu không còn đỉnh nào kề với x chưa được duyệt thì ta nói rằng đỉnh x đã duyệt xong và quay trở lại tiếp tục duyệt từ đỉnh mà từ đó ta đến được đỉnh x.. Nếu quay trỏ lạ[r]

(1)

BÀI 11

Chương

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

Phép duyệt đồ thị cách liệt kê tất đỉnh đồ thị thành danh sách tuyến tính Hay nói cách khác, phép duyệt đồ thị cho ta cách “đi qua” tất đỉnh đồ thị để truy nhập, thêm bớt thơng tin đỉnh đồ thị

Phép duyệt đồ thị không phụ thuộc vào hướng cạnh Do vậy, với đồ thị có hướng ta vơ hướng hố trước duyệt

6.1 Các thuật toán duyệt đồ thị 6.1.1 Thuật toán duyệt đồ thị

Giả sử G = (V, E) đồ thị cho x0 đỉnh G Ký hiệu DS cấu trúc liệu kiểu danh sách dùng để chứa đỉnh

1) Khởi đầu: DS ← {x0}

2) Lấy đỉnh x khỏi đầu DS 3) Duyệt đỉnh x

4) Nạp đỉnh F(x) vào DS 5) Nếu DS ≠ ∅ quay lên bước 2) 6) Dừng

6.1.2 Duyệt theo chiều sâu (Depth-First Search)

Nếu thuật toán trên, danh sách DS tổ chức theo kiểu stack (danh sách vào sau - trước – LIFO) ta có phương pháp duyệt theo chiều sâu

Trong phương pháp lần duyệt đỉnh ta duyệt đến tận nhánh chuyển sang duyệt nhánh khác

Giả sử G = (V, E) đồ thị vô hướng

Ta bắt đầu duyệt từ đỉnh x0 đồ thị Sau chọn x đỉnh kề

nào x0 lặp lại trình duyệt đỉnh x

Giả sử ta xét đỉnh x Nếu số đỉnh kề với x, ta tìm đỉnh y chưa duyệt ta xét đỉnh ta tiếp tục q trình duyệt

(2)

Ngược lại, khơng cịn đỉnh kề với x chưa duyệt ta nói đỉnh x duyệt xong quay trở lại tiếp tục duyệt từ đỉnh mà từ ta đến đỉnh x Nếu quay trỏ lại đỉnh x0 phép duyệt kết thúc

Thuật toán 6.1 (Duyệt đồ thị theo chiều sâu):

Dữ liệu: Biểu diễn mảng DK danh sách kề đồ thị vô hướng G Kết quả: Danh sách đỉnh đồ thị G

1 procedure D_SAU (v) ; begin

3 Thăm_đỉnh (v) ; Duyet [v] := true ; for u ∈ DK[v]

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

8 BEGIN { Chương trình } for v ∈ V Duyet [v] := false ;

10 for v ∈ V

11 if ! Duyet [v] then D_SAU (v) ; 12 END

Độ phức tạp thật tốn là: O(n+m) Ví dụ 6.1: Đồ thị duyệt theo chiều sâu

Hình 6.1 Thứ tự đỉnh duyệt theo chiều sâu

Trong thuật toán duyệt theo chiều sâu, đỉnh thăm muộn sớm trở thành duyệt xong Do việc dùng ngăn xếp (stack) để lưu trữ đỉnh duyệt thích hợp Ta có thủ tục cải tiến sau đây:

(3)

1 procedure D_SAU_2 (v) ; begin

3 S := ∅ ;

4 Thăm_đỉnh (v) ; Duyet [v] := true ;

6 push v onto S ; { Nạp v lên đỉnh S } while S ≠ ∅

8 begin

9 while ∃ u ∈ DK[top(S)] 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 S } 17 end ;

Ngày đăng: 13/04/2021, 01:41

Tài liệu cùng người dùng

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

Tài liệu liên quan