Quy tắc ″Đi từ trên xuống dưới ″:

Một phần của tài liệu tiểu luận đề tài a phương pháp quy hoạch động (Trang 31 - 33)

II. Vấn đề công thức truy hồ

3.Quy tắc ″Đi từ trên xuống dưới ″:

Từ dòng thứ i bạn có thể đi ngang sang trái hoặc sang phải trên dòng đó và đi xuống dưới dòng thứ (i+1) theo các hướng chéo hoặc thẳng đứng.

Thuật giải chung

1.Bước 0: Mô hình hoá:

Nếu bài toán không phải là dạng tối ưu trên một bảng hai chiều, ta phải tìm cách mô hình hoá để đưa nó về dạng này.

2.Bước 1: Xây dựng các quy tắc tính trọng số:

Xin lưu ý rằng điều kiện tối ưu ở đây đã có sẵn ngay từ đầu.

Tuỳ theo dạng của bài toán ta sẽ có các quy tắc tính trọng số khác nhau. Khi đi xem xét với các bài toán cụ thể ta sẽ rõ hơn điều này.

3.Bước 2: Xây dựng quy tắc ″đi ″:

Đôi khi quy tắc đi chưa có sẵn mà phải tự người lập trình đặt ra cho phù hợp với cách mô hình hoá của mình. Vấn đề này thuộc vào tư duy của mỗi người nên rất phong phú và phức tạp.

4.Bước 3: Xây dựng công thức tối ưu:

Đây là bước quan trọng nhất của bài toán. Để xây dựng được công thức, ta cần phải dựa vào các quy tắc đi và tính trọng số.

5.Bước 4: Duyệt phương án tối ưu:

Đây là bước cuối cùng để ghi dữ liệu tìm được ra FILE kết quả.

Bước này tương đối dễ dàng vì trong qúa trình quy hoạch, Chúng ta đã lưu các trạng thái của từng ô đi qua, đa phần là lưu vị trí của ô đứng trước ô này trên đường đi tối ưu.

Một số bài toán

Trước khi đi xét các bài toán cụ thể, chúng ta quy ước rằng mảng A[1..M,1..N] là mảng lưu dữ liệu ban đầu. Mảng B[1..M,1..N] là mảng dùng để quy hoạch. Với những bài toán với dữ liệu đầu vào là các mảng một chiều thì ta sẽ dùng ngay các dữ liệu đó mà không cần xây dựng mảng A.

Các bài toán quen thuộc như bài toán cái túi,bài toán tìm đoạn dãy con đơn điệu dài nhất,bài toán cây xăng,.v…v. ta sẽ không xét đến ở đây nữa.

1.Bài toán ″Con kiến ″:

Trên một sân hình chữ nhật MxN, được chia thành các ô vuông đơn vị, mỗi ô chứa một lượng thức ăn. Một con kiến xuất phát từ ô (1,1) muốn đi qua sân để đến dòng thứ M. Con kiến chỉ có thể đi theo một dòng chia nhỏ trên sân ứng với một dòng của bảng chữ nhật hoặc đi theo trên một cột của sân. Hãy chỉ ra đường đi giúp con kiến có được nhiều thức ăn nhất.

FOOD.INP

3 5

(Trong tất cả các bài toán dưới đây, dòng đầu bao giờ cũng là hai giá trị M và N)

FOOD.OUT

45 (lượng thức ăn Max)

(1,1) (2,1) (2,2) (2,3) (3,3)

Thuật giải

- Bước 0: Bỏ qua vì đây là bài toán đúng dạng

- Bước 1: Trọng số ở đây là lượng thức ăn trên mỗi ô.

- Bước 2: Quy tắc đi:

- Bước 3: Công thức quy hoạch

B[i,j] là lượng thức ăn lớn nhất đi từ ô (1,1) đến ô (i,j) B[1,j] = A[1,j] với j = 1..N (adsbygoogle = window.adsbygoogle || []).push({});

B[i,1] = A[i,1]+B[i-1,1] với i = 2..M

B[i,j] =Max{B[i-1,j],B[i,j-1]} + A[i,j] với i = 2..M và j= 2..N

Một phần của tài liệu tiểu luận đề tài a phương pháp quy hoạch động (Trang 31 - 33)