1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phương pháp nhánh và cận cài đặt trên cây nhị phân.DOC

20 515 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

Định dạng
Số trang 20
Dung lượng 253 KB

Nội dung

Phương pháp nhánh và cận cài đặt trên cây nhị phân.DOC tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập...

Trang 1

Giới thiệu chung

I Đặt vấn đề:

Để tìm kiếm lời giải của một bài toán ta có nhiều phương pháp khác nhau Nếu thể hiện bài toán dưới dạng đồ thị trong không gian trạng thái thì việc tìm lời giải cho bài toán là tìm đường đi trên bản đồ từ nút xuất phát đã cho đến một đích đích xác định

Có nhiều thuật giải tìm kiếm trên đồ thị đã được xây dựng, từ

những thuật giải vét cạn đơn giản như tìm theo chiều sâu, tìm theo chiều

rộng cho đến những thuật giải cải tiến ưu việt hơn, tập trung vào những

đường đi nhiều triển vọng hơn cả Trong bản luân văn này em xin được

trình bầy một trong những phương pháp đó là “phương pháp nhánh và

cận” Phương pháp nhánh cận là phương pháp tìm kiếm tối ưu mà không

tốn nhiều công sức và còn hoàn thiện hơn khi được cài đặt trên “cây nhị

phân” Việc triển khai tìm kiếm trên cây nhị phân là một cấu trúc dữ liệu

quen thuộc được xây dựng hoàn chỉnh sẽ là một thử nghiệm lý thú nên xem xét

I.2 ý tưởng:

Phương pháp tìm kiếm nhánh và cận là một phương pháp tìm kiếm tối ưu, bản thân cây nhị phân là một cấu trúc dữ liệu rất quen thuộc

và tìm kiếm trên đó là một việc đơn giản nhánh chóng, tìm kiếm trên cây nhị phân là phương pháp tìm kiếm nhanh nhất chưa có phương pháp nào nhanh hơn chính vì tại so ta không kếy hợp 2 phương pháp này để có thể đưa ra 1 phương pháp tìm kiếm hay hơn, nhanh hơn ,tối ưu hơn đó chính

là ý tưởng để em làm bản luân văn nay

Để có được những kết quả trong luân văn sinh viên đã nhận được

sự hướng dẫn tận tình của thầyd giáo TS Nguyễn Đình Hoá - Em xin chân thành cám ơn sự hướng dẫn của thầy trong những bước đầu nhgiên cứu

Bản luận văn này đã được hoàn thành nhưng với trình độ kiến thức và kinh nhiệm còn hạn chế nên không thể tránh khỏi những thiếu sót nên em rất mong được sự chỉ bảo của các thầy cô và đóng góp ý kiến

để em có thể hoàn thiện về mặt kiến thúc và tiếp tục nghiên cứu phát triển bản luận văn này được hoàn thiện hơn

Bản luân văn bày dài 87 trang, Ngoài phụ lục thì bao gồm ba chương Sau đây là tóm tắt nội dung chính của luân văn

Trang 2

Chương I

Phương pháp tìm kiếm nhánh và cận

I Biểu diễn bài toán trong không gian trạng thái

I.1 Không gian trạng thái:

Để biểu diễn đầy đủ một bài toán trong phép biểu diễn không gian trạng thái cần phải xác định 4 yếu tố:

- Trạng thái ban đầu

- Các toán tử chuyển trạng thái: Từ một trạng thái đã cho đến một trạng thái kế tiếp

- Trạng thái đích

- Chi phí kèm theo mỗi toán tử chuyển trạng thái (có thể có)

Toán tử : phép biến đổi trạng thái được biểu diễn hoặc coi như hàm,

ánh xạ từ không gian trạng thái vào chính nó Hoặc các quy tắc sản xuất(Production rules) dưới dạng Si S j

Ví dụ: Đánh cờ có rất nhiều toán tử chuyển trạng thái vì nhiều quân, nhiều cách đi

Mô tả các trạng thái: Các xâu ký hiệu, véctơ, mảng một chiều, hai chiêu, cây, danh sách

Ví dụ:

Bài toán 8 ô chữ số: Mỗi trạng thái là một ma trận (Aij)3*3

Bài toán người bán hàng: Trạng thái là xâu ký hiệu, dẫy liên tiếp các phố

đã qua

Một cách hình thức có thể biểu diễn bài toán như sau:

Prob(S, O, So, Sđ)

S : (States) Không gian trạng thái bằng tất cả các trạng thái có thể có của bài toán

O : Các toán tử chuyển trạng thái

So : Trạng thái đầu

Sđ : Trạng thái đích

Biểu diễn bằng đồ thị:

Cho đồ thị G=(N,A) :

N: Nút (node)

A : Là cung (a,b) có hướng

Ta có thể hiểu:

Nút : là các trạng thái

Cung : Toán tử chuyển trạng thái (Cha chuyển sang con)

Nếu trạng thái đầu là gốc của cây thì lời giải là một đường đi từ gốc n đến nút đích

Trang 3

- Bài toán 8 số, 9 ô.

Toán tử truyển trạng thái là di chuyển ô trống

Giải bài toán : là tìm đường đi từ trạng thái đầu đến đích

2 8 3

1 6 4

7 5

2 8 3

1 6 4

7 5

2 8 3

1 4

7 6 5

2 8 3

1 6 4

7 5

2 8 3

1 4

7 6 5

2 3

1 8 4

7 6 5

2 8 3

1 4

7 6 5

8 3

2 1 4

7 6 5

2 8 3

7 1 4

6 5

2 3

1 8 4

7 6 5

2 3

1 8 4

7 6 5

1 2 3

8 4

7 6 5

1 2 3

7 8 4

6 5

1 2 3

8 4

7 6 5

Trang 4

Chương 2

I PHƯỜNG PHÁP TÌM KIẾM LỜI GIẢI:

II.1.MÔ HÌNH TRÊN ĐỒ THỊ:

Nếu biểu diễn bài toàn thành đồ thị trong không gian thạng thái lời giải của bài toán là tìm đương đi trên một đồ thị, từ một điểm xuất phát ứng với trạng thái đầu đến một điểm đích, ứng với trạng thái kết thúc của bài toán

Mỗi nút → 1 trạng thái của bài toán

Tuy nhiên tại mỗi nút còn cần có nhiều thông tin khác nữa thể hiện quan

hệ cha, con độ sâu, chi phí (path cost), trong khi trạng thái không thể hiện rõ những điều đó

Các cung là một phép toán, một quan hệ để chuyển từ trạng thái này sang trạng thái khác

Thuật giải tổng quát:

 Xuất phát từ nút trạng thái ban đầu:

Lặp:

- Nếu không có nút để triển khai tiếp → thất bại (vô nghiệm)

- Trái lại: Chọn nút để triển khai tiếp theo một quy tắc bằng một chiến lược nào đó để tìm ra đích (nếu có):

- Kiểm tra trạng thái đích chưa:

- Đúng → lời giải

- Sai : Khai triển nút và thêm các nút mới vào cây tìm kiếm

Hết lặp.

Các chiến lược tìm kiếm

Được quyết định bởi:

- Quy tắc xác định thứ tự các nút sẽ tạo mới

- Quy tắc xắp xếp các nút con của nút đang xét vào danh sách chờ

Đánh giá một chiến lược tìm kiếm

Các chỉ tiêu để xét một chiến lược tìm kiếm:

Thành công: Có cho phép tìm ra đích không (nếu có đích).

Độ phức tạp thời gian: Số nút cần phải tao mới, sinh ra.

Độ phức tạp không gian: Số nút cần phải ghi nhớ trong bộ nhớ để

thực hiện vào việc tìm kiếm

Trang 5

 Tối ưu: Có cho phép tìm ra được đường đi ngắn nhất từ gốc đến

đích hay không ⇔ lời giải tối ưu

Tổng quan hơn, nếu mỗi cung có một trong số là chi phí thì có tìm ra

đường đi (lời giải) với chi phí là min.

II.2 CÁC PHƯƠNG PHÁP TÌM KIẾM LỜI GIẢI:

Tìm kiếm theo chiều 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 Nếu không đi tiếp được, gọi là đến gõ cụt, hệ thông quay lại một mức trên

cây và tìm theo hương khác Hành động này gọi là quay lui

Quá trình duyệt cây đi theo các nhánh cho đến nút lá nào

đó, sau đó quay lui về một đỉnh nào đó để sang nhánh khác

Đường đi không nhất thiết là ngắn nhất

- Không quay về trạng thái trước đó để tránh vòng xoay

vô hạn

Ưu điểm:

- Lời giải được đảm bảo :

Khai thác tận cùng không gian bài toán để tìm lời giải Sẽ tìm ra được lời giải nếu có

- Nhanh đến lời giải :

Lời giải ở rất sâu →tiết kiệm thời gian

- Luôn tập trung vào đích

- Cứng nhắc Nếu chọn nút ban đầu không thích hợp sẽ 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: Với bài toán có không

gian lời giải lớn Có thể không đến lời giải trong thời gian vừa phải Cho dù khi ta giới hạn độ sâu là D, thuật toán luôn dừng, nhưng với các đỉch ĐICH có độ sâu lớn hơn D thì nó đưa ra thông báo “không thành công” mà điều đó ta không mong muốn

- Không hiệu quả với các bài toán tầm thường: Đi theo một nhánh để

nhận được lời giải không mấy giá trị thì đó là không hiệu quả

B1

Hình minh hoạ tìm kiếm theo chiều sâu

Bắt

đầu

C1

ĐICH

A

B2

Trang 6

II.2.2.TÌM KIẾM THEO CHIỀU RỘNG:

Là tìm kiếm lời giải trên tất cả các nút của một mức trong không gian bài toán trước khi chuyển sang các nút ở mức tiếp theo

Được bắt đầu từ mức thứ nhất trong bài toán nếu không tìm thấy lời giải ở mức này nó chuyển xuống mức tiếp theo Đến khi định vị được lời giải, nếu có

- Giải được: vét cạn không gian bài toán→ tìm thấy lời giải nếu có

- Không bỏ qua các lời giải tầm thường, dễ thấy

- Thực hiện theo một thuật toán đã định trước Máy móc không có thông tin hỗ trợ

→ sẽ không nhận

ra ngay lời giải

→ dễ bỏ qua mất lời giải

không gian bài toán kích thước lớn: không đủ thời gian để vét cạn

các lời giải Nó phải đối diện với nhu cầu:

- Cần nhiều bộ nhớ, theo số nút cần lưu trữ

- Cần nhiều công xử lý các nút, nhất khi các nhánh cây dài, số nút tăng

- Dễ thực hiện các thao tác không thích hợp, thừa

- Không hiệu quả với lời giải ở sâu:

- Giao diện với người dùng không thân thiện

II.2.3) PHƯƠNG PHÁP BEST-FIRST SEARCH:

Các phương pháp tìm kiếm trên là những phương pháp tìm kiếm không

có thông tin bổ xung hay là tìm kiếm một cách mù quáng và chỉ dùng thông tin có từ ban đầu Đối lập với các phương pháp trên là những phương pháp tìm kiếm có xét đoán Ta xét hai phương pháp sau

Best-First search

Tư tưởng thuật toán :

……

B1

Bắt đầu

C1

…….

ĐICH

A

B2

……

…….

……

Hình minh hoạ tìm kiếm theo chiều rộng

Trang 7

Các phương pháp đã xét trên thực chất là tìm kiếm vét cạn không gian bài toán và dừng khi đã tìm thấy đích

Mục đích của chúng ta là:

- Tìm ra lời giải = đến đích

- Nhanh nhất = đường ngắn nhất

Theo ngôn ngữ đồ thị bài toán trong không gian trang thái có nghĩa là:

Tìm đường đi ngắn nhất(rẻ nhất) từ nút đầu đến nút đích.

Ta có thể hiểu:

Best-First search = Xét đoán để đi theo nhánh nào nhiều triển vọng đến

đích hơn cả

- Xây dựng hàm đánh giá, gắn cho mỗi nút một trọng số

- Chọn nút nào có triển vọng lớn nhất (hoặc chi phí bé nhất) để khai triển tiếp

- Chọn nút có triển vọng nhất (hay chi phí nhỏ nhất)

- Xếp hàng nút con có trọng số lớn nhất vào đầu danh sách đợi

Nghĩa là: chiến lược xếp hàng có ưu tiên “triển vọng” chứ không phải

theo vị trí của nút trong cây đồ thị của bài toán

Hàm đánh giá thô sơ nhất

Xét nút “có vẻ” triển vọng nhất

Hàm đánh giá = hàm chi phí

II.3) PHƯƠNG PHÁP TÌM KIẾM NHÁNH VÀ CẬN

Một cách cho phép tìm kiếm các đường tối ưu mà không tốn nhiều công sức là dùng phương pháp tìm kiếm nhánh và biên Tìm kiếm nhánh và biên cho phép mởi rộng đường biên có giá trị thấp Nội dung đơn giản

Thủ tục tìm kiếm nhánh và biên:

1 Tạo hàng đợi có một phần tử là nút gốc, có độ dài bằng 0

2 Cho đến khi đương đầu tiên trong hàng đợi kết thúc tại nút đích hay hàng đợi rỗng, thực hiện:

Rút đường đầu tiên ra khỏi hàng đợi; tạo các đường mới bằng cách nới đường đầu tiên về phía lân cận của nút đích.

Bỏ đi các đường xoay vòng.

Bổ sung các đường mới còn lại, nếu có, vào hàng đợi.

Sắp xếp lại bộ hàng đợi theo độ dài đường đi, các đường giá rẻ lên trước

3 Nếu thấy nút đích thông báo hoàn thành, nếu không thì thông báo thất bại

Tuy các số tìm kiếm không ít nhưng thủ tục này tránh được việc vét cạn không gian lời giải

Trang 8

Ta có thể bổ sung các đánh giá để tăng hiệu quả tìm kiếm: Ta có thể

thêm ước đoán về đoạn đương còn lại, chưa đi cũng như khoảng cách

đã đi được

Nhìn tổng thể:

Đánh gía cả con đường(e) = độ dài đoan đã đi(d) + đánh giá đoàn con lại(e’)

Việc đánh giá của phần còn lại không dễ dàng, đánh giá càng chính xác thì càng nhận định đúng về đương tối ưu, nhưng thường thì không hoàn hảo, và việc đánh giá cao hơn bước thực sẽ làm ta bỏ qua đưòng đi tốt hơn Nên ta dùng đánh giá thấp hơn giá thực tế để không bị bỏ mất đường đi

Đánh giá thấp con đường(u) = độ dài đoạn đã đi(d) + đánh giá thấp đoạn còn lại(u’)

Nếu người ta phát hiện con đường do phát triển các nút theo đánh giá thấp, không phảỉ xét các đường có đánh giá cao hơn đường này, nếu tất các đoạn còn lại có thể đánh giá thấp thì không thể sai lầm được

Ví dụ: Đường đi từ S đến A được đánh giá là 13.4….

Với đường SA có đánh giá cao hơn đường SD(13.4 > 12.9) vậy D được chọn để phát triển …, chọn

E để phát triển …, chọn F để phát triển

Vậy qua giải pháp vừa rồi ta tiết kiệm được nhiều công sức ta viết lại thủ tục Nhánh và Biên với nội dung cải tiến là dòng in đậm

Thủ tục tìm kiếm nhánh và biên(cải biến):

1 Tạo hàng đợi có một phần tử là nút gốc, có độ dài bằng 0

2 Cho đến khi đường đầu tiên trong hàng đợi kết thúc tại nút đích hay hàng đợi rỗng, thực hiện:

Rút đường đầu tiên ra khỏi hàng đợi; tạo các đường mới bằng cách nới đường đầu tiên về phía lân cận của nút đích.

Bỏ đi các đường xoay vòng.

Bổ sung các đường mới còn lại, nếu có, vào hàng đợi.

Sắp xếp lại toàn bộ hành đợi theo tổng độ dài đường đi và đánh giá biên thấp đối với đánh giá đoạn đường còn lại, các đoạn

đường giá rẻ lên trước

3 Nếu thấy nút đích thông báo hoàn thành, nếu không thì thông báo thất bại

Việc đánh giá chính xác được khoảng cách đoạn đương còn lại là thuận lợi cho thủ tục Tuy nhiên, vì không phải bao giờ cũng thực hiện được

S

A

G 17.7

13.0 12.9

12.9

19.4

Trang 9

điều mong muốn nên người ta mới phải dùng đánh giá thấp hơn để thay thế, việc đưa ra đánh giá biên thấp còn tốt hơn là không đưa ra đánh giá nào mà cho tất cả các ước lượng các đoạn đường chưa đi là 0

nguyên tắc quy hoạch động :

Giả sử đường đi từ nút bắt đầu là S qua nút trung gian I không ảnh hưởng gì đến việc chọn các đường từ I đến đích G và ta thấy:

Khoảng cách tối thiểu (SIG) = khoảnh cách tối thiểu (SI) +

khoảnh cách tối thiểu ( IG)

Nguyên tắc quy hoach động nói rằng: “ Khi tìm đường tốt nhất từ S đến

G có thể bỏ qua các đường từ S đên nút trung gian I, mà chỉ giữ lại một đường có độ dài nhỏ nhất”

Nguyên tắc quy hoach động:

“Cách tốt nhất qua một nơi trung gian là đường tốt nhất tới nó kể từ nơi xuất phát, nối với đường tốt nhất từ nó tới đích, không cần thiết tìm các đường khác đến nơi trung gian ấy

Thủ tục tìm kiếm nhánh và cận:

1 Tạo hàng đợi có một phần tử là nút gốc, có độ dài bằng 0

2 Cho đến khi đường đầu tiên trong hàng đợi kết thúc tại nút đích hay hàng đợi rỗng, thực hiện:

Rút đường đầu tiên ra khỏi hàng đợi; tạo các đường mới bằng cách nới đường đầu tiên về phía lân cận của nút đích.

Bỏ đi các đường xoay vòng.

Bổ sung các đường mới còn lại, nếu có, vào hàng đợi.

Nếu hai hay nhiều đương gặp nút chung, xoa tất cả các đường này và chỉ để lại đường gặp nút chung với đánh giá tối thiểu Sắp xếp lại bộ hàng đợi theo độ dài đường đi, các đường giá rẻ lên trước.

3 Nếu thấy nút đích thông báo hoàn thành, nếu không thì thông báo thất bại

Trang 10

CHƯƠNG II CÂY NHỊ PHÂN-THIẾT KẾ VÀ CÀI ĐẶT I.PHÂN TÍCH THIẾT KẾ CÂY NHỊ PHÂN

I.1.PHÂN TÍCH CẤU TRÚC DỮ LIỆU

Mô đun cây nhị phân trong phần này sẽ cài đặt và định nghĩa theo ngôn ngữ lập trình Turbo C Yêu cầu đặt ra là phải thiết kế tính đầy đủ không thừa, tức là mỗi thành phần của một nút đều phải có ý nghĩa quyết định nào đó Để làm được điều này ta phải có sự phân tích đúng và chính xác

Định nghĩa cây: Cây là 1 đồ thị không có chu trình, trong đó chọn ra 1

đỉnh gọi là gốc hay cây là 1 tập hợp các đỉnh trong đó có 1 đỉnh đặc biệt gọi là gốc, các đỉnh còn lại có quan hệ "cha con" Mỗi nút không có quá

2 con

Cây nhị phân còn được định nghĩa

theo kiểu đệ quy như sau:

Cây nhị Phân = Cây rỗng

Object = Dưliệu

Cây nhị phân : Cây con trái Cây nhị phân : Cây con phải

Cây rỗng là cây không chứa nút nào và biểu thị bằng một đối tượng đặc biệt NULL của ngôn ngữ

→ Cấu trúc của mỗi nút gồm ba trường, một trường dữ liệu và hai trường là con trỏ trái và con trỏ phải trường dữ liệu là một trường kiểu

con trỏ void.

Như vậy cấu trúc tối thiểu mỗi nút sẽ được mô tả như sau:

Struct Node

{

Node *Left Node *Right

Void *Object

}

Cây con Bên trái

Cây con Bên phải Gốc

Ngày đăng: 11/05/2015, 13:08

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w