1. Trang chủ
  2. » Giáo án - Bài giảng

bài giảng qui hoạch động rất dễ hiểu nguyễn vũ cát tường

49 2,2K 42

Đ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 49
Dung lượng 359,8 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ví dụ 1: Tính phần tử thứ n của dãy số Fibonaci • Việc thực hiện một giải thuật đệ quy có thể không tối ưu về mặt thời gian/không gian nhớ.. • Đặc điểm của lời giải đệ quy: thực hiện bà

Trang 1

4 -2

015

Trang 5

Ví dụ 1: Tính phần tử thứ n của dãy số Fibonaci

Function F(n: integer): integer;

Begin

If n ≤ 2 then

F:=1 Else

F:= F(n-1)+F(n-2);

End;

Trang 6

Ví dụ 1: Tính phần tử thứ n của dãy số Fibonaci

• Việc thực hiện một giải thuật đệ quy có thể không tối

ưu về mặt thời gian/không gian nhớ

• Đặc điểm của lời giải đệ quy: thực hiện bài toán từ việc phân tích ở mức cao xuống mức thấp

f(1) f(2) f(3) f(2)

f(4)

f(1) f(2) f(3) f(5)

f(1) f(2) f(3) f(2)

f(4) f(6)

Trang 7

Ví dụ 1: Tính phần tử thứ n của dãy số Fibonaci

Nếu giải quyết bài toán này từ mức thấp lên mức cao ta có giải thuật sau:

Function F(n: integer): integer;

Trang 8

 Đặc điểm của lời giải bài toán theo phương pháp quy hoạch động:

giải quyết bài toán đệ quy từ mức thấp trước, lời giải của chúng được lưu lại và được sử dụng để tìm lời giải của các bài toán ở mức cao hơn.

• Tư tưởng của phương pháp

• Các bài toán tối ưu hoá rời rạc

• Nguyên lý của phương pháp:

• Nguyên lý tối ưu của Bellman: Trong một dãy tối ưu của các lựa chọn thì một dãy con của nó cũng là tối ưu.

Trang 9

2 Phương pháp thực hiện

• Phân tích bài toán (biểu diễn bài toán dưới dạng

một bài toán nhiều mức)

• Xây dựng giải pháp đệ quy (lập công thức truy

hồi)

• Lập bảng (sử dụng các mảng để tính toán các giá

trị theo kiểu dưới-lên)

• Tổng hợp kết quả (kiến tạo một lời giải cho bài

toán từ các thông tin đã tính toán)

Trang 10

Xét ví dụ trên

• Phân tích bài toán: Xây dựng hàm:

Function F(n: integer): integer;

• Giải pháp đệ quy: F(n) = F(n-1)+F(n-2)

• Lập bảng:

Sử dụng mảng 1 chiều a (array[1 max] of integer) để tính:

a[i] = F(i) với i = 1 n

Cụ thể: a[1] = a[2] = 1, và:

a[i] = a[i-1] + a[i-2]; với i = 3 n,

• Tổng hợp kết quả: F(n) = a[n];

Trang 11

3 Một số bài toán tối ưu giải bằng phương

pháp quy hoạch động

• Chiếc túi xách

• Phép nhân tổ hợp nhiều ma trận

Trang 12

Bài toán chiếc túi xách

• Một cái kho chứa n loại đồ vật có kích thước và giá trị khác nhau

Tức: Tìm x[1], x[2], , x[n] (với x[i] ∈ N : số lượng loại đồ vật thứ i cần lấy) sao cho: ∑ x[i].m[i] ≤ p và ∑ x[i].c[i] đạt giá trị cực đại

Trang 13

Bài toán chiếc túi xách

Lúc đó tên trộm có thể lấy các đồ vật với giá trị như sau:Tên trộm lấy 3 đồ vật 1 và 1 đồ vật 2 với giá trị lớn nhất

là 17

Trang 14

Bài toán chiếc túi xách

Phân tích bài toán:

• Gọi P(r, s) là bài toán chiếc túi xách, với:

r ∈ N*: kích cỡ chiếc túi

s ∈ N*: số các loại đồ vật khác nhau

(bài toán ban đầu là P(p, n))

• Các giá trị cần tìm:

l[r,s]: giá trị cực đại ∑x[i].c[i] của bài toán P(r, s)

u[r,s]: số lượng loại đồ vật s tối ưu cần lấy (tức: x[s]) của bài toán P(r, s)

Trang 15

Bài toán chiếc túi xách

Trang 16

Lập bảng (Bài toán chiếc túi xách)

Trang 18

Tổng hợp kết quả (Bài toán chiếc túi xách)

Trang 19

Đồ vật 3 số lượng 0

Đồ vật 2 số lượng 1

Đồ vật 1 số lượng 3

Trang 20

Bài toán Phép nhân tổ hợp nhiều ma trận

• Cần tính M = M1× M2 × × Mn

Trong đó: Mi là ma trận cấp m[i-1] × m[i] (i=1 n)

Hãy xác định thứ tự thực hiện các phép nhân sao cho số phép tính là tối thiểu.

Trang 21

Bài toán Phép nhân tổ hợp nhiều ma trận

Trang 22

Bài toán Phép nhân tổ hợp nhiều ma trận

Trang 23

Bài toán Phép nhân tổ hợp nhiều ma trận

• Input: Cấp của n ma trận:

Ví dụ: Theo ví dụ trên, n=3

• Output: x[i] là vị trí cần thực hiện phép nhân trong lần thứ

i, (với i= 1 n-1) sao cho số phép tính → min

Trang 24

Bài toán Phép nhân tổ hợp nhiều ma trận

 Phân tích bài toán:

• Gọi P(r, s) là bài toán nhân ma trận: Mr× Mr+1 × × Ms , với r ≤ s

(bài toán ban đầu là P(1, n) )

• Giá trị cần tìm:

k[r,s] : vị trí phép toán thực hiện cuối cùng của bài toán P(r, s)

(Mr × Mr+1 × × Mk-1) × (Mk × Mk+1 × × Ms)

k = k[r,s] ∈ [r+1, s]

l[r, s] : số phép tính nhân tối ưu của bài toán P(r, s)

Vị trí phép toán thực hiện cuối cùng

Trang 25

Bài toán Phép nhân tổ hợp nhiều ma trận

Trang 26

Lập bảng (Bài toán phép nhân tổ hợp nhiều ma trận)

End;

Trang 27

Lập bảng (Bài toán phép nhân tổ hợp nhiều ma trận)

Trang 28

Tổng hợp kết quả (Bài toán phép nhân tổ hợp nhiều ma trận)

writeln(‘Thứ tự thực hiện các phép nhân :’);

For i:=1 to n-1 do writeln(x[i]);

End;

Trang 29

Tổng hợp kết quả (Bài toán phép nhân tổ hợp nhiều ma trận)

 Trong đó thủ tục TimVT được xây dựng đệ quy như sau:

Trang 30

Số phép toán tối thiểu là: 6000

l[1,3]=6000

Thứ tự thực hiện các phép nhân là:

3 2

x[2]=k[1,3]=2

x[1]= k[2,3]=3

Trang 31

Một số bài tập (QUI HOẠCH ĐỘNG)

1 Bài toán xâu trong cực đại

2 Bài toán du lịch

Trang 32

Bài toán XÂU TRONG CỰC ĐẠI

Xâu con: S là xâu con của T nếu S nhận được bằng cách xoá

đi một số ký tự nào đó trong T

Ví dụ: ‘EAC’ là xâu con của ‘CEA EE C ’

Xâu con chung: Nếu xóa một số ký tự của hai xâu thì hai xâu con còn lại của chúng bằng nhau

Ví dụ: S1=‘A B CD AE’ và S2=‘XY AC A D K’ có xâu ‘ACD’ là xâu con chung có độ dài cực đại.

Trang 33

Bài toán XÂU TRONG CỰC ĐẠI

Bài toán đặt ra:

Cho 2 xâu A, B Tìm một xâu S là xâu con chung của A

và B có độ dài cực đại.

Input: Xâu A và xâu B

Output: Xâu S là xâu trong chung của xâu A và B có độ

dài cực đại

Trang 34

Bài toán XÂU TRONG CỰC ĐẠI

Phân tích bài toán

Giả sử ta có:

• M= length(A)

• N= length(B)

Cần xây dựng mảng L[0 M,0 N] với ý nghĩa:

• L[i,j] là độ dài của xâu chung dài nhất của hai xâu A[0 i] và B[0 j] (0 ≤ i ≤ M; 0 ≤ j ≤ N)

Bài toán ban đầu L(M,N)

 Các giá trị cần tìm:

L[i,j]: độ dài cực đại của xâu con chung của bài toán L(M,N)

S: xâu con chung của bài toán L(M,N)

Trang 35

Bài toán XÂU TRONG CỰC ĐẠI

• Đương nhiên nếu một xâu là rỗng thì xâu con chung cũng là rỗng, vì vậy:

L[0,j] = 0, ∀ j, j=1 N;

L[i,0]=0, ∀ i, i=1 M;

• Nếu cả hai xâu khác rỗng:

 Nếu A[i] = B[j] thì L[i,j] = L[i-1,j-1]+1

Trang 36

Bài toán XÂU TRONG CỰC ĐẠI

Giải pháp đệ quy

• Nếu (i=0) hoặc (j=0) thì

L[i,j]=0

• Nếu (i>0) và (j>0) và (ai ≠ bj) thì

L[i,j] = Max(L(i-1,j), L(i,j-1))

• Nếu (i>0) và (j>0) và (ai=bj) thì

L[i,j]= L[i-1,j-1] +1

Trang 37

Bài toán XÂU TRONG CỰC ĐẠI

Trang 38

L[i,j]:=MAX(L[i,j-1],L[i-1,j]);

END;

END;

Trang 39

j

Trang 41

2 1

i

j

A B

Trang 42

Bài toán du lịch

• Một người đi từ thành phố 0 đến thành phố n và

có thể đi qua n-1 thành phố khác 1, 2, , n-1, theo lộ trình: 0 -> i1 -> i2 -> ik -> n, trong đó:

0 < i1 < i2 < ik < n Giá vé xe đi từ thành phố i đến thành phố j là c[i,j].

• Tìm một lộ trình từ thành phố 0 đến thành phố n

sao cho tổng chi phí về giá vé đạt cực tiểu.

Trang 44

Bài toán du lịch

Phân tích bài toán

Gọi ρ(s) là bài toán du lịch, với:

s ∈ N: là thành phố cần đến (thành phố xuất phát là 0).(Bài toán ban đầu là ρ(n))

Các giá trị cần tìm:

 l[s]: chi phí nhỏ nhất để đi từ 0 đến s của bài toán ρ(s)

 u[s]: đỉnh kế cuối trên đường đi từ 0 đến s của bài toán

ρ(s)

Trang 45

= l[k’] + c[k’,s]

u[s] = k’

Trang 46

Lập bảng (Bài toán du lịch)

Trang 47

Lập bảng (Bài toán du lịch)

l[3]=Min{l[0]+ c[0,3], l[1]+c[1,3],

l[2]+c[2,3]}=7;

u[3]=2

Trang 49

Đường đi chi phí nhỏ nhất là: 0 → 2 → 3

s

x[1]=3 x[2]=u[3]=2 x[3]=u[2]=0

Ngày đăng: 19/09/2014, 10:07

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w