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 pdf

77 1,2K 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

Định dạng
Số trang 77
Dung lượng 3,09 MB

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

Nội dung

Ý tưởng phương pháp tham lam  Các giải thuật tối ưu hóa thường đi qua một số bước với một tập các khả năng lựa chọn tại mỗi bước.. Sơ đồ chung của giải thuật tham lamDạng các bài toán g

Trang 1

CÁC CHIẾN LƯỢC

THIẾT KẾ GIẢI THUẬT

1

CHƯƠNG 5

Trang 2

Nội dung

 Giải thuật tham lam

 Giải thuật quay lui (backtracking)

 Giải thuật nhánh và cận

2

Trang 3

Giải thuật tham lam (Greedy Algorithm)

 Ý tưởng phương pháp

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

 Các ví dụ

Trang 4

Ý tưởng phương pháp tham lam

 Các giải thuật tối ưu hóa thường đi qua một số bước

với một tập các khả năng lựa chọn tại mỗi bước Một giải thuật tham lam thường chọn một khả năng mà xem như tốt nhất tại lúc đó

 Tức là, giải thuật chọn một khả năng tối ưu cục bộ với

hy vọng sẽ dẫn đến một lời giải tối ưu toàn cục

 Vài thí dụ của giải thuật tham lam:

- Giải thuật Prim để tính cây bao trùm tối thiểu

- Giải thuật Dijkstra để giải bài tóan những lối đi ngắn nhất

từ một đỉnh nguồn (single-source shortest paths problem).

Trang 5

Ý tưởng phương pháp tham lam

Lưu ý

 Phương pháp tham lam thường được áp dụng rộng

rãi trong các bài toán tối ưu

 Trong một số trường hợp, không tìm được nghiệm

đúng bài toán mà chỉ là nghiệm “tốt”.

 Việc giải bài toán theo phương pháp tham lam

tránh được bùng nổ tổ hợp và khá hiệu quả

Trang 6

Sơ đồ chung của giải thuật tham lam

Dạng các bài toán giải bằng giải thuật Tham Lam

 Giả sử ta phải chọn một tập con R của các phần tử của một tập

S = (s1, s2, ,sn )

sao cho :

 Tập R thỏa mãn một điều kiện ràng buộc W(R) nào đó;

 Một hàm mục tiêu Z(R) đạt giá trị tối ưu (cực đại hoặc cực

tiểu)

Trang 7

Sơ đồ

Bước 1: Chọn một phần tử s có lợi nhất cho lời giải trong bước đó sao cho phần tử này cùng với lời giải tối ưu của bài toán với tập con S−{s} với ràng buộc W(R−{s }) và hàm mục tiêu Z(R−{s}) là lời giải tối ưu của bài toán

Bước 2: Tiếp tục tìm phần tử tiếp theo có lợi nhất với tập con

S = S−{s} với ràng buộc W=W(R−{s}) và hàm mục tiêu Z

= Z(R−{s}) Cho đến khi không thể tìm được phần tử như vậy hoặc tập S = φ

Trang 8

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

Greedy(A, S) // A is the candidate set, S is the solution

Trang 9

Các ví dụ:Bài toán lựa chọn công việc

Bài toán:

 Giả sử rằng ta có một tập S = { 1,2, n} của n công việc sử dụng cùng một tài nguyên, ví dụ như một phòng họp, tại một thời điểm chỉ có một công việc được tiến hành Các công việc i được bắt đầu tại thời điểm si và kết thúc tại thời điểm fi với si ≤ fi Nếu được chọn, công việc i sẽ chiếm khoảng thời gian là [si, fi)

 Hãy lựa chọn các công việc không mâu thuẫn nhau (nghĩa là hoạt

động i và j là tương thích nếu khoảng thời gian [si,fi] và [sj, fj]

không phủ lấp lên nhau(tức là i và j là tương thích nếu si >= fj hay

sj >= fi) sao cho số các công việc được chọn là nhiều nhất.

INPUT: Thời gian khởi đầu s[1 n]; Thời gian kết thúc f[1 n]

Trang 10

Tính chất lời giải

Giả sử dãy công việc sắp xếp tăng dần theo thời điểm kết thúc :

f1 ≤ f2 ≤ ≤ fn

1. Luôn tồn tại một lời giải tối ưu chứa công việc thứ nhất

2. Nếu A ⊂ S là lời giải tối của bài toán có chứa việc 1 thì A – {1} là lời giải tối ưu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f1 trở đi

Trang 11

Bài toán xếp lịch hoạt động

 Thời gian bắt đầu và kết thúc của mội công việc

• Các hoạt động tương thích tối đa mà có thể hoàn thành là:

• {a3, a9, a11} chứa các hoạt động tương thích với nhau nhưng chưa phải là tập con tối đa

• {a1, a4, a8’ a11} là tập con tối đa nhưng không phải duy nhất

• Vì {a2, a4, a9’ a11} cũng chứa các hoạt động tương thích

Trang 12

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Trang 16

Các bước của thuật giải tham lam

1. Xác định cấu trúc tối ưu của bài toán

2. Xây dựng lời giải đệ qui

3. Chứng minh với bất kỳ lời gọi đệ qui, một lựa chọn

tối ưu là một lựa chọn tham lam Vì vậy nó luôn đảm bảo để tạo một lựa chọn tham lam

4. Chỉ ra rằng duy nhất một bài toán con sau khi chọn

tham lam là khác rỗng

5. Phát triển lời giải đệ qui để thực hiện giải thuật

tham lam

Trang 17

Bước 1: Xây dựng cấu trúc tối ưu

 Tìm Optimal structure để xây dựng 1 lời giải tối ưu cho bài toán từ những lời giải tối ưu của các bài toán con

 Gọi Sij là tập con của các hoạt động trong S có thể bắt đầu sau khi hoạt động ai kết thúc và trước khi hoạt động aj bắt đầu

 Sij chứa các hoạt động tương thích với ai và aj và cũng tương thích với tất cả các hoạt động kết thúc không muộn hơn và bắt đầu không sớm hơn bắt đầu của aj

Trang 18

 Giả sử các hoạt động được sắp xếp theo thứ tự tăng thời gian kết thúc của các hoạt động

 Để tìm cấu trúc con cho bài toán xếp lịch, khảo sát các bài toán con Sij khác rỗng và giả thuyết lời giải Sij chứa một số hoạt động ak sao cho fi<sk<fk<sj

 Từ ak có thể chia thành 2 bài toán con: Sik và Skj, mỗi bài toán con chứa 1 tập con các hoạt động Sij Lời giải cho Sij là tổ hợp của lời giải Sik và Skj cùng với chính hoạt động ak

 Giả sử có một lời giải tối ưu Aij cho tập Sij (có chứa hoạt động ak) Khi đó các lời giải aik của tập Sik và akjcủa tập Skj mà được dùng cho lời giải tối ưu cho tập Sij cũng phải tối ưu

Bước 1: Xây dựng cấu trúc tối ưu

Trang 19

Bước 2: Lời Giải Đệ Qui

 Tìm các tập con kích cỡ tối đa Aik và Akj chứa các hoạt động tương thích nhau cho mỗi bài toán con

 Tạo tập kích cỡ tối đa Aij chứa các hoạt động tương thích

Trang 20

 Chọn hoạt động am trong Sij có thời gian hoàn thành sớm nhất, rồi tìm lời giải cho bài toán con Smj Hoạt động được chọn theo cách tham lam nghĩa là nó làm tối đa thời gian còn lại chưa được xếp lịch để được xếp lịch cho nhiều hoạt động khác.

 Loại bỏ những hoạt động chưa được xếp lịch (bị trùng lắp)

 Lặp lại quá trình trên

Bước 2: Lời Giải Đệ Qui

Trang 21

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Trang 28

Xây dựng Thuật giải Greedy

Trang 29

Thủ tục Greedy-activity-selector

• Hoạt động được chọn bởi thủ tục

GREEDY-ACTIVITY-SELECTER thường là hoạt động với thời điểm kết thúc sớm

nhất mà có thể được xếp lịch một cách hợp lệ Hoạt động

được chọn theo cách “tham lam” theo nghĩa nó sẽ để lại cơ hội để xếp lịch cho được nhiều hoạt động khác

• Giải thuật tham lam không nhất thiết đem lại lời giải tối ưu

Tuy nhiên thủ tục GREEDY-ACTIVITY-SELECTOR thường tìm được một lời giải tối ưu cho một thể hiện của bài toán xếp lịch các hoạt động

Trang 30

Bư ớ c 3: Chứ ng minh tính tối ư u

• Chứng minh giải thuật sử dụng hai thuộc tính sau:

• Bài toán có cấu trúc tối ưu (optimal

structure)

• Thuật giải thỏa mãn thuộc tính chọn

tham lam (greedy-choice)

Chứng minh bài toán có 2 thuộc tính này , có thể dùng giải thuật tham lam đẻ giải quyết

Trang 31

Optimal Substructures

 Một bài toán thể hiện cấu trúc tối ưu

( optimal substructure) nếu lời giải tối ưu của bài toán lớn luôn chứa trong nó những lời giải tối ưu của bài toán con

 Nếu A ⊂ S là lời giải tối của bài toán có chứa

việc 1 thì A’ = A – {1} là lời giải tối ưu của bài toán với tập S’ gồm các công việc bắt đầu từ thời điểm f1 trở đi (nghĩa là S’={i ∈ S: si ≥ f1})

Trang 32

Thuộc tính Greedy-Choice

 Tạo lựa chọn tốt nhất tại một thời điểm, giải các bài

toán con được phát sinh từ lựa chọn đó

 Lựa chọn được tạo ra bởi giải thuật tham lam có thể phụ thuộc vào những lựa chọn ở xa nhưng nó không thể phụ thuộc vào bất kỳ lựa chọn sẽ được phát sinh hay những lời giải của bài toán con

Dạng top-down  mỗi lần chọn tham lam một cái

 làm bài toán nhỏ đi

Trang 33

Optimal Substructures

Trang 34

Bài toán cái túi dạng phân số

(Fractional knapsack problem)

Trong bài toán cái túi dạng phân số, tình tiết cũng như vậy, nhưng

kẻ trộm có thể lấy đi một phần của một món hàng

Cả hai bài toán đều có tính chất tiểu cấu trúc tối ưu

• Đối với bài toán cái túi dạng 0-1, xét một tổ hợp nặng M ký mà

đem lại giá trị cực đại Nếu ta lấy món hàng thứ j ra khỏi túi,

những món hàng còn lại cũng là tổ hợp đem lại giá trị lớn nhất ứng với trọng lượng tối đa M - wj mà kẻ trộm có thể lấy đi từ n-1 loại mặt hàng trừ mặt hàng thứ j.

• Đối với bài toán cái túi dạng phân số, xét trường hợp khi ta lấy

ra khỏi túi w j -w ký của mặt hàng thứ j, những món hàng còn lại cũng là tổ hợp đem lại giá trị lớn nhất ứng với trọng lượng M – (w j –w) mà kẻ trộm có thể lấy đi từ n-1 loại mặt hàng trừ mặt hàng thứ

j.

Trang 35

Bài toán cái túi dạng phân số (tt.)

Ta dùng giải thuật tham lam cho bài toán cái túi dạng phân số

và qui hoạch động cho bài toán cái túi dạng 1-0

Trang 36

Bài toán cái túi dạng phân số (tt.)

• Để giải bài toán cái túi dạng phân số, trước tiên ta tính

hệ số giá trị tiền trên một đơn vị trọng lượng (vi/wi) của từng mặt hàng

• Kẻ trộm bắt đầu bằng cách lấy càng nhiều càng tốt mặt hàng có hệ số vi/wi lớn nhất Khi loại mặt hàng này đã cạn mà kẻ trộm còn có thể mang thêm được nữa thì y

sẽ lấy càng nhiều càng tốt mặt hàng có hệ số vi/wi lớn nhì và cứ như thể cho đến khi y không còn có thể mang thêm nữa

Trang 37

Bài toán cái túi dạng phân số (tt.)

v i /w i =60/10=6

v i /w i =100/20=5

v i /w i =120/30=4

Trang 38

procedure GREEDY_KNAPSACK(V, W, M, X, n);

/* V, W are the arrays contain the values and weights of n objects

ordered so that Vi/Wi ≥ Vi+1/Wi+1 M is the knapsack capacity and X is solution vector */

Bỏ qua thời gian sắp thứ tự các món hàng, giải thuật này có độ phức tạp O(n)

var rc: real; i: integer;

Trang 39

Mã nén Huffman

 Mã Huffman được sử dụng rộng rãi và là một kỹ thuật rất hiệu quả đối với việc nén dữ liệu Nó có thể tiết kiệm được tới 20% − 90% tùy theo từng file bị nén

 Huffman đề xuất một thuật toán tham lam sử dụng một bảng tần suất xuất hiện của các ký tự để xây dựng lên một sơ đồ tốt nhất biểu diễn các ký tự bằng một xâu nhị phân.

Trang 40

Nội dung

Mã tiền tố

Mã tiền tố tối ưu

Giải thuật của Huffman xây dựng cây biểu diễn

mã tiền tố tối ưu

Các kỹ thuật khi cài đặt thủ tục sinh bộ mã

Huffman

Trang 41

Mã tiền tố

 Mã tiền tố của một bộ n kí tự là bộ mã nhị phân của các kí tự đó sao cho từ mã của kí tự này không phải

là tiền tố của từ mã một kí tự khác.

 Ví dụ: từ mã của A=‘001’, B=‘0010’ thì từ mã của

A là tiền tố của từ mã của B không thỏa mãn định nghĩa mã tiền tố.

Trang 42

Biểu diễn mã tiền tố bằng cây nhị phân

 Mỗi bộ mã nhị phân tiền tố của n kí tự có thể biểu diễn bằng một cây nhị phân n lá

 Khi đó mỗi kí tự được đặt vào một lá của cây sao cho nếu gán nhãn cho các cạnh trái của cây bởi

‘0’, cạnh phải bởi ‘1’, thì từ mã của mỗi kí tự là dãy các nhãn nằm trên đường đi từ gốc của cây nhị phân tới mỗi lá đặt kí tự ấy.

Trang 43

Mã tiền tố biểu diễn bởi cây nhị phân

1 0

0

 HONGHAI → 00|01|100|101|00|110|111

Trang 44

Mã tiền tố tối ưu

 Giả sử một văn bản dùng n ký tự khác nhau c[1 n], trong đó kí tự c[i] xuất hiện k[i] lần

 Giả sử bộ mã tiền tố m[1 n] mã hóa kí tự c[i] bằng từ

mã m[i] có độ dài d[i] (bít)

 Tổng số bít để mã hóa toàn bộ văn bản là

k

w

1

] [

* ] [

W gọi là giá của bộ mã m[1 n]

 Bộ mã có giá nhỏ nhất được gọi là mã tiền tố tối ưu

Trang 47

Ví dụ 2 x 1000 lần

cần 300.000 bits để mã hóa cả file

Trang 48

Giải thuật của Huffman xây dựng cây biểu diễn mã tiền tố tối ưu

Trang 49

Giải thuật

1. Khởi tạo: Tạo một rừng gồm n cây, có trọng số tại các

đỉnh, mỗi cây có một nút ứng với một ký tự với trọng số bằng tần số của ký tự đó

Trang 50

Giả mã c ho g iải thuật Huffman

Q là hàng đợi ưu tiê n theo tần s ố nhỏ của các kí tự.

Thủ tục ExtracMin(Q) lấy phần tử có tần s ố nhỏ nhất của Q ra khỏi

Q.

Thủ tục Insert(Q,z) chè n phần tử z vào hàng đợi ưu tiê n Q

Trang 51

Độ phức tạp thời gian của giải

thuật

 Việc tạo hàng đợi ưu tiên Q dưới dạng đống

cực tiểu mất O(n) thời gian;

 Vòng lặp For gồm n-1 bước

 Mỗi bước trong vòng For thực hiện việc xuất

phần tử nhỏ nhất và vun lại đống mất O(ln n)

thời gian

Do đó vòng For mất O(n lg n) thời gian

Độ phức tạp thời gian là O(n lg n)

Trang 52

Building the Encoding Tree

Trang 57

Ví dụ minh họa giải thuật Huffman

Xây dựng cây mã Huffman để mã hóa từ:

N 3

H 2

A

1

G 1

G 1

H 2

N 3

D 3

A 1

I 2

Trang 58

Bước 1 D

3

I 2

N 3

H 2 A

1

G 1

7 2

D 3

N 3

H 2

I 2 A

1

G 1

7 2

8 4

Bước 2

Bước 1: Sắp xếp theo trọng số, Nút A

và G có trọng số nhỏ nhấtthêm vào nút mới là 7 có trọng số là 1+1 =2

Bước 2: nút mới thêm là nút sô 8,

trọng số là 2+2 =4

Trang 59

Bư ớ c 3

N

3

Bư ớ c 4

I 2 A

1

G 1

7

2

8 4

D 3

H 2

9 5

D 3

H 2

9 5

N 3

I 2 A

1

G 1

7 2

8 4

10 7

Bước 3: nút mới thêm là nút

sô 9, trọng số là 2+3 = 5 Bước 4: nút mới thêm là nút

sô 10, trọng số là 3+4 = 7

Trang 60

Kết quả

H=00 D=01 N=10 A=1100 G=1101 I=111

Bư ớ c

5

D 3

I 2 A

1

G 1

7 2

8 4

10 7

11 12

Trang 61

Các kỹ thuật khi cài đặt thủ tục mã Huffman

 Biểu diễn cây nhị phân bằng mảng theo quan hệ con

Trang 62

Biểu diễn cây nhị phân bằng mảng

 Cây mã Huffman, lúc đầu là một rừng gồm n lá, ở mỗi bước xây dựng cây ta hợp hai cây thành một cây,sau n-1 bước ta chỉ còn một cây Vì mỗi bước ta thêm một nút mới, nên tổng cộng ta thêm n-1 nút, do vậy cây Huffman cuối cùng có 2n-1 nút Ta dùng một mảng gồm 2n-1 phần tử để lưu cấu trúc cây này

 Trong ví dụ đã làm với n=6, cây Huffman có 2*6-1=11 nút, các nút đã có (là lá trong cây Huffman) được đánh số từ 1 đến 6, mỗi lần sinh thêm một nút ta đánh số thứ tự tiếp theo

từ 7 đến 11

Trang 63

Lưu trữ cấu trúc cây Huffman vào mảng Huff

 Ta dùng một mảng đặt tên là Huff[1 11] lưu trữ cấu trúc của cây

 Ở bước 1 trong ví dụ ta lấy hai nút số 1(A) và số 3(G), thêm nút mới là nút số 7, nút số 1(A) là con trái của nút số 7, nút số 3(G) là con phải của nút số 7 Để ghi lại tình trạng này ta đặt

Huff[1]:= -7, Huff[3]:= 7 Hai nút này cùng cha nhưng nút trái ứng với giá trị âm của chỉ số nút cha, nút phải ứng với giá trị dương

Trang 64

Xây dựng mảng Huff

D 3

H 2

9 5

N 3

I 2 A

1

G 1

7 2

8 4

10 7

11 12

Trang 65

Dựa vào mảng Huff xây dựng bộ

mã Huffman tương ứng

 Gọi từ mã của ký tự thứ i là BiCode[i]

 Chẳng hạn với i=1 ta tìm từ mã BiCo[1] như sau:

 Vì Huff[1]=-7<0 nên đỉnh 1 là con trái của đỉnh 7, vì thế bít tận cùng bên phải của từ mã là 0, nghĩa là BiCode[1]=‘*0’ Tiếp theo, Huff[7]=-8<0, nên bít thứ hai bên phải của từ mã vẫn là 0, nghiã là BiCode[1]=‘*00’ Tiếp theo Huff[8]:= 10>0, nên bít thứ ba từ phải là 1, vậy từ mã là Bicode[1]=‘*100’ Tiếp theo Huff[10]=11>0 nên bít thứ tư từ phải là 1, vậy BiCode[1]=‘*1100’ Đến đây 11 là đỉnh gốc của cây Huffman nên quá trình dừng lại, ta có BiCode[1]=‘1100’

i 1 2 3 4 5 6 7 8 9 10 11 Huff -7 9 7 -9 8 -10 -8 10 -11 11

Trang 66

Thủ tục lập bảng mã Huffman từ mảng Huff[1 2n-1]

Pro c e dure Co ding;

Trang 67

Chọn phần tử nhỏ nhất

 Trong giải thuật Huffman, ở mỗi bước ta chọn ra hai cây con

có trọng số ở gốc nhỏ nhất để hợp lại thành một cây Nếu chọn theo phương pháp bình thường nhất n phép so sánh, do

đó riêng việc chọn phần tử nhỏ nhất mất:

n+2(n-1)+2(n-1)+2(n-3)+ +2.2+2=n+(n-1)(n-2)/2 = O(n2) phép so sánh

 Để giảm độ phức tạp tính toán ta xây dựng một đống (HEAP) cực tiểu (đống có trọng số mỗi nút không lớn hơn trọng số các con của nút ấy)

Trang 68

Tao một đống

cực tiểu

 Từ cây theo thứ tự tự nhiên bên trái, vun thành đống cực tiểu bên phải

Ch A D G H I N Count 1 3 1 2 2 3

1 A

3

D

1 G

1 A

2

H

1 G

Trang 69

Khai báo một mảng Heap[1 n]

Thủ tục vun lại đống tại đỉnh k, vớ i Heap c ó h phần tử

Proc edure DownHeap(k,h);

 v:=Heap(k); w=Count[j]; i:=k;

 while 2*i<= h do

 begin j:=2*i;

 if j<n and Count[j] > Count[j+1] then j:=j+1;

 if v> Count[j] then Heap[i]:= Heap[j] else break ;

 i:= j

 end;

 Heap(i):=v;

Thủ tục tạo đống

Proc edure MakeHeap;

 For i:=1 to n do Heap[i]:=i;

 For k:=int(n/2) down to 1 do DownHeap(k,n);

Mã để tạo một đống cực tiểu

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

TỪ KHÓA LIÊN QUAN

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

w