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

SLIDE TOÁN RỜI RẠC Chương 3 3 các thuật toán tìm kiếm trên đồ thị TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT

31 30 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

Tiêu đề Các Thuật Toán Tìm Kiếm Trên Đồ Thị
Người hướng dẫn GV: Đặng Hữu Nghị
Trường học Trường Đại Học Mỏ Địa Chất
Định dạng
Số trang 31
Dung lượng 737,05 KB

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

Nội dung

IẾP TỤC CHƯƠNG 2 CỦA MÔN TOÁN RỜI RẠC MÌNH SẼ GỬI DẾN D CÁC BẠN SLIDE BÀI GIẢNG CHƯƠNG 3.3 MÔN TOÁN RỜI RẠC CỦA TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT MONG RẰNG VỚI CÁC SLIDE NÀY SẼ GIÚP CÁC BẠN DỄ DÀNG CHINH PHỤC ĐƯỢC MÔN TOÁN RỜI RẠC NÀY

Trang 1

CHƯƠNG 3: LÝ THUYẾT ĐỒ THỊ

GV: Đặng Hữu Nghị Sđt: 0989640319

Email: nghidanghuu@gmail.com

Trang 2

NỘI DUNG

3.1 •Các khái niệm cơ bản của lý thuyết đồ thị

3.2 •Biểu diễn đồ thị trên máy tính

3.3 •Các thuật toán tìm kiếm trên đồ thị

3.4 •Đồ thị Euler và đồ thị Hamilton

3.5 •Cây và cây khung của đồ thị

3.6 •Bài toán đường đi ngắn nhất

Trang 3

CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ

 Duyệt đồ thị là quá trình đi qua tất cả các đỉnh của đồ

thị sao cho mỗi đỉnh của nó được viếng thăm đúng

Trang 4

3.3.1 TÌM KIẾM THEO CHIỀU SÂU TRÊN ĐỒ

THỊ

Ý tưởng:

 Từ đỉnh v1 nào đó chưa thăm, thăm v1, rồi tìm đỉnh v2

(chưa thăm) kề với v1, thăm v2…

 Thuật toán lặp lại việc thăm cho tới khi tất cả các đỉnh

đều được thăm

 Nếu tại một đỉnh vi nào đó, không còn đỉnh nào kề với vi

là chưa thăm thì quay trở lại tiếp tục tìm đỉnh kề chưa

thăm khác của vi-1

Trang 5

CÀI ĐẶT ĐỆ QUY

B1: Lấy s là một đỉnh của đồ thị

B2: Đặt v = s

B3: Duyệt đỉnh v

B4: Nếu ∀ đỉnh kề của v đều

được duyệt, đặt v = đỉnh đã được

duyệt trước đỉnh v, Nếu v = s thì

đi đến Bước 6, ngược lại trở lại

Trang 6

CÀI ĐẶT ĐỆ QUY

B1: Lấy s là một đỉnh của đồ thị

B2: Đặt v = s

B3: Duyệt đỉnh v

B4: Nếu ∀ đỉnh kề của v đều

được duyệt, đặt v = đỉnh đã được

duyệt trước đỉnh v, Nếu v = s thì

đi đến Bước 6, ngược lại trở lại

Bước 5.

B5: Chọn u là đỉnh kề chưa được

duyệt của v, đặt v = u, trở lại

Bước 3

Trang 7

CÀI ĐẶT ĐỆ QUY (BẰNG GIẢ MÃ)

 Thuật toán

Procedure DFS(v);

(*tim kiem theo chieu sau bat dau tu dinh v; cac

bien Chuaxet, Ke la bien toan cuc*)

Begin

Thăm_đỉnh(v);

Chuaxet[v]:=false;

For u Є Ke(v) do

If Chuaxet[u] then DFS(u);

End; (*dinh v da duyet xong*)

7

Trang 8

CÀI ĐẶT ĐỆ QUY (BẰNG GIẢ MÃ)

 Khi đó, tìm kiếm theo chiều sâu trên đồ thị được thực

hiện nhờ thuật toán sau:

Trang 9

CÀI ĐẶT KHÔNG ĐỆ QUY

Trang 11

p  STACK; (*lấy p từ QUEUE:*)

Tham_dinh(p);

For u Є Ke(p) do

If Chuaxet[u] then Begin

Trang 12

3.3.2 TÌM KIẾM THEO CHIỂU SÂU TRÊN ĐỒ

THỊ

 Khi đó, tìm kiếm theo chiều sâu trên đồ thị được thực

hiện nhờ thuật toán sau:

Trang 13

 Ví dụ: Xét đồ thị cho trong hình Các đỉnh của nó được

đánh số lại theo thứ tự chúng được thăm theo thủ tục tìm

kiếm theo chiều sâu mô tả ở trên Giả thiết rằng các đỉnh

trong danh sách kề của đỉnh v (Ke(v)) được sắp xếp theo

thứ tự tăng dần của chỉ số

13

Trang 15

3.3.2 TÌM KIẾM THEO CHIỂU RỘNG TRÊN

ĐỒ THỊ

Ý tưởng:

 Từ đỉnh v nào đó chưa thăm, thăm v, cất tất cả các đỉnh u

(chưa thăm) kề với v vào hàng đợi (QUEUE).

 Lấy từ hàng đợi một đỉnh u, thăm u, rồi lại cất tất cả các

đỉnh t (chưa thăm) kề với u vào hàng đợi…

 Thuật toán lặp lại việc thăm cho tới khi hàng đợi

rỗng

 Nếu tại một đỉnh x nào đó, không còn đỉnh nào kề với x

là chưa thăm thì quay trở lại tiếp tục tìm đỉnh kề chưa

thăm khác của y (y là đỉnh trước khi đến x)

15

Trang 18

p  QUEUE; (*lấy p từ QUEUE:*)

Tham_dinh(p);

For u Є Ke(p) do

If Chuaxet[u] then Begin

QUEUE  u;

Chuaxet[u]:=false;

End;

Trang 19

3.3.2 TÌM KIẾM THEO CHIỂU RỘNG TRÊN

ĐỒ THỊ

 Khi đó, tìm kiếm theo chiều rộng trên đồ thị được thực

hiện nhờ thuật toán sau:

Trang 20

3.3.2 TÌM KIẾM THEO CHIỂU RỘNG TRÊN

ĐỒ THỊ

Ví dụ: Xét đồ thị cho trong hình gồm 13 đỉnh, các đỉnh được đánh số từ 1 đến

13 như sau:

Trang 21

3.3.2 TÌM KIẾM THEO CHIỂU RỘNG TRÊN

ĐỒ THỊ

21

Trang 22

BÀI TẬP

Trang 23

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

THÔNG

a) Bài toán tìm đường đi giữa hai đỉnh:

Giả sử s và t là hai đỉnh nào đó của đồ thị Hãy tìm đường

đi từ s đến t

Ý tưởng:

 Gọi thủ tục DFS(s) hoặc (BFS(s)) để thăm tất cả các đỉnh

thuộc cùng một thành phần liên thông với s

 Nếu sau khi thực hiện xong thủ tục mà Chuaxet[t]=true

thì không có đường đi từ s đến t, ngược lại thì có đường

đi từ s đến t

 Để ghi nhận đường đi, ta dùng thêm biến Truoc[v] để ghi

nhận đỉnh đi trước đỉnh v trong đường đi từ s đến v 23

Trang 24

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

THÔNG

 Khi đó, thủ tục DFS(v) cần sửa câu lệnh if trong nó như sau:

If Chuaxet[u] then Begin

Truoc[u]:=v;

DFS(u);

End;

 Thủ tục BFS(v) cần sửa đổi câu lệnh if trong nó như sau:

If Chuaxet [u] then Begin

QUEUE  u;

Chuaxet[u]:=false;

Truoc[u]:=p;

Trang 25

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

Trang 27

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

THÔNG

b) Tìm các thành phần liên thông của đồ thị:

 Hãy cho biết đồ thị gồm bao nhiêu thành phần liên thông

và từng thành phần liên thông của nó là gồm những đỉnh

nào

 Do thủ tục DFS(v) (BFS(s)) cho phép thăm tất cả các

đỉnh thuộc cùng một thành phần liên thông với s, nên số

thành phần liên thông của đồ thị bằng số lần gọi đến thủ

tục này

 Vấn đề còn lại là cách ghi nhận các đỉnh trong từng

thành phần liên thông

 Ta dùng thêm biến Index[v] để ghi nhận chỉ số của thành

phần liên thông chứa đỉnh v, và biến Inconnect để đếm

số thành phần liên thông (khởi tạo giá trị 0) 27

Trang 28

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

THÔNG

 Thủ tục Tham_dinh(v) trong các thủ tục DFS(v) và BFS(v) có

nhiệm vụ gán: Index[v]:=Inconnect;

 Câu lệnh if trong các chương trình chính gọi đến các thủ tục

này cần được sửa lại như sau:

Inconnect:=0;

If Chuaxet[v] then Begin

Inconnect:=Inconnect+1;

DFS(v); (*BFS(v)*) End;

 Kết thúc vòng lặp thứ hai trong chương trình chính, Inconnect

trả về số thành phần liên thông của đồ thị, biến mảng

Trang 29

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

inconnect ++; DFS(v);

}

Trang 30

3.3.3 TÌM ĐƯỜNG ĐI VÀ KIỂM TRA TÍNH LIÊN

Ngày đăng: 17/01/2022, 08:45

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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