1. Trang chủ
  2. » Công Nghệ Thông Tin

CHƯƠNG 5 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT ppsx

79 681 3
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Các chiến lược thiết kế giải thuật
Trường học Trường Đại Học Công Nghệ Thông Tin - Đại Học Quốc Gia Hà Nội
Chuyên ngành Khoa học máy tính
Thể loại Báo cáo môn học
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 79
Dung lượng 2,17 MB

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

Nội dung

• Qui hoạch động giải các bài toán “cháu” dùng chung này một lần và lưu lời giải của chúng trong một bảng và sau đó khỏi phải tính lại khi gặp lại bài toán cháu đó.. Khác với chia để trị

Trang 1

CÁC CHIẾN LƯỢC

THIẾT KẾ GIẢI THUẬT

1

CHƯƠNG 5

Trang 2

Nội dung

2

Trang 3

Qui hoạch động

• Quy hoạch động (dynamic programming) giải các bài

toán bằng cách kết hợp các lời giải của các bài toán con của bài toán đang xét

• Phương pháp này khả dụng khi các bài toán con không độc lập đối với nhau, tức là khi các bài toán con có dùng chung những bài toán “cháu” (subsubproblem)

• Qui hoạch động giải các bài toán “cháu” dùng chung này một lần và lưu lời giải của chúng trong một bảng và sau đó khỏi phải tính lại khi gặp lại bài toán cháu đó

• Qui hoạch động được áp dụng cho những bài toán tối

ưu hóa (optimization problem)

Trang 4

Khác với chia để trị:

Trong giải thuật chia để trị:

• Các bài toán con độc lập, sau đó các bài toán con này được giải một cách đệ quy

Trong giải thuật quy hoạch động:

• Các bài toán con là không độc lập với nhau, nghĩa là các bài toán con cùng có chung các bài toán con nhỏ hơn

Trang 5

Ba giai đoạn của quy hoạch động

Phân rã: 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 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à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

Giải các bài toán con và ghi nhận lời giải: Lưu trữ lời giải của các bài toán con vào một bảng để sử dụng lại nhiều lần do đó không phải giải lặp lại cùng một bài toán.

Tổng hợp lời giải: Lần lượt từ lời giải của các bài toán con kích thước nhỏ hơn 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)

Trang 6

Lược đồ quy hoạch động

Phân rã

Giải và ghi nhận lời giải các bài toán con

Tổng hợp lời giải Bottom- Up

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

Trang 7

Các yếu tố của một giải thuật quy hoạch động giải bài toán tối ưu

Cơ sở của quy hoạch động: Những trường hợp đơn giản

Trang 8

Bốn bước của qui hoạch

động

1 Đặc trưng hóa cấu trúc của lời giải tối ưu

2 Định nghĩa giá trị của lời giải tối ưu một cách đệ quy

3 Tính trị của lời giải tối ưu theo kiểu từ dưới lên

4 Cấu tạo lời giải tối ưu từ những thông tin đã được tính toán

Trang 9

Hiệu quả của quy hoạch động

Khi có các bài toán con lồng nhau, phương pháp chia để trị sẽ tỏ ra không hiệu quả, khi nó phải lặp đi lặp lại việc giải các bài toán con chung đó

Quy hoạch động sẽ giải mỗi bài toán con một lần và lời giải của các bài toán con sẽ được ghi nhận, để thoát khỏi việc giải lại bài toán con mỗi khi ta đòi hỏi lời giải của nó.

Quy hoạch động thường được áp dụng để giải các bài toán tối ưu Trong các bài toán tối ưu, ta có một tập các lời giải, và một hàm mục tiêu nhận giá trị số Ta cần tìm một lời giải để hàm mục tiêu đạt giá trị nhỏ nhất hoặc lớn nhất.

Trang 10

Lược đồ thuật giải

Dynamic_Pro(A, x)

1 Chia bài toán cần giải thành nhiều bài toán con kích thước tăng dần

2 Sử dụng một bảng, lần lượt giải và lưu trữ lời giải x1,

…,xn của các bài toán con A1, …, An từ kích thước nhỏ đến lớn vào bảng sao cho việc giải các bài toán có thể

sử dụng kết quả các bài toán con trước đó

3 Lời giải bài toán đã cho A được tính toán cuối cùng là x=xn

Trang 11

Ví dụ về bài toán con lồng nhau

Trang 12

Tính theo đệ quy {top down}:

Function Fibonaci(n);

Begin

if (n<2)

return n else

Fibonaci(n)=Fibonaci(n-1)+Fibonaci(n-2);

End;

Ví dụ về bài toán con lồng nhau

Tính số Fibonaci thứ n

Trang 13

So sánh hai giải thuật

Trang 15

Dùng Qui hoạch động để tính số Fibonacy thứ n

Trang 16

Thí dụ 2:

Một cặp thỏ khi được sinh ra sau 2 tháng thì bắt đầu sinh một cặp thỏ con , nhưng sau đó thì cứ

1 tháng thì chúng sinh thêm một cặp thỏ con

nữa Hỏi nếu bắt đầu từ tháng thứ nhất ta có một cặp thỏ thì sau n tháng ta có bao nhiêu cặp thỏ

Trang 17

Thí dụ 2:

Gỉai: Gọi số cặp thỏ có được sau n tháng là f(n)

Các cặp thỏ được sinh ra ở tháng thứ n-1 không sinh, nhưng mỗi cặp thỏ ở tháng thứ n-2 đều sinh thêm một cặp

Vì vậy có hệ thức truy hồi

Trang 18

Thí dụ2:

Trang 19

Thí dụ 2:

Lời giải bằng kỹ thuật qui hoạch động để tính f(n)

F_Dynamic_Programming(n)

1 f[1] ←1 // tạo ra một bảng (danh sách) để lưu trữ

2 f[2] ←1 // kết quả các bài toán con

Trang 20

Thí dụ 3:

Trang 21

Dùng bảng hai chiều C[i,j] để lưu trữ các giá trị của các

tổ hợp Ci

j như là kết quả các bài toán con của c[k, n]

C[i,j] = 1 nếu i = 0 hoặc i = jC[i, j] = C[i, j-1] + C[i-1, j-1], nếu 0 < i <j, i ≤k, j ≤n

Trang 22

Thí dụ 3:

Trang 24

Các ví dụ áp dụng quy hoạch động

Bài toán nhân dãy ma trận

Bài toán Cái túi dạng 0-1

Bài toán dãy con chung dài nhất

và nhiều bài toán khác

Trang 25

Nhân dãy ma trận

Trang 26

Bài toán: Khi nhân hai ma trận A m,n và B n,p ta dùng ba vòng For

Trang 27

Nhân xâu ma trận

Cho một chuỗi <A1, A2, …, An> gồm n ma trận, và ta muốn

tính tích các ma trận

A1 A2 … An

Tích của xâu ma trận này được gọi là

mở-đóng-ngoặc-đầy-đủ (fully parenthesized ) nếu nó là một ma trận đơn hoặc là

tích của hai xâu ma trận mở-đóng-ngoặc-đầy-đủ

Thí dụ: A1 A2 A3 A4 có thể được mở-đóng-ngoặc-đầy-đủ theo 5 cách:

(A1(A2(A3A4)))(A1((A2A3)A4)((A1A2)(A3A4))(A1(A2A3))A4)(((A1A2)A3)A4)

Trang 28

Hai chi phí trên rất khác biệt nhau.

Nhân dãy ma trận

Trang 29

Thí dụ 2: Xét phép nhân 3 ma trận A 3,4 x B 4,5 x C 5,6

Có hai cách nhân

ABC=(AB)C và A(BC).

Tính tích AB cần 3*4*5= 60 phép nhân đựợc ma trận D cấp 3x5 Tính DC cần 3x5x6 = 180 phép nhân Do đó tính (AB)C cần 60+180 = 240 phép nhân

Tính tích (BC) cần 4*5*6= 120 phép nhân được ma trận

E cấp 4x6; tính AE cần 3x4x6=72 phép nhân Do đó tính A(BC) cần 120+72= 192 phép nhân.

Trang 30

Bài toán nhân dãy ma trận

Xét phép nhân dãy ma trận

M 1 M 2 M n 1) Có bao nhiêu cách tổ chức thứ tự thực hiện phép nhân dãy ma trận này?

2) Nhân theo thứ tự nào để số phép nhân các số là ít nhất?

Trang 31

Phát biểu bài toán nhân xâu ma trận

Bài toán tính tích xâu ma trận:

'‘Cho một chuỗi <M 1 , M 2 , …, M n > gồm n ma trận, với

mỗi i = 1, 2, …, n, ma trận M i có kích thước p i-1 × p i ,

ta mở-đóng-ngoặc tích này sao cho tối thiểu hóa

Đây là một bài toán tối ưu hóa thuộc loại khó.

Trang 32

Số cách thực hiện dãy phép nhân n ma trận

Ký hiệu T (n) là số cách điền các dấu ngoặc vào biểu thức

tích của n ma trận Giả sử ta định đặt dấu ngoặc phân tách đầu tiên vào giữa ma trận thứ i và ma trận thứ (i + 1) trong biểu thức tích, tức là:

M = (M 1 M 2 … M i )(M i+1 M i+2 … M n )

Khi đó có T(i) cách đặt dấu ngoặc cho thừa số thứ nhất

(M 1 M 2 … M i ) và T(n - i) cách đặt dấu ngoặc cho thừa số

thứ hai (M i+1 M i+2 … M n ) và từ đó T(i)T(n-i) cách tính biểu thức (M 1 M 2 … M i )(M i+1 M i+2 … M n )

Trang 33

Có bao nhiêu cách tính A1A2 An?

Công thức truy hồi

) (

) ( )

(

1 )

1

(

n i

i n

T i

T n

T

T //chỉ có 1 ma trận nên chỉ có một cách đóng mở

n=1

//nếu n>=2

Trang 35

Cấu trúc của một cách mở đóng ngoặc tối ưu

Bước 1: Đặc trưng hóa cấu trúc của một lời giải tối ưu

• Dùng Ai j để ký hiệu ma trận kết quả của việc tính

Ai Ai+1…Aj

• Một sự mở đóng ngoặc tối ưu của tích xâu ma trận

A1.A2… An

• Tách xâu ngay tại vị trí nằm giữa Ak và Ak+1 với một trị

nguyên k, 1 ≤ k < n Nghĩa là, trước tiên ta tính các chuỗi ma trận A1 k and Ak+1 n và rồi nhân chúng với nhau

để cho ra A1.n

• Chi phí của sự mở đóng ngoặc tối ưu này = chi phí tính

Al k + chí phí tính Ak+1 n, + chi phí nhân chúng lại với nhau

Trang 36

Diễn tả lời giải một cách đệ quy

• Ở đây, những bài toán con của ta là bài toán xác định chi phí tối ưu ứng với sự mở đóng ngoặc cho chuỗi

Ai.Ai+1… Aj với 1 ≤ i j n.

• Đặt m[i, j] là tổng số tối thiểu các phép nhân vô hướng được đòi hỏi để tính ma trận Ai j Chi phí của cách rẻ nhất để tính A1 n sẽ được ghi ở m[1, n]

• Giả sử rằng sự mở đóng ngoặc tối ưu tách đôi tích chuỗi

Ai Ai+l… Aj tại giữa Ak and Ak+l, với i k < j Thì m[i, j]

bằng với chí phí tối thiểu để tính Ai k và Ak+1 j, cộng với chi phí để nhân hai ma trận này lại với nhau

Trang 37

Bước 2: Lời giải đệ quy

• Mỗi ma trận Ai có kích cỡ là pi-1x pi, vì vậy tích của

Ai k,Ak+1 j cần pi-1pkpj phép toán vô hướng

• Như vậy, định nghĩa đệ quy cho chi phí tối thiểu của một

sự mở đóng ngoặc cho Ai Ai+l… Aj là như sau:

m[i, j] = min {m[i, k] + m[k + 1, j] + pi-1pkpj.} nếu i < j

• Để giúp theo dõi cách tạo một lời giải tối ưu, hãy định nghĩa:

• s[i, j]: trị của k tại đó chúng ta tách tích xâu ma trận

AiAi+1…Aj để đạt đến một sự mở đóng ngoặc tối ưu

(5.2)

Trang 38

Một nhận xét quan trọng

Một nhận xét quan trọng là

' 'Sự mở đóng ngoặc của xâu con A 1 A 2 A k bên trong

Như vậy, một lời giải tối ưu cho bài tóan tích xâu ma trận chứa đựng trong nó những lời giải tối ưu của những bài toán con

Bước thứ hai của phương pháp qui hoạch động là định nghĩa trị của lời giải tối ưu một cách đệ quy theo những lời giải tối ưu của những bài toán con

Trang 39

B3:Tính những chi phí tối ưu

• Thay vì tính lời giải dựa vào công thức cho ở (5.2) bằng một giải thuật đệ quy, chúng ta đi thực hiện Bước 3 của qui hoạch động: tính chi phí tối ưu bằng cách tiếp cận từ dưới lên

• Giả sử ma trận Ai có kích thước pi-1× pi với i = 1, 2 , , n

• Đầu vào là chuỗi trị số <p0, p1, …, pn> với length[p]=n+1

• Thủ tục dùng một bảng m[1 n, 1 n] để lưu các chi phí

m[i, j] và bảng s[1 n, 1 n] để lưu giá trị nào của vị trí k

mà thực hiện được chi phí tối ưu khi tính m[i, j] Bảng s dùng để lưu giá trị tối ưu

• Thủ tục MATRIX-CHAIN-ORDER trả về hai mảng m và s.

Trang 41

Độ phức tạp tính toán

Các vòng lặp lồng nhau tới 3 cấp, chỉ số các vòng lặp (l, i, k) đều có nhiều nhất n-1 giá trị

Độ phức tạp của thuật giải là O(n 3 )

Trang 42

Một thí dụ: Tính tích xâu ma

trận

Vì ta định nghĩa m[i, j] chỉ cho i < j, chỉ phần của bảng m ở

trên đường chéo chính mới được dùng

Cho các ma trận với kích thước như sau:

Trang 43

Một thí dụ về tính tích xâu ma trân (tt.)

Số phép toán tối thiểu để nhân 6 ma trận là 15125

Trang 44

Một thí dụ về tính tích xâu ma trân (tt.)

Trang 45

Bước 4: Tạo một lời giải tối

ưu

• Ta dùng mảng s[1 n, 1 n] để xác định cách tốt nhất để

tính tích xâu ma trận Mỗi phần tử s[i, j] ghi trị của k

sao cho tại đó sự mở đóng ngoặc tối ưu tách đôi xâu

AiAi+1… Aj thành hai đoạn tại Ak và Ak+1

• Kết quả nhân cuối tối ưu là A1 s[1,n]As[1,n]+1 n Phép nhân

ma trận được tính một cách đệ qui vì s[1,s[1,n]] xác định phép nhân cuối của chuỗi A1 s[1,n] và s[s[1,n]+1,n] xác định phép nhân cuối của chuỗi As[1,n]+1,n

• Cho trước chuỗi ma trận A = <A1, A2…, An>, bảng s

và các chỉ số i và j, thủ tục đệ quy

Trang 48

Với s = 2, p = (2, 5, 4, 3,

7).

Cần tính m 13 , m 24

m13 M1M2M3 (M1M2 )(M3) 64k=1 (M1)(M2 M3) m11 + m23 + p0 × p1 × p3=

Trang 53

Bài toán cái túi (Knapsack)

'‘Một kẻ trộm đột nhập vào một cửa hiệu tìm thấy có n mặt hàng

có trọng lượng và giá trị khác nhau , nhưng y chỉ mang theo một cái túi có sức chứa về trọng lượng tối đa là M Bài toán cái túi là tìm một tổ hợp các mặt hàng mà kẻ trộm nên bỏ vào cái túi để đạt một giá trị cao nhất với những món hàng

mà y mang đi ”

Trang 54

Bài toán cái túi (Knapsack)

•Gọi các chi phí (trọng lượng) là size1, , sizen và các giá trị tương ứng là val1, ., valn Ta cần cực đại hóa tổng giá trị với điều kiện tổng chi phí không vượt quá M Khi đó, với mỗi i ≤ M, đặt cost(i) là giá trị lớn nhất có thể đạt được với tổng chi phí không vượt quá i Rõ ràng, cost(M) là đáp số của bài toán.

•Định nghĩa cost(i) một cách đệ quy như sau:

cost(0) = 0

•Ở đây, giá trị lớn nhất của tập rỗng được lấy bằng 0 Tính

dần các kết quả từ cost(0) tới cost(M), ta sẽ được lời giải

•Do việc tính mỗi cost(i) đòi hỏi xem xét n đồ vật (tất cả các giá trị này đã được tính từ trước), và có M giá trị của các cost(i)

cần tính, nên thời gian chạy của lời giải quy hoạch động là

O(nM).

Trang 55

Bài toán cái túi (Knapsack)

• Bài toán này có thể giải bằng qui hoạch động bằng

cách dùng hai bảng cost và best sau đây:

• cost[i] chứa giá trị tối đa mà có thể thực hiện được với một cái túi có sức chứa i

cost[i] = cost[i – size[j]] + val[j]

• best[i] chứa mặt hàng cuối cùng bỏ vào túi nhằm đạt

được giá trị tối đa

Trang 56

Một thí dụ của bài toán cái túi

Trang 58

Một thể hiện của cái túi

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 j=1

cost[i] 0 0 4 5 5 8 10 10 12 14 15 16 18 18 20 22 24

best[i] A B B A C B A C C A C C A C C j=4

cost[i] 0 0 4 5 5 8 10 11 12 14 15 16 18 20 21 22 24

best[i] A B B A C D A C C A C C D C C j=5

cost[i] 0 0 4 5 5 8 10 11 13 14 15 17 18 20 21 23 24

best[i] A B B A C D E C C E C C D E C

Hình 5.4 Các mảng cost và best của một thí dụ bài toán cái túi

Trang 59

Ghi Chú:

• Bài toán cái túi có thể dễ dàng giải đưọc nếu M không lớn, nhưng khi M lớn thì thời gian chạy trở nên không thể chấp nhận được

• Phương pháp này không thể làm việc được khi M và trọng lượng/kích thước là những số thực thay vì số nguyên

Tính chất 4.1.1 Giải thuật qui hoạch động để giải bài toán cái túi có thời gian chạy tỉ lệ với NM

Bài toán cái túi (Knapsack)

Trang 60

Những bài toán con trùng

lắp

• Khi một giải thuật đệ quy gặp lại cùng một bài toán con nhiều lần, ta bảo rằng bài toán tối ưu hóa có những bài toán con trùng lắp

• Giải thuật quy hoạch động lợi dụng những bài toán con trùng lắp bằng cách giải mỗi bài toán con một lần, cất lời giải vào trong một bảng mà bảng này sẽ được tham khảo đến khi cần

• Các giải thuật đệ quy làm việc từ trên xuống trong khi các giải thuật quy hoạch động làm việc từ dưới lên, Cách sau hữu

hiệu hơn

Trang 61

Bài toán chuỗi con chung dài nhất

• Một chuỗi con (subsequence) của một chuỗi (sequence) là

chuỗi ấy sau khi bỏ đi một vài phần tử

• Thí dụ: Z = <B, C, D, B> là một chuỗi con của X = <A, B, C,

B, D, A, B> với chuỗi chỉ số <2, 3, 5, 7>

• Cho hai chuỗi X và Y, ta bảo Z là chuỗi con chung (common

subsequence) của X và Y nếu Z là một chuỗi con của cả hai

Trang 62

Thí dụ 1: X = <A, B, C, B, D, A, B> và Y = <B, D, C, A, B, A> <B, D, A, B> là LCS của X and Y.

Câu hỏi:

1 Có chuỗi con chung nào có độ dài là 5 không?

2 Ngoài chuỗi <B, D, A, B> là LCS của X and Y, còn chuỗi con chung nào có độ dài là 4?

Chú ý: Chuỗi con có cùng thứ tự tăng nhưng không cần lên tục

Bài toán chuỗi con chung dài nhất

Trang 63

B1:Tiểu cấu trúc tối ưu của bài toán chuỗi con chung dài nhất

Cho chuỗi X = <x1, x2, …, xm>, ta định nghĩa tiền tố thứ i của X,

Trang 64

• Để tìm một LCS của X = <x1, x2, …, xm> và Y = <y1, y2, …, yn>

• Nếu xm = yn cần tìm LCS của Xm-1 và Yn-1 rồi bổ sung xm

= yn vào LCS vừa tìm để tạo LCS của X và Y

• Nếu xm # yn cần giải quyết hai bài toán con:

Tìm LCS của Xm-1 và Y và tìm LCS của X và Yn-1 LCS nào trong 2 LCS vừa tìm được dài hơn thì nó sẽ là LCS của X và Y

B2: Lời giải đệ quy

Ngày đăng: 25/07/2014, 16:20

HÌNH ẢNH LIÊN QUAN

Hình 5.1 trình bày bảng m và s được tính bởi thủ tục  MATRIX-CHAIN-ORDER với n = 6. - CHƯƠNG 5 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT ppsx
Hình 5.1 trình bày bảng m và s được tính bởi thủ tục MATRIX-CHAIN-ORDER với n = 6 (Trang 42)
Hình 5.3  Một thí dụ của bài toán cái túi - CHƯƠNG 5 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT ppsx
Hình 5.3 Một thí dụ của bài toán cái túi (Trang 56)
Hình 5.4 Các mảng cost và best của một thí dụ bài toán cái túi - CHƯƠNG 5 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT ppsx
Hình 5.4 Các mảng cost và best của một thí dụ bài toán cái túi (Trang 58)
Bảng b có thể được dùng để tạo một LCS của X = &lt;x 1 ,x 2 , …x m &gt; and Y = &lt;y 1 , y 2 , …, y n &gt; - CHƯƠNG 5 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT ppsx
Bảng b có thể được dùng để tạo một LCS của X = &lt;x 1 ,x 2 , …x m &gt; and Y = &lt;y 1 , y 2 , …, y n &gt; (Trang 69)

TỪ KHÓA LIÊN QUAN

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

w