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

toan roi rac 2 ngo xuan bach 3 search cuuduongthancong com

32 2 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

Học viện Cơng nghệ Bưu Viễn thơng Khoa Cơng nghệ thơng tin Tốn rời rạc Tìm kiếm đồ thị Ngô Xuân Bách CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Thuật tốn tìm kiếm theo chiều sâu (Depth-First Search) - DFS) Thuật tốn tìm kiếm theo chiều rộng (Breadth-First Search - BFS) Một số ứng dụng DFS BFS    CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm kiếm theo chiều sâu - DFS Tư tưởng  o o Trong trình tìm kiếm, ưu tiên “chiều sâu” “chiều rộng” Đi xuống sâu trước quay lại Thuật toán  DFS(𝑢){ //𝑢 đỉnh bắt đầu duyệt ; //duyệt đỉnh 𝑢 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑓𝑎𝑙𝑠𝑒; //xác nhận đỉnh 𝑢 duyệt for(𝑣 ∈ 𝐾𝑒(𝑢)){ if( 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑣-) //nếu 𝑣 chưa duyệt DFS(𝑣); //duyệt theo chiều sâu từ 𝑣 } } CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt DFS sử dụng ngăn xếp DFS(𝑢){ Bước 1: Khởi tạo 𝑠𝑡𝑎𝑐𝑘 = ∅; //khởi tạo 𝑠𝑡𝑎𝑐𝑘 ∅ p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑢); //đưa đỉnh 𝑢 vào ngăn xếp ; //duyệt đỉnh 𝑢 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑓𝑎𝑙𝑠𝑒; //xác nhận đỉnh 𝑢 duyệt Bước 2: Lặp while(𝑠𝑡𝑎𝑐𝑘 ≠ ∅){ 𝑠 = p𝑜𝑝(𝑠𝑡𝑎𝑐𝑘); //lấy đỉnh đầu ngăn xếp for(𝑡 ∈ 𝐾𝑒(𝑠)){ if( 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑡-){ //nếu 𝑡 chưa duyệt ; //duyệt đỉnh 𝑡 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑡- = 𝑓𝑎𝑙𝑠𝑒; //𝑡 duyệt p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑠); //đưa 𝑠 vào ngăn xếp p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑡); //đưa 𝑡 vào ngăn xếp beak; //chỉ lấy đỉnh 𝑡 } } } Bước 3: Trả lại kết return ; }4 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Độ phức tạp thuật toán DFS  Độ phức tạp thuật toán DFS(𝑢) phụ thuộc vào phương pháp biểu diễn đồ thị  Biểu diễn đồ thị ma trận kề o Độ phức tạp thuật toán 𝑂(𝑛2 ), 𝑛 số đỉnh Biểu diễn đồ thị danh sách cạnh  o Độ phức tạp thuật toán 𝑂(𝑛 𝑚), 𝑛 số đỉnh, 𝑚 số cạnh Biểu diễn đồ thị danh sách kề  o Độ phức tạp thuật toán 𝑂(max(𝑛, 𝑚)), 𝑛 số đỉnh, 𝑚 số cạnh CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Kiểm nghiệm thuật toán DFS (1/2) Ví dụ 1: Cho đồ thị gồm 13 đỉnh hình vẽ Hãy kiểm nghiệm thuật tốn DFS(1)  (Phương ND, 2013) CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Kiểm nghiệm thuật toán DFS (2/2) STT Trạng thái ngăn xếp 10 11 12 13 14 15 16- 1, 1, 2, 1, 2, 4, 1, 2, 1, 2, 4, 1, 2, 4, 6, 1, 2, 4, 1, 2, 4, 6, 1, 2, 4, 6, 8, 10 1, 2, 4, 6, 8, 10, 1, 2, 4, 6, 8, 10, 5, 1, 2, 4, 6, 8, 10, 5, 9, 13 1, 2, 4, 6, 8, 10, 5, 9, 13, 11 1, 2, 4, 6, 8, 10, 5, 9, 13, 11, 12 Lần lượt bỏ đỉnh khỏi ngăn xếp Danh sách đỉnh duyệt 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 10 10, 10, 5, 10, 5, 10, 5, 10, 5, 9, 13 9, 13, 11 9, 13, 11, 12 Kết duyệt: 1, 2, 4, 3, 6, 7, 8, 10, 5, 9, 13, 11, 12 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập Cho đồ thị gồm 13 đỉnh biểu diễn dạng ma trận kề hình vẽ Hãy cho biết kết thực thuật toán DFS(1) Chỉ rõ trạng thái ngăn xếp tập đỉnh duyệt theo bước thực thuật toán  (Phương ND, 2013) CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Nội dung Thuật tốn tìm kiếm theo chiều sâu (Depth-First Search) - DFS) Thuật tốn tìm kiếm theo chiều rộng (Breadth-First Search - BFS) Một số ứng dụng DFS BFS    CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm kiếm theo chiều rộng - BFS  Tư tưởng o o  Trong trình tìm kiếm, ưu tiên “chiều rộng” “chiều sâu” Tìm kiếm xung quanh trước xuống sâu Thuật toán BFS(𝑢){ Bước 1: Khởi tạo 𝑞𝑢𝑒𝑢𝑒 = ∅; p𝑢𝑠ℎ(𝑞𝑢𝑒𝑢𝑒, 𝑢); 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑓𝑎𝑙𝑠𝑒; Bước 2: Lặp while(𝑞𝑢𝑒𝑢𝑒 ≠ ∅){ 𝑠 = p𝑜𝑝(𝑞𝑢𝑒𝑢𝑒); ; for(𝑡 ∈ 𝐾𝑒(𝑠)){ if( 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑡-){ p𝑢𝑠ℎ(𝑞𝑢𝑒𝑢𝑒, 𝑡); 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑡- = 𝑓𝑎𝑙𝑠𝑒; } } } Bước 3: Trả lại kết return ; } 10 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm đường đỉnh đồ thị (1/4)  Phát biểu toán o  Cho đồ thị 𝐺 =< 𝑉, 𝐸 > (vơ hướng có hướng), 𝑉 tập đỉnh, 𝐸 tập cạnh Hãy tìm đường từ 𝑠 ∈ 𝑉 đến 𝑡 ∈ 𝑉? Mơ tả thuật tốn o o Nếu 𝑡 ∈ 𝐷𝐹𝑆(𝑠) 𝑡 ∈ 𝐵𝐹𝑆(𝑠) ta kết luận có đường từ 𝑠 đến 𝑡 đồ thị, ngược lại khơng có đường Để ghi nhận đường ta sử dụng mảng 𝑡𝑟𝑢𝑜𝑐,- gồm 𝑛 phần tử (𝑛 = |𝑉|)    18 Khởi tạo ban đầu 𝑡𝑟𝑢𝑜𝑐 𝑢 = với 𝑢 Mỗi đưa 𝑣 ∈ 𝐾𝑒(𝑢) vào ngăn xếp (nếu sử dụng 𝐷𝐹𝑆) hàng đợi (nếu sử dụng 𝐵𝐹𝑆) ta ghi nhận 𝑡𝑟𝑢𝑜𝑐 𝑣 = 𝑢 Nếu 𝐷𝐹𝑆 𝐵𝐹𝑆 khơng duyệt đến đỉnh 𝑡, 𝑡𝑟𝑢𝑜𝑐,𝑡- = ta kết luận khơng có đường từ 𝑠 đến 𝑡 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm đường đỉnh đồ thị (2/4) Sử dụng thuật toán DFS DFS(𝑠){ Bước 1: Khởi tạo 𝑠𝑡𝑎𝑐𝑘 = ∅; p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑠); 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑠- = 𝑓𝑎𝑙𝑠𝑒; Bước 2: Lặp while(𝑠𝑡𝑎𝑐𝑘 ≠ ∅){ 𝑢 = p𝑜𝑝(𝑠𝑡𝑎𝑐𝑘); //lấy đỉnh ngăn xếp for(𝑣 ∈ 𝐾𝑒(𝑢)){ if( 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑣-){ //nếu 𝑣 chưa duyệt 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑣- = 𝑓𝑎𝑙𝑠𝑒; //𝑣 duyệt p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑢); //đưa 𝑢 vào ngăn xếp p𝑢𝑠ℎ(𝑠𝑡𝑎𝑐𝑘, 𝑣); //đưa 𝑣 vào ngăn xếp 𝒕𝒓𝒖𝒐𝒄,𝒗- = 𝒖; //Ghi nhận 𝑡𝑟𝑢𝑜𝑐,𝑣- 𝑢 beak; //chỉ lấy đỉnh 𝑡 } } } Bước 3: Trả lại kết return ; } 19 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm đường đỉnh đồ thị (3/4) Sử dụng thuật toán BFS BFS(𝑢){ Bước 1: Khởi tạo 𝑞𝑢𝑒𝑢𝑒 = ∅; p𝑢𝑠ℎ(𝑞𝑢𝑒𝑢𝑒, 𝑠); 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑠- = 𝑓𝑎𝑙𝑠𝑒; Bước 2: Lặp while(𝑞𝑢𝑒𝑢𝑒 ≠ ∅){ 𝑢 = p𝑜𝑝(𝑞𝑢𝑒𝑢𝑒); for(𝑣 ∈ 𝐾𝑒(𝑢)){ if( 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑣-){ p𝑢𝑠ℎ(𝑞𝑢𝑒𝑢𝑒, 𝑣); 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑣- = 𝑓𝑎𝑙𝑠𝑒; 𝒕𝒓𝒖𝒐𝒄 𝒗 = 𝒖; } } } Bước 3: Trả lại kết return ; } 20 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tìm đường đỉnh đồ thị (4/4) Ghi nhận đường Ghi-Nhan-Duong-Di(𝑠, 𝑡){ if( 𝑡𝑟𝑢𝑜𝑐 𝑡 == 0){ ; } else{ ; // Đưa đỉnh t trước u = 𝑡𝑟𝑢𝑜𝑐 𝑡 ; // u đỉnh trước đến t while(𝑢 ≠ 𝑠){ ; u = 𝑡𝑟𝑢𝑜𝑐 𝑢 ; // lần ngược lại đỉnh trước u } ; } } 21 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập  Cho đồ thị gồm 13 đỉnh biểu diễn dạng ma trận kề hình vẽ Tìm đường từ đỉnh đến đỉnh 13 đồ thị ? (Phương ND, 2013) 22 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tính liên thơng mạnh đồ thị có hướng  Phát biểu tốn o  Đồ thị có hướng 𝐺 =< 𝑉, 𝐸 > liên thông mạnh hai đỉnh tồn đường Cho trước đồ thị có hướng 𝐺 = < 𝑉, 𝐸 > Kiểm tra xem 𝐺 có liên thơng mạnh hay khơng? Thuật tốn bool Strong_Connected (𝐺 =< 𝑉, 𝐸 >){ //kt tính liên thơng mạnh G 𝑅𝑒𝐼𝑛𝑖𝑡( ); // ∀𝑢 ∈ 𝑉: 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑡𝑟𝑢𝑒; for(𝑢 ∈ 𝑉){ //lặp tập đỉnh if(𝑩𝑭𝑺(𝒖) ≠ 𝑉) // kiểm tra 𝑫𝑭𝑺 𝒖 ≠ 𝑉 return false; // đồ thị không liên thông mạnh else 𝑅𝑒𝐼𝑛𝑖𝑡(); // khởi tạo lại mảng 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,} return true; // đồ thị liên thông mạnh } 23 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập  Cho đồ thị có hướng 𝐺 =< 𝑉, 𝐸 > biểu diễn dạng ma trận kề hình bên Xác định xem 𝐺 có liên thơng mạnh hay không? (Phương ND, 2013) 24 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Duyệt đỉnh trụ  Phát biểu toán o  Đỉnh 𝑢 ∈ 𝑉 đồ thị vô hướng 𝐺 =< 𝑉, 𝐸 > gọi trụ loại bỏ đỉnh 𝑢 với cạnh nối với 𝑢 làm tăng thành phần liên thông 𝐺 Cho trước đồ thị vô hướng (liên thông) 𝐺 =< 𝑉, 𝐸 >, tìm đỉnh trụ 𝐺? Thuật tốn Duyet_Tru (𝐺 =< 𝑉, 𝐸 >){ 𝑅𝑒𝐼𝑛𝑖𝑡( ); // ∀𝑢 ∈ 𝑉: 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑡𝑟𝑢𝑒; for(𝑢 ∈ 𝑉){ //lấy đỉnh 𝑢 𝑐ℎ𝑢𝑎𝑥𝑒𝑡 𝑢 = 𝑓𝑎𝑙𝑠𝑒; // cấm BFS DFS duyệt 𝑢 if(𝑩𝑭𝑺(𝒗) ≠ 𝑉\*u+) // kiểm tra 𝑫𝑭𝑺 𝒗 ≠ 𝑉\*u+ ; 𝑅𝑒𝐼𝑛𝑖𝑡(); // khởi tạo lại mảng 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,} } 25 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập  Cho đồ thị vô hướng 𝐺 =< 𝑉, 𝐸 > biểu diễn dạng ma trận kề hình bên Tìm đỉnh trụ 𝐺? (Phương ND, 2013) 26 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Duyệt cạnh cầu  Phát biểu toán   Cạnh 𝑒 ∈ 𝐸 đồ thị vô hướng 𝐺 =< 𝑉, 𝐸 > gọi cạnh cầu loại bỏ 𝑒 làm tăng thành phần liên thông 𝐺 Cho trước đồ thị vô hướng (liên thông) 𝐺 =< 𝑉, 𝐸 >, tìm cạnh cầu 𝐺? Thuật toán Duyet_Cau (𝐺 =< 𝑉, 𝐸 >){ 𝑅𝑒𝐼𝑛𝑖𝑡( ); // ∀𝑢 ∈ 𝑉: 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,𝑢- = 𝑡𝑟𝑢𝑒; for(𝑒 ∈ 𝐸){ //lấy cạnh đồ thị 𝐸 = 𝐸 \ *𝑒+; // loại bỏ cạnh 𝑒 khỏi đồ thị if(𝑩𝑭𝑺(𝟏) ≠ 𝑉) // kiểm tra 𝑫𝑭𝑺 𝟏 ≠ 𝑉 ; 𝐸 = 𝐸 ∪ *𝑒+; // hoàn trả lại cạnh 𝑒 𝑅𝑒𝐼𝑛𝑖𝑡(); // khởi tạo lại mảng 𝑐ℎ𝑢𝑎𝑥𝑒𝑡,} } 27 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập  Cho đồ thị vô hướng 𝐺 =< 𝑉, 𝐸 > biểu diễn dạng ma trận kề hình bên Tìm cạnh cầu 𝐺? (Phương ND, 2013) 28 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài toán định chiều đồ thị (1/2)  Định nghĩa o o  Phép định chiều đồ thị vô hướng liên thông phép biến đổi đồ thị vô hướng liên thông thành đồ thị có hướng liên thơng mạnh Đồ thị vô hướng 𝐺 =< 𝑉, 𝐸 > gọi đồ thị định chiều dịch chuyển thành đồ thị có hướng liên thơng mạnh cách định chiều cạnh vô hướng thành cung có hướng Ví dụ (Phương ND, 2013) 29 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài toán định chiều đồ thị (2/2)  Định lý o  Đồ thị vô hướng liên thông 𝐺 =< 𝑉, 𝐸 > định chiều tất cạnh 𝑒 ∈ 𝐸 𝐺 cầu Một số vấn đề cần quan tâm o o o 30 Chứng minh đồ thị vơ hướng định chiều Viết chương trình kiểm tra đồ thị vơ hướng có định chiều hay không? Chỉ phép định chiều đồ thị vơ hướng CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Tóm tắt    Thuật toán duyệt theo chiều sâu bắt đầu đỉnh 𝑢 ∈ 𝑉, 𝐷𝐹𝑆(𝑢) Thuật toán duyệt theo chiều rộng bắt đầu đỉnh 𝑢 ∈ 𝑉, 𝐵𝐹𝑆(𝑢) Ứng dụng thuật toán 𝐷𝐹𝑆(𝑢) 𝐵𝐹𝑆(𝑢) o o o o o o o 31 Duyệt tất đỉnh đồ thị Duyệt tất thành phần liên thơng đồ thị Tìm đường từ đỉnh 𝑠 đến đỉnh 𝑡 đồ thị Kiểm tra tính liên thơng mạnh đồ thị Duyệt đỉnh trụ đồ thị Duyệt cạnh cầu đồ thị Kiểm tra đồ thị có định chiều hay không CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt Bài tập  Làm số tập giáo trình 32 CuuDuongThanCong.com http://www.ptit.edu.vn https://fb.com/tailieudientucntt ...Nội dung Thuật tốn tìm kiếm theo chiều sâu (Depth-First Search) - DFS) Thuật tốn tìm kiếm theo chiều rộng (Breadth-First Search - BFS) Một số ứng dụng DFS BFS    CuuDuongThanCong.com... https://fb.com/tailieudientucntt Nội dung Thuật tốn tìm kiếm theo chiều sâu (Depth-First Search) - DFS) Thuật tốn tìm kiếm theo chiều rộng (Breadth-First Search - BFS) Một số ứng dụng DFS BFS    CuuDuongThanCong.com... https://fb.com/tailieudientucntt Nội dung    Thuật tốn tìm kiếm theo chiều sâu (Depth-First Search) - DFS) Thuật tốn tìm kiếm theo chiều rộng (Breadth-First Search - BFS) Một số ứng dụng DFS BFS 15 CuuDuongThanCong.com http://www.ptit.edu.vn

Ngày đăng: 21/12/2022, 08:36

Xem thêm: