Già Làng
Thú CƯng :
Số bài viết : 373 Điểm : 2200708 Được cảm ơn : 53 Ngày sinh : 20/10/1987 Tham gia ngày : 16/03/2010 Tuổi : 37 Đến từ : Bình Dương Ngề nghiệp : Sinh Viên Chăm ngôn : Cơm Cha - Áo Mẹ!
| Tiêu đề: Phân biệt giải thuật tìm kiếm sâu và sâu dần... 15/10/2010, 09:49 | |
| I. GIẢI THUẬT TÌM KIẾM SÂU:1. Kỹ thuật tìm kiếm sâu Tìm kiếm sâu trong không gian bài toán được bắt đầu từ một nút rồi tiếp tục cho đến khi hoặc đến ngõ cụt hoặc đến đích. Tại mỗi nút có luật trong tài, chẳng hạn, “đi theo nút cực trái”, hướng dẫn việc tìm. Nếu không đi tiếp được, gọi là đến ngõ cụt, hệ thống quay lại một mức trên đồ thị và tìm theo hướng khác, chẳng hạn, đến nút “sát nút cực trái”. Hành động này gọi là quay lui. Thuật toán tìm kiếm theo chiều sâu được hình dung như việc khảo sát một cây bắt đầu từ gốc đi theo mọi cành có thể được, khi gặp cành cụt thì quay lại xét cành chưa đi qua. - Ở bước tổng quát, giả sử đang xét đỉnh i, khi đó các đỉnh kề với i có các trường hợp: + Nếu tồn tại đỉnh j kề i chưa được xét thì xét đỉnh này (nó trở thành đỉnh đã xét) và bắt đầu từ đó tiếp tục quá trình tìm kiếm với đỉnh này.. + Nếu với mọi đỉnh kề với i đều đã được xét thì i coi như duyệt xong và quay trở lại tìm kiếm từ đỉnh mà từ đó ta đi đến được i.
2. Giải thuật Input: Cây/Đồ thị G = (V,E) với đỉnh gốc là n0 (trạng thái đầu) Tập đích Goals Output: Một đường đi p từ n0 đến một đỉnh n* in Goals Method: Sử dụng hai danh sách hoạt động theo nguyên tắc LIFO (Stack) OPENLIST và CLOSELIST
- Code:
-
openList.Push(n0); while (!openList.IsEmpty()) { node = openList.Pop(); if (node.Equals(n*)) { result = true; break; }closeList.Push(node); for (n in Tn(Node)) { if (!openList.InList(n) && !closeList.InList(n)) { openList.Push(n); BeforeOfNode(n, node);////node trước của n là node trong quá trình tìm đường đến đích } } }if (result) { DisplayResult(); } else { NotFound(); } 3. Ví dụ Cho đồ thị như hình vẽĐỉnh xuất phát là (1), đỉnh đích là (11)Các bước chi tiết thực hiện giải thuật[You must be registered and logged in to see this link.]Kết quả đường đi là:4. Ưu và nhược điểm của phương pháp tìm kiếm sâuƯu điểm:- Nếu bài toán có lời giải, phương pháp tìm kiếm sâu bảo đảm tìm ra lời giải. - Kỹ thuật tìm kiếm sâu tập trung vào đích, con người cảm thấy hài lòng khi các câu hỏi tập trung vào vấn đề chính. - Do cách tìm của kỹ thuật này, nếu lời giải ở rất sâu, kỹ thuật tìm sâu sẽ tiết kiệm thời gian. Nhược điểm: - Tìm sâu khai thác không gian bài toán để tìm lời giải theo thuật toán đơn giản một cách cứng nhắc. Trong quá trình tìm nó không có thông tin nào hổ trợ để phát hiện lời giải. Nếu chọn nút ban đầu không thích hợp có thể không dẫn đến đích của bài toán. - Không phù hợp với không gian bài toán lớn, kỹ thuật tìm kiếm sâu có thể không đến lời giải trong khoảng thời gian vừa phải. II. GIẢI THUẬT TÌM KIẾM SÂU DẦN: 1. Kỹ thuật tìm kiếm sâu dần Kỹ thuật tìm kiếm sâu dần là thực hiện việc tìm kiếm với độ sâu ở mức giưói hạn d nào đó. Nếu không tìm ra nghiệm ta tăng độ sâu lên d+1 và lại tìm kiếm theo độ sâu tới mức d+1. Quá trình trên được lặp lại với d lần lượt là 1, 2,…đến độ sâu max nào đó. Kỹ thuật tìm kiếm sâu dần thường được thực hiện khi cây tìm kiếm chứa nhánh vô hạn, và nếu sử dụng tìm kiếm theo độ sâu ta có thể mắc kẹt ở một nhánh nào đó (thuật toán không dừng) và không tìm ra nghiệm 2. Giải thuật Thuật toán tìm kiếm sâu dần sử dụng thuật toán tìm kiếm sâu hạn chế như thủ tục con. Đó là thủ tục tìm kiếm theo chiều sâu nhưng chỉ tới độ sâu d nào đó rồi quay lên.
- Code:
-
bool result = false; openList.Push(n0); deepOfNode(no, 0);//độ sâu của đỉnh xuất phát là 0 while (!openList.IsEmpty()) { node = openList.Pop(); if (node.Equals(n*)) { result = true; break; }closeList.Push(node); int deep = deepOfNode[node]; if (deep < limitedDeep) { for (n in Tn(node)) { if (!openList.InList(n) && !closeList.InList(n)) { openList.Push(n); BeforeOfNode(n, node); deepOfNode.Add(n, deep + 1);//độ sâu của đỉnh n } } } }if (result) { DisplayResult(); } else { NotFound(); } 3. Ví dụ Cho đồ thị như hình vẽĐỉnh xuất phát là (1), đỉnh đích là (11), độ sâu giới hạn là 3 Các bước chi tiết thực hiện giải thuậtKết quả |
|
hotboy
Thú CƯng :
Số bài viết : 705 Điểm : 1043 Được cảm ơn : 9 Ngày sinh : 21/03/1990 Tham gia ngày : 13/05/2010 Tuổi : 34 Đến từ : BDU
| Tiêu đề: Re: Phân biệt giải thuật tìm kiếm sâu và sâu dần... 15/10/2010, 12:20 | |
| vất vả cho ông già quá |
|
mailoc
Số bài viết : 1 Điểm : 1 Được cảm ơn : 0 Ngày sinh : 12/08/1994 Tham gia ngày : 20/12/2014 Tuổi : 30 Đến từ : thái bình
| Tiêu đề: Re: Phân biệt giải thuật tìm kiếm sâu và sâu dần... 20/12/2014, 15:12 | |
| c ơi cho t hỏi nếu hết chiều sâu 3 mà không tói đích thì xét nút gốc mới rùi tìm lại như trên ak |
|
Sponsored content
| Tiêu đề: Re: Phân biệt giải thuật tìm kiếm sâu và sâu dần... | |
| |
|