1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chương 5: Các kỹ thuật thiết kế giải thuật ppsx

83 259 0
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 đề Chương 5: Các kỹ thuật thiết kế giải thuật PPSX
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 Kỹ Thuật Thiết Kế Giải Thuật
Thể loại Chương
Thành phố Hà Nội
Định dạng
Số trang 83
Dung lượng 1,86 MB

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

Nội dung

Bài toán cái túi d ng phân s tta 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... procedure DY_KNAPSACKV, W, M, X, n;/* V, W are

Trang 1

Ch ng 5

Các k thu t thi t k gi i thu t

Trang 2

N i dung

1 Qui ho ch ng

2 Gi i thu t tham lam

3 Gi i thu t quay lui

Trang 3

1 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

Trang 7

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

'‘Cho m t chu i <A1, A2, …, An> g m n matr n, v i m i

i = 1, 2, …, n, ma tr n Ai có kích th c pi-1 pi, ta m - ngo c tích này sao cho t i thi u hóa t ng s phép nhân vô

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

Trang 8

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 9

Di n t l i gi i m t cách quy

â , 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

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 10

M t c ng th c quy

Trang 11

M t nh n xét quan tr ng

nh n xét quan tr ng là

m óng ngo c c a xâu con A1A2 Ak bên trong s m

óng ngo c t i u c a xâu A1A2…An c ng ph i là m t s m

óng ngo c t i u''

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áncon

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 12

Tính nh ng chi phí t i u

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 chng: tính chi phí t i u b ng cách ti p c n t d i lên

Trang 17

B c 4 T o m t l i gi i t i u

a dùng m ng s[1 n, 1 n] xác nh cách t t nh t tínhtích xâu ma tr n M i ph n t s[i, j] ghi tr of 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

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 MATRIX-CHAIN-MULTIPLY sau

ây tính tích xâu ma tr n Ai j, Th t c tr v k t qu qua

tham s AIJ

V i l nh g i ban u là

MATRIX-CHAIN-MULTIPLY(A,s, 1, n, A1N)

Trang 19

ó ành ph n then ch t mà m t bài toán t i u hóa ph i

Trang 20

Nh ng bài toán con trùng l p

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áncon 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 21

Thí d ài toán chu i con chung dài nh t

chu i con subsequence) a m t chu i (sequence) là

chu i y sau khi b i m t vài ph n t

Trang 22

Ti u c u trúc t i u c a bài toán chu i con

1 N u xm = yn thì zk = xm = yn và Zk-1 là LCS c a Xm-1 và

Yn-1

2 N u xm yn, thì zk xm hàm ý Z là LCS c a Xm-1 và Y

3 N u xm yn, thì zk yn hàm ý Z là LCS c a X và Yn-1

Trang 23

ì m t LCS c a X và Y, ta có th c n tìm LCS c a X và

Yn-1 và LCS c a Xm-1 và Y Nh ng m i trong hai bài toán

con này có nh ng bài toán “cháu” tìm Xm-1 và Yn-1

G i c[i, j] là chi u dài c a LCS c a hai chu i Xi và Yj N u

i = 0 hay j = 0, thì LCS có chi u dài 0 Tính ch t ti u c u

trúc t i u c a bài toán LCS cho ra công th c quy sau:

c[i, j] = c[i-1, j-1]+1 n u i, j > 0 và xi = yj

max(c[i, j-1],c[i-1,j]) n u i,j >0 và xi yj (5.3)

Trang 25

begin c[i, j]: = c[i-1, j-1] + 1; b[i, j]: = “ ” end

else if c[i – 1, j] > = c[i, j-1] then

begin c[i, j]: = c[i – 1, j]; b[i, j]: = “↑” end

else

begin c[i, j]: = c[i, j-1]; b[i, j]: = “←” end

end;

Trang 26

0 0

0 0

0 0

Trang 28

Thí d Bài toán cái túi napsac

'‘M t k tr m t nh p vào m t c a hi u tìm th y có n m thà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.”

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 tcá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

Trang 29

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

value 4 5 10 11 13

Trang 31

cost[k] 0 0 4 5 5 8 10 11 12 14 15 16 18 20 21 22 24 best[k] A B B A C D A C C A C C D C C j=5

Trang 32

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

Trang 33

á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 thamlam 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

Gi i thu t tham lam

Trang 35

Gi i thu t tham lam cho bài toán x p l ch các

Trang 38

Hai thành ph n chính c a gi i thu t tham lam

ó hai tính ch t mà các bài toán ph i có có th áp d ng

gi i thu t tham lam là: (1) tính ch t l a ch n tham lam và(2) ti u c u trúc t i u

L a ch n c th c hi n b i gi i thu t tham lam tùy thu cvào nh ng l a ch n ã làm cho n bây gi , nh ng nó

không tùy thu c vào b t k l a ch n trong t ng lai hay

nh ng l i gi i c a nh ng bài toán con Nh v y, m t gi i

thu t tham lam ti n hành theo ki u t trên xu ng, th c hi n

m i lúc m t l a ch n tham lam

Tính ch t ti u c u trúc t i u (Optimal Substructure)

M t bài tóan có tính ch t ti u c u trúc t i u n u m t l i

gi i t i u ch a trong nó nh ng l i gi i t i u cho nh ngbài toán con

Trang 39

khác bi t gi a qui ho ch ng và gi i thu t tham lam

khi dùng gi i bài toán t i u là r t t nh

Bài toán cái túi d ng 0-1 c nh nghiã nh sau

'‘M t k tr m t nh p vào m t c a hi u tìm th y n lo i món

hàng có tr ng l ng và giá tr khác nhau (món hàng th i có giá

tr vi ô la và tr ng l ng wi), nh ng ch có m t cái túi v i s c

ch a v tr ng l ng là M mang các món hàng Bài toán cái túi

là tìm m t t h p các món hàng mà k tr m nên ch n b vào cái

túi t c m t giá tr t i a v i nh ng món hàng mà y l y

i.”.

Bài toán này c g i là bài toán cái túi d ng 0-1 vì m i

Trang 40

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

knapsack proble

rong bài toán cái túi d ng phân s , tình ti t c ng nh v y,

nh 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 itú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 wj -w ký c a m t hàng th j, nh ng món hàngcò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 –w) mà k tr m có th l y i t n-1 lo i m t

Trang 41

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

a 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

gi i bài toán cái túi d ng phân s , tr c tiên ta tính h sgiá tr ti n trên m t n v tr ng l ng (vi/wi ) c a t ng m thà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 càng

nhi u càng t t m t hàng có h s vi/wil n nhì và c nh thcho n khi y không còn có th mang thêm n a

Trang 42

ình 5.6

Trang 43

procedure DY_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ácmón hàng, gi ithu t này có

Trang 44

Mã Huffman

ph bi n và r t h u hi u cho vi c nén d li u, ti t ki m

t n s xu t hi n (frequency) c a m i ký t trong t p tin

c mã hóa.

Gi s chúng ta có m t t p tin 100000 ký t mà chúng

Trang 45

a b c d e f

T n s 45 13 12 16 9 5

Mã có chi u dài c nh 000 001 010 011 100 101

Mã có chi u dài thay i 0 101 100 111 1101 1100

b ng m t tràng bit nh phân.

di n t 6 ký t :

a = 000, b = 001, , f = 101

Trang 46

Mã có chi u dài thay i

mã có chi u dài thay i variable-length code có th làm

vi c t t h n m t mã có chi u dài c nh, nó cho nh ng ký thay xu t hi n nh ng mã ng n và nh ng ký t hay xu t hi n

Trang 47

Mã phi t Prefix

â ch xét nh ng cách mã hóa mà không có mã c a ký tnào là ti n t (prefix) c a mã c a m t ký t khác Nh ng cách

mã hóa nh v y c g i là mã phi ti n t (prefix-free-code)

Trang 48

Mã phi ti n t và cây nh phân

Bi u di n cho m t mã phi ti n t là m t cây nh phân v i m inút lá t ng ng v i các ký t c cho

Chúng ta phân gi i m t mã nh phân cho m t ký t nh là

sang con bên trái” và 1 ngh a là “r sang con bên ph i”

Mã t i u c a m t t p tin th ng c bi u di n b ng m t

c y nh phâ n y (full binary tree) M t cây nh phân y

là m t cây nh phân mà m i nút không ph i lá có haicon

N u C là t p ký t mà t ó các ký t l y ra, thì cây nh phâncho mã phi ti n t t i u có úng |C| nút lá, m i nút lá cho

m t ký t , và úng |C|-1 nút n i

Trang 49

58

a:45 b:13 c:12 d:16 e:9 f:5

14 86

14 28

0

0 1

1 0

0

1

e:9 f:5

14

30 0

d:16

1 b:13

Trang 50

Mã phi ti n t và cây nh phân tt

Cho m t cây T t ng ng v i m t mã phi ti n t , chúng ta có

th tính t ng s bit c n mã hóa m t t p tin

V i m i ký t c trong t p ký t C, dùng f(c) ký hi u t n s

xu t hi n c a c trong t p tin và dT(c) là chi u dài c a mã cho

ký t c Thì s bit òi h i mã hóa t p tin là

c C

Mà chúng ta coi là chi phí c a cây nh phân T

Trang 51

Huffman ã xu t m t gi i thu t tham lam c u t o m t

mã phi ti n t t i u c g i là mã Huffman (Huffman

code)

Gi i thu t t o m t cây nh phân T t ng ng v i mã t i utheo ki u t d i lên Gi i thu t b t u v i m t t p g m |C|nút lá và th c hi n m t chu i g m |C| tác v tr n t o ra cây cu i cùng

dùng nh n di n hai i t ng có t n s nh nh t tr n

l i v i nhau

K t qu c a vi c tr n hai i t ng là m t i t ng m i mà

C u t o mã Huffman

Trang 52

e:9 f:5

14

30 0

d:16

1 b:13

14

d:16 b:13

c:12

b:13 c:12

14

b:13 c:12

25

e:9 f:5

14

30 0

d:16 1

(f)

14

30 0

d:16

1 b:13

Trang 54

m i tác v làm vi c trên heap òi h i O(lgn), vòng l p

này óng góp chi phí O(nlgn) vào th i gian tính toán.

Nh v y, th i gian tính toán c a gi i thu t HUFFMAN

Trang 55

Gi i thu t quay lui

ph ng pháp t ng quát gi i quy t v n : thi t k

gi i thu t tìm l i gi i cho bài tóan không ph i là bám theo

m t t p qui lu t tính tóan c xác nh mà là b ng cách

th và s a sai (trial and error)

Khuôn m u thông th ng là phân rã quá trình th và s a

sai thành nh ng công tác b ph n Th ng thì nh ng côngtác b ph n này c di n t theo l i quy m t cách

thu n ti n và bao g m vi c th m dò m t s h u h n nh ngcông tác con

Ta có th coi toàn b quá trình này nh là m t quá trình tìm

ki m (search process) mà d n d n c u t o và duy t qua m t

Trang 56

Cho m t bàn c n n v i n2 ô M t con hi p s – c di

chuy n tuân theo lu t ch i c vua – c t trên bàn c t i

Trang 57

if not successful then erase previous recordingend

end

until (move was successful) ∨ (no more candidates)

Trang 59

procedure ( ; x,y : index; var q: boolean);

var u, v: integer; q1 : boolean;

begin initialize selection for moves;

repeat let u, v be the coordinates of the next move ;

if (1≤u≤n) ∧ (1≤v≤n) ∧ (h[u,v]=0) then

begin h[u,v]:=i;

begintry(i + 1, u, v, q1); if ¬ q1 then h[u,v]:=0end

else q1:= trueend

until q1 ∨ (no more candidates);

q:=q1

Trang 60

ho t a c a hi n hành <x, y>, có 8 kh n ng ch n ô k

ti p <u, v> i t i Chúng c ánh s t 1 n 8 nh sau:

7 6

8 5

1 4

2 3

Trang 61

a,b: array [1 8] of integer;

h: array [index, index] of integer;

Trang 62

procedure ( ; x, y: index; var q:boolean);

var k,u,v : integer; q1: boolean;

try(i+1, u,v,q1);

if ¬ q1 then h[u,v]:=0 end

else q1:=true end

until q1 ∨ (k =8);

q:=q1

Trang 63

1,2,2; b[1]:= 1;

for j:=1 to n dowrite(h[i,j]:5);

writelnend

else writeln ( NOSOLUTION’)

end

Trang 64

Th t c quy c kh i ng b ng l nh g i v i t a kh i u x0,

y0 , t ó chuy n i b t u.

H[x0,y0]:= 1; try(2, x0, y0, q) Hình 5.3.1 trình bày m t l i gi i t c v i v trí <1,1> v i n = 5.

23 12

3 13

11 22

2

20

21 10

1

Trang 65

thí d trên ta i n v i m t ki u “gi i quy t v n

” m i:

c i m chính là

“b c h ng v l i gi i y và ghi l i thông tin

v b c này mà sau ó nó có th b tháo g và xóa i khi phát hi n r ng b c này ã không d n n l i

gi i y , t c là m t b c i d n n “ tình th b

t c ”(dead-end) (Hành vi này c g i là quay lui

-bactracking.)

Trang 66

record it;

if solution incomplete thenbegin

if not successful then cancel recordingend

enduntil successful ∨ no more candidates

end

Khu n m u t ng quát c a gi i thu t quay lui

Trang 67

procedure try (i: integer);

var k : integer;

begin k:=0;

repeat k:=k+1; select k-th candidate;

if acceptable then begin

record it;

if i<n then begin

try (i+1); (5.3.4)

if not successful then

cancel recording end

end until successful ∨ (k=m) end

Trang 68

à toán này ã c C.F Gauss kh o sát n m 1850,

nh ng ông ta không hoàn toàn gi i quy t c.

“ Tám con h u c t vào bàn c sao cho không có con h u nào có th t n công con h u nào ”.

Dùng khuôn m u hình 5.3.1, ta s có c m t th

t c sau cho bài toán 8 con h u:

Bài toán 8 con h u

Trang 69

procedure (i: integer);

Trang 70

Lu t c : M t con h u có th t n công các con h u khác n m trên

cùng m t hàng, cùng m t c t hay là cùng ng chéo trên bàn c Cách bi u di n d li u

Làm cách nào di n t 8 con h u trên bàn c ?

var array 1 8] of integer;

a: array[1 8] of Boolean;

b: array[b1 b2] of Boolean;

c: array[c1 c2] of Boolean;

v i

x[i] ch v trí c a con h u trên c t th i;

a[j] cho bi t không có con h u trên hàng th j;

b[k] cho bi t không có con h u trên ng chéo th k;

c[k] cho bi t không có con h u trên ng chéo th k.

Trang 71

Vi c ch n tr cho các m c b1, b2, c1, c2 c xác nh

b i cách mà các ch s c a các m ng b và c c tính Hãy chú ý r ng trên cùng m t ng chéo chi u t t

c các ô s có cùng giá tr c a t ng hai t a i +j, và trên cùng m t ng chép chi u diagonal, t t c

các ô s có cùng giá tr c a hi u hai t a (i j ).

Nh v y, phát bi u setqueen c tinh ch nh sau:

a[j]:=false; b[i+j]:=false;c[i-j]:=false;

Phát bi u removequeen c chi ti t hóa nh sau:

a[j] = true; b[i+j] = true ; c[i-j] := true

safe c di n t nh sau:

Trang 72

try (i+1, q);

if ¬ q then begin

a[j]:=true; b[i+j]:=true;

c[i-j]:=true end

end else q:=true end

until q ∨ (j=8) end {try};

Trang 74

H H

H

H H

Trang 76

end

Trang 77

rong gi i thu t m r ng, n gi n hóa i u ki n d ng

c a quá trình ch n, phát bi u repeat c thay th b ng phát

if a[j] ∧ b[i+j] ∧ c[i-j] then begin

Trang 79

hai l i gi i ó c li t kê trong b ng sau:

Trang 80

Cây kh ng gian tr ng thái

! ti n di n t gi i thu t quay lui, ta xây d ng c u trúc cây ghi nh ng l a ch n ã c th c hi n C u trúc cây này

c g i là cây không gian tr ng thái (state space tree) haycây tìm ki m (search tree)

! Nút r c a cây di n t tr ng thái u tiên tr c khi quá

Ngày đăng: 05/08/2014, 20:21

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 - Chương 5: Các kỹ thuật 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 (Trang 14)
Hình 5.5 M t thí d - Chương 5: Các kỹ thuật thiết kế giải thuật ppsx
Hình 5.5 M t thí d (Trang 37)

TỪ KHÓA LIÊN QUAN

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

w