TÌM HIỂU VÀ TÍNH ĐỘ PHỨC TẠP CỦA THUẬT TOÁN DFS (Depth First Search)

19 5.9K 27
TÌM HIỂU VÀ TÍNH ĐỘ PHỨC TẠP  CỦA THUẬT TOÁN DFS (Depth First Search)

Đ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

TIỂU LUẬN MÔN HỌC PHƯƠNG PHÁP TOÁN CHO TIN HỌC

BỘ GIÁO DỤC ĐÀO TẠO --------------- TIỂU LUẬN MÔN HỌC PHƯƠNG PHÁP TOÁN CHO TIN HỌC Đề tài: TÌM HIỂU TÍNH ĐỘ PHỨC TẠP CỦA THUẬT TOÁN DFS (Depth First Search) TP. HCM, tháng 9/2013 MỤC LỤC I. MÔ TẢ THUẬT TOÁN DFS: .2 1. Giới thiệu thuật toán DFS: 2 1.1 DFS là gì ? 2 1.2 Ý tưởng của DFS: .2 1.3 Ví dụ về cách thực hiện của thuật toán DFS: .2 2. Ứng dụng của DFS: .8 3. Độ phức tạp của thuật toán DFS: 9 3.1 Mã giả: 9 3.2 Các lệnh thực hiện: 9 3.3 Trường hợp tốt nhất: .10 3.4 Trường hợp xấu nhất: .10 4. Cài đặt (C#): 10 5. Tính đúng đắng của thuật toán: 11 II. MÔ TẢ THUẬT TOÁN BFS: 12 1. Giới thiệu thuật toán BFS: 12 1.1 BFS là gì ? 12 1.2 Ý tưởng của BFS: .12 1.3 Ví dụ về cách thực hiện của thuật toán BFS: 12 2. Ứng dụng của thuật toán BFS: 17 3. Độ phức tạp của thuật toán BFS: 17 III. SO SÁNH DFS BFS: .18 TÀI LIỆU THAM KHẢO: 18 1 I. MÔ TẢ THUẬT TOÁN DFS: 1. Giới thiệu thuật toán DFS: 1.1 DFS là gì ? Thuật toán DFS (Depth-first search – Duyệt theo chiều sâu) là thuật toán duyệt (tìm kiếm) trên cây hoặc đồ thị. 1.2 Ý tưởng của DFS: Khởi đầu tại một nút gốc (hoặc một nút nào đó coi như gốc) duyệt sâu theo một nhánh con của nút góc (1) . Khi không còn nút con để duyệt ta quay lui trở về nút cha (2) , tiếp tục duyệt sâu các nút con còn lại của nút cha lập lại cho tới khi tìm được kết quả hoặc hết nút để duyệt. *Chú thích: (1) Chọn nút con trong nhiều nút con phụ thuộc vào cấu trúc cài đặt của đồ thị đưa vào. Việc lựa chọn nút con nào sẽ ảnh hưởng đến thứ tự duyệt cũng ảnh hưởng đến độ phức tạp của thuật toán. (2) Để quay lui được thì khi duyệt một nút có nhánh con ta phải lưu vào 1 ngăn xếp LIFO (Last in fist out – vào sau ra trước). Khi quay lui ta xác định nút cha bằng cách lấy nút vừa thêm vào ngăn sau cùng 1.3 Ví dụ về cách thực hiện của thuật toán DFS: Cho cây như sau: 2 Bước 1: đưa nút góc là [1] vào ngăn xếp bắt đầu duyệt cây. Bước 2: Duyệt [1] (vì [1] là nút thêm sau cùng vào ngăn xếp). Đưa tất cả các nút con của [1] vào ngăn xếp đánh dấu đã duyệt [1]. 3 Bước 3: duyệt [4] (vì [4] là nút thêm sau cùng vào ngăn xếp) . Đưa tất cả các nút con của [4] vào ngăn xếp đánh dấu đã duyệt [4]. Bước 4: duyệt [7] (vì [7] là nút thêm sau cùng vào ngăn xếp) . Đưa tất cả các nút con của [7] vào ngăn xếp đánh dấu đã duyệt [7]. 4 Bước 5: duyệt [8] (vì [8] là nút thêm sau cùng vào ngăn xếp) . Đánh dấu đã duyệt [8]. Do [8] không có nút con nên ta thực hiện quay lui bằng cách xoá [8] ra khổi ngăn xếp. Bước 6: duyệt [7] (vì [7] là nút thêm sau cùng vào ngăn xếp) . Do [7] đã được duyệt rồi nên ta chỉ xoá [7] khổi ngăn xếp. Bước 7: duyệt [4] (vì [4] là nút thêm sau cùng vào ngăn xếp) . Do [4] đã được duyệt rồi nên ta chỉ xoá [4] khổi ngăn xếp. 5 Bước 8: duyệt [3] (vì [3] là nút thêm sau cùng vào ngăn xếp) . Đưa tất cả các nút con của [3] vào ngăn xếp đánh dấu đã duyệt [3]. Bước 9: duyệt [6] (vì [6] là nút thêm sau cùng vào ngăn xếp) . Đánh dấu đã duyệt 6. Do 6 không có nút con nên ta thực hiện quay lui bằng cách xoá [6] ra khổi ngăn xếp. 6 Bước 10: duyệt [3] (vì [3] là nút thêm sau cùng vào ngăn xếp) . Do [3] đã được duyệt rồi nên ta chỉ xoá [3] khổi ngăn xếp. Bước 11: duyệt [2] (vì [2] là nút thêm sau cùng vào ngăn xếp) . Đưa tất cả các nút con của [2] vào ngăn xếp đánh dấu đã duyệt [2]. 7 Bước 12: duyệt [5] (vì [5] là nút thêm sau cùng vào ngăn xếp) . Đánh dấu đã duyệt [5]. Do [5] không có nút con nên ta thực hiện quay lui bằng cách xoá [5] ra khổi ngăn xếp. Bước 13: duyệt [2] (vì [2] là nút thêm sau cùng vào ngăn xếp) . Do [2] đã được duyệt rồi nên ta chỉ xoá [2] khổi ngăn xếp. Bước 14: duyệt [1] (vì [1] là nút thêm sau cùng vào ngăn xếp) . Do [1] đã được duyệt rồi nên ta chỉ xoá [1] khổi ngăn xếp. Bước 15: dừng lại vì ngăn xếp không còn nút (có thể nói là không còn nút chưa được duyệt) 2. Ứng dụng của DFS: -Xác định các thành phần liên thông của đồ thị: DFS duyệt tất cả các đỉnh có cùng thành phần liên thông. Nên số thành phần liên thông của đồ thị chính là số lần DFS. Ta sẽ dùng thêm biến đếm để đếm số thành phần liên thông. -Bài toán tìm đường đi giữa hai đỉnh của đồ thị: DFS duyệt lần lượt các đỉnh của đồ thị nên khi duyệt ta cùng gập 2 định cần xác định thì giữa 2 đỉnh trên có tồn tại đường đi. Vấn đề còn lại của bài toán là: Nếu tồn tại đường đi nối đỉnh s đỉnh t thì làm cách nào để viết được hành trình (thứ tự các đỉnh). -Sắp xếp tô-pô cho đồ thị. -Xác định các thành phần liên thông mạnh của đồ thị có hướng. 8 -Kiểm tra một đồ thị có phải là đồ thị phẳng hay không 3. Độ phức tạp của thuật toán DFS: 3.1 Mã giả: Input: Goc, NganXep; 1. NganXep. Push(Goc); 1 2. While (NganXep.Count > 0) 2n 2.1 Nut = NganXep.Peek(); 1 2.2 If (Nut.TrangThai) 1 2.2.1. NganXep.Pop(); 1 Else 1 2.2.3. Foreach (var Children in Nut.Children) ≤ n-1 2.2.3.1 NganXep.Push(Children); 1 EndForeach 2.2.4. NganXepKetQua.Push(Nut); 1 2.2.5. Nut.TrangThai = true; 1 EndIF End; Output: NganXepKetQua; 3.2 Các lệnh thực hiện: Xét đồ thị có n nút. Số phép toán thực hiện ở các dòng lệnh là: -Dòng lệnh 1: có 1 phép toán. -Dòng lệnh 2: lệnh while thực hiện tổng cộng 2n lần n lần duyệt tiến n lần để quay lui. -Dòng lệnh 2.1: có 1 phép toán. -Dòng lệnh 2.2: Hàm if chia giải thuật thành 2 giai đoạn. Giai đoạn duyệt gồm n lần giai đoạn quay lui n lần. Mỗi lần lập while hàm if chạy 1 lần. -Dòng lệnh 2.2.1: có 1 phép toán. -Dòng lệnh 2.2.3: mỗi lần lập của while thì dòng lệnh Foreach có thể lập từ 0 cho đến ≤ n-1. Do đây là vòng lập để đưa các nút con của nút cha vào ngăn xếp do đó ta 9 . DỤC VÀ ĐÀO TẠO --------------- TIỂU LUẬN MÔN HỌC PHƯƠNG PHÁP TOÁN CHO TIN HỌC Đề tài: TÌM HIỂU VÀ TÍNH ĐỘ PHỨC TẠP CỦA THUẬT TOÁN DFS (Depth First Search). MÔ TẢ THUẬT TOÁN DFS: 1. Giới thiệu thuật toán DFS: 1.1 DFS là gì ? Thuật toán DFS (Depth- first search – Duyệt theo chiều sâu) là thuật toán duyệt (tìm kiếm)

Ngày đăng: 21/11/2013, 23:21

Từ khóa liên quan

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

Tài liệu liên quan