Phương pháp chung của qui hoạch động

Một phần của tài liệu [Giáo trình] Phân tích thiết kế thuật toán và đánh giá độ phức tạp của giải thuật - ĐH Sư phạm Hà Nội (Trang 45 - 46)

Trước khi có được các bước cụ thể để xây dựng thuật toán qui hoạch động, ta có thể tiến hành các phân tích sau đây:

• Phân rã: Tìm cách chia bài toán cần giải thành những bài toán con nhỏ hơn có cùng dạng với bài toán ban đầu thành các bài toán có kích thước nhỏ hơn, sao cho bài toán con kích thước nhỏ nhất có thể giải một cách trực tiếp. Bản thân bài toán xuất phát có thể coi là bài toán con có kích thước lớn nhất trong họ các bài toán con này.

• Ghi nhận lời giải: Chọn cách lưu trữ lời giải của các bài toán con vào một bảng để có thể dùng lại lời giải của chúng cho các bài toán con cỡ lớn hơn.

• Tổng hợp lời giải: Tìm cách truy vết, nghĩa là lần lượt đi từ lời giải của các bài toán con kích thước nhỏ hơn, tìm cách xây dựng lời giải của bài toán kích thước lớn hơn, cho đến khi thu được lời giải của bài toán xuất phát (là bài toán con có kích thước lớn nhất). Kỹ thuật giải các bài toán con của quy hoạch động là quá trình đi từ dưới lên (bottom – up) là điểm khác quan trọng với phương pháp chia để trị, trong đó các bài toán con được trị một cách đệ quy (top – down).

Yêu cầu quan trọng nhất trong việc thiết kế thuật toán nhờ quy hoạch động là thực hiện khâu phân rã, tức là xác định được cấu trúc của bài toán con. Việc phân rã cần được tiến hành sao cho không những bài toán con kích thước nhỏ nhất có thể giải được một cách trực tiếp mà còn có thể dễ dàng việc thực hiện tổng hợp lời giải.

Không phải lúc nào việc áp dụng phương pháp quy hoạch động đối với bài toán tối ưu hoá cũng dẫn đến thuật toán hiệu quả. Có hai tính chất quan trọng mà một bài toán tối ưu cần phải thoả mãn để có thể áp dụng quy hoạch động để giải nó là:

Cấu trúc con tối ưu: Tính chất này còn được gọi là tiêu chuẩn tối ưu và có thể phát biểu như sau: Để giải được bài toán đặt ra một cách tối ưu, mỗi bài toán con cũng phải được giải một cách tối ưu. Mặc dù sự kiện này có vẻ là hiển nhiên, nhưng nó thường không được thoả mãn do các bài toán con là giao nhau. Điều đó dẫn đến là một lời giải có thể là “kém tối ưu hơn” trong một bài toán con này nhưng lại có thể là lời giải tốt trong một bài toán con khác.

Số lượng các bài toán con phải không quá lớn. Rất nhiều các bài toán NP – khó có thể giải

được nhờ quy hoạch động, nhưng việc làm này là không hiệu quả do số lượng các bài toán con tăng theo hàm mũ. Một đòi hỏi quan trọng đối với quy hoạch động là tổng số các bài toán con cần giải là không quá lớn, cùng lắm phải bị chặn bởi một đa thức của kích thước dữ liệu vào. Sau bước phân rã, có thể hình thức hóa chi tiết hơn các bước giải bài toán qui hoạch động như sau:

Bước 1: Đặt giả thiết về hàm qui hoạch động. Hàm qui hoạch động là hàm hình thức hóa cho bài toán con tổng quát cần định lượng, thể hiện trực tiếp hoặc gián tiếp yêu cầu của cho bài toán đã cho. Mục đích của bước này là nêu được ý nghĩ của hàm qui hoạch động mà chưa cần phải tìm dạng biểu diễn cụ thể của nó như thế nào.

Bước 2: Tìm nghiệm các bài toán con nhỏ nhất. Ở bước này ta tính hàm qui hoạch động tại các trường hợp đơn giản nhất hoặc các trường hợp đặc biệt mà dễ dàng tính toán được.

Bước 3: Xây dựng công thức qui hoạch động, tìm nghiệm cho bài toán con tổng quát. Đây

là bước quan trọng nhất của qui hoạch động, thu được nhờ quá trình phân rã. Tại đây ta cần định nghĩa cụ thể hàm qui hoạch động, tức là tìm dạng biểu diễn của nó. Nói cách khác, ta cần xây dựng được công thức truy hồi để tìm nghiệm của bài toán con tổng quát dựa vào tập nghiệm của các bài toán con cỡ nhỏ hơn đã giải, công thức này gọi là công thức qui hoạch động.

Khi đã định nghĩa được công thức qui hoạch động thì tức là ta đã giải xong một họ các bài toán con, trong đó có bài toán cần giải với kích thước lớn nhất.

Chú ý: Ở bước 2 và bước 3, tp hp nghim ca các bài toán con phi được lưu trong mt bng. Bng này thường là biu din trc tiếp hàm qui hoch động.

Bước 4. Tìm nghiệm cho bài toán. Bước này chính ta công việc Tổng hợp lời giải, tức là dựa

vào bảng lưu nghiệm để từ các bài toán con, tìm nghiệm của bài toán ban đầu.

Một phần của tài liệu [Giáo trình] Phân tích thiết kế thuật toán và đánh giá độ phức tạp của giải thuật - ĐH Sư phạm Hà Nội (Trang 45 - 46)