Thuật toán quy hoạch động

6 262 1
Thuật toán quy hoạch động

Đang tải... (xem toàn văn)

Thông tin tài liệu

Thuật toán quy hoạch động WEDNESDAY, JUNE 2008, 10:45:22 THUẬT TOÁN Trong Thuật toán chia đệ trị thấy sức mạnh kỹ thuật Chia để Trị cách chia nhỏ toán cần làm Tuy nhiên chia nhỏ toán thành toán từ tìm lời giải toán lớn Trong trường hợp vậy, chia nhỏ toán thành nhiều toán con, thời gian thu tăng theo số mũ thuật toán trở nên vô giá trị Thuật toán Qui Hoạch Động (Dynamic Programming) Trên thực tế, việc chia thành toán thường chiếm thời gian đa thức Trong trường hợp toán lặp lại nhiều lần trình tìm kiếm lời giải Để khỏi thời gian giải toán con, bạn lưu trữ lời giải để tra cứu sau cần đến Công việc đòi hỏi độ phức tạp thuật toán đa thức Có cách làm đơn giản cách nêu Chúng ta lưu giữ tất lời giải toán lại không cần biết chúng có dùng lại nhiều lần sau hay không, không quan tâm đến việc lời giải có cần thiết cho lời giải toán hay không Cách làm có tên gọi Qui hoạch động Bản thân từ qui hoạch động lấy từ lý thuyết điều khiển Cách cài đặt thực tế thuật toán qui hoạch động không thống điều chung chúng có bảng cần điền thông số vào bảng Để minh họa xét vài ví dụ Ví dụ 3: Trò chơi Tán thủ(5) Giả sử có hai tán thủ A, B cần đấu trực diện với nhau, qui định chung người thắng trước n ván người thắng Trên thực tế thường giá trị n = Giả sử hai tán thủ A, B mạnh ngang sác xuất thắng, thua ván 50/50 Giả sử P(i,j) sác xuất cho A cần thắng thêm i ván , B cần thắng thêm j ván A chắn thắng chung Chúng ta cần tính giá trị P(i,j) với i, j Nếu i=0, j>0, tức A thắng P(0,j)=1 Nếu i>0, j=0, tức B thắng A thua rồi, P(i,0)=0 Với i, j > ta có nhận xét sau: sác xuất để A thắng chung dựa vào ván A thắng hay thua Nếu ván A thắng, sác xuất để A thắng P(i-1,j), A thua ván sác xuất để A thắng chung P(i,j-1) Vì ván khả A thắng thua 50/50 nên ta có công thức P(i,j) = (P(i-1,j)+P(i,j-1))/2 Tóm lại ta có công thức truy hồi sau để tính P(i,j) Từ công thức (4) với i+j=n ta dễ dàng tính công thức truy hồi độ phức tạp tính toán T(n) sau: T(1) = C(C-const) T(n) = 2T(n-1) + D (D-const) (5) Ta tính T(n) = O(2n) Như việc tính toán hệ số P(i,j) có độ phức tạp tăng theo số mũ n tính toán kỹ thuật đệ qui kết lớn Tuy nhiên công thức cho ta giới hạn tính toán, để hiểu rõ sự″tồi tệ″ thực việc sử dụng đệ qui tính toán theo công thức(4) thử tính toán giới hạn công việc tính toán (Giới hạn độ phức tạp ký hiệu big-omega: W) Để tính giá trị tính số lần gọi hàm P thực đệ qui cách tính P(i,j) theo công thức (4) Công thức (4) với i+j=n xem xét kỹ gợi ý cho đẳng thức tương tự hệ số tổ hợp (tổ hợp chập i từ n phần tử, số cách chọn i phần tử từ tập hợp ban đầu n phần tử) Từ nhận xét dễ dàng suy số lần gọi hàm P lời gọi P(i,j) Với i=j=n/2 dễ thấy giá trị tạp tính toán P(i,j) Vậy ta vừa chứng minh cận độ phức giá trị lớn (tuy có nhỏ 2n) áp dụng tính toán thực tế Cách tính P(i,j) tốt vừa tính vừa điền số vào bảng mô tả hình Bảng hệ số P(i,j) điền sau: Trước tiên để ý hàng bảng toàn hàng bên phải toàn Xuất phát từ góc phải điền số vào bảng theo hướng Tây-Bắc dọc theo đường chéo ngược với i+j không thay đổi Thuật toán điền số P(i,j) vào bảng mô tả sau: Function Ođs(i,j: integer):real; (7) var s,k:integer; Begin for s:=1 to i+j begin P[0,s]:=1; P[s,0]:=0; for k:=1 to s-1 P[k,s-k]:=(P[k-1,s-k]+P[k,s-k-1])/2; end; Ođs:=(P[i,j]); End; {Ođs} Ta thử phân tích thuật toán Vòng lặp bên O(s) thời gian, hai lệnh gán O(1) thời gian, tổng số thời gian tính từ vòng lặp với n=i+j Chắc bạn thấy kỳ diệu phương pháp điền bảng số so sánh với việc gọi đệ qui, tư tưởng thuật toán qui hoạch động Ví dụ 4: Bài toán Phân hoạch Tam giác Ta xét thêm ví dụ minh họa cho kỹ thuật qui hoạch động, toán tam giác hóa đa giác Giả sử có đa giác mặt phẳng với đỉnh cho trước Yêu cầu nối ″cung″ nối hai đỉnh đa giác để chia đa giác thành tam giác nhỏ (phân hoạch tam giác) cho tổng dây cung nối nhỏ Một cách chọn dây cung gọi Phân hoạch tam giác tối thiểu Hình mô tả đa giác cạnh với phân hoạch tam giác Từ liệu hình vẽ ta tính tổng chiều dài phân hoạch nhiên phân hoạch không tối ưu Bây dùng kỹ thuật qui hoạch động để giải toán phân hoạch tam giác Để tiện cho việc theo dỏi, ký hiệu đỉnh đa giác V0, V1, , Vn-1 theo chiều kim đồng hồ Tổng chiều dài dây cung phân hoạch gọi Giá trị phân hoạch Trước tiên có số nhận xét sau đây: Bổ đề Trong phân hoạch tam giác, hai đỉnh kề đa giác có tối thiểu đỉnh nối với dây cung Giả sử Vi,Vi-1 hai đỉnh kề mà không nối với dây dung phân hoạch tam giác Khi vùng phân hoạch chứa cạnh ViVi+1 phải chứa thêm hai cạnh Vi-1Vi Vi+1Vi+2 vùng phân hoạch không tam giác Bổ đề Giả sử (Vi,Vj) dây cung phân hoạch tam giác, phải tồn đỉnh V k cho (Vi,Vk) (Vk,Vj) cạnh đa giác dây cung phân hoạch Thật vậy, cạnh (Vi,Vj) phải cạnh tam giác phân hoạch Đỉnh thứ V k cần tìm Để bắt đầu tìm kiếm phân hoạch tam giác tối ưu, chọn đỉnh kề bất kỳ, chẳng hạn V V1 Khi phải tồn đỉnh Vk cho V0Vk V1Vk cạnh dây cung phân hoạch Với cách chọn k ta đưa toán tìm phân hoạch toán con, tương ứng với đa giác xác định dây cung vừa tìm phân chia đa giác ban đầu thành phần Với ví dụ đa giác cạnh nêu giả sử ta chọn đỉnh V3 với cung V0V3, đưa toán ứng với hai đa giác sau đây: Tiếp theo cần giải toán phân hoạch tam giác cho hai trường hợp tương ứng với hình Ví dụ với Bài toán 2, cung V3V5 chia thành toán tương ứng với hai đa giác (V3,V4,V5) (V0,V3,V5,V6) Cách tiếp cận có thời gian tăng số mũ với n Chú thích người viết (1) Sắp xếp trộn Thuật toán xếp tách dãy ban đầu thành dãy sau tiến hành ″trộn″ hai dãy lại với theo hình thức xét phần tử đầu dãy (2) Tìm kiếm nhị phân Thuật toán tìm kiếm dãy thứ tự dựa ý tưởng chia dãy cho thành phần đưa việc tìm dãy lớn toán tìm kiếm dãy (3) Phương pháp tính nhân nhà trường phổ thông Chia nhỏ việc nhân số n-chữ số XY thành n toán con, toán nhân X với số có chữ số Với toán việc nhân O(n) thời gian, tổng số độ phức tạp O(n2) (4) Tới có bạn thắc mắc không dạy cách nhân cho học sinh từ ghế nhà trường Tuy nhiên thuật toán mô tả hoàn toàn không tốt cách nhân thông thường trường phổ thông với n

Ngày đăng: 27/08/2017, 16:19

Từ khóa liên quan

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

Tài liệu liên quan