1. Trang chủ
  2. » Khoa Học Tự Nhiên

Tài liệu Chuyên đề Toán cao cấp doc

258 664 1

Đ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 258
Dung lượng 4,62 MB

Nội dung

PH NG PHÁP SINH GENERATE ..... AssignInput, 'ANALYSE.INP'; ResetInput; AssignOutput, 'ANALYSE.OUT'; RewriteOutput; Xét bàn c t ng quát kích th c nxn.

Trang 3

M C L C

§0 GI I THI U 2

§1 NH C L I M T S KI N TH C I S T H P 3

I CH NH H P L P 3

II CH NH H P KHÔNG L P 3

III HOÁN V 3

IV T H P 3

§2 PH NG PHÁP SINH (GENERATE) 5

I SINH CÁC DÃY NH PHÂN DÀI N 6

II LI T KÊ CÁC T P CON K PH N T 7

III LI T KÊ CÁC HOÁN V 9

§3 THU T TOÁN QUAY LUI 12

I LI T KÊ CÁC DÃY NH PHÂN DÀI N 13

II LI T KÊ CÁC T P CON K PH N T 14

III LI T KÊ CÁC CH NH H P KHÔNG L P CH P K 15

IV BÀI TOÁN PHÂN TÍCH S 16

V BÀI TOÁN X P H U 18

§4 K THU T NHÁNH C N 22

I BÀI TOÁN T I U 22

II S BÙNG N T H P 22

III MÔ HÌNH K THU T NHÁNH C N 22

IV BÀI TOÁN NG I DU L CH 23

V DÃY ABC 25

Trang 4

có g i là bài toán li t kê t h p.

gi i bài toán li t kê, c n ph i xác đ nh đ c m t thu t toán đ có th theo đó l n l t xây d ng

đ c t t c các c u hình đang quan tâm Có nhi u ph ng pháp li t kê, nh ng chúng c n ph i đáp

ng đ c hai yêu c u d i đây:

• Không đ c l p l i m t c u hình

• Không đ c b sót m t c u hình

Có th nói r ng, ph ng pháp li t kê là ph ng k cu i cùng đ gi i đ c m t s bài toán t h p

hi n nay Khó kh n chính c a ph ng pháp này chính là s bùng n t h p xây d ng 1 t c uhình (con s này không ph i là l n đ i v i các bài toán t h p - Ví d li t kê các cách x p n≥13

ng i quanh m t bàn tròn) và gi thi t r ng m i thao tác xây d ng m t kho ng 1 giây, ta ph i m tquãng 31 n m m i gi i xong Tuy nhiên cùng v i s phát tri n c a máy tính đi n t , b ng ph ngpháp li t kê, nhi u bài toán t h p đã tìm th y l i gi i Qua đó, ta c ng nên bi t r ng ch nên dùng

ph ng pháp li t kê khi không còn m t ph ng pháp nào khác tìm ra l i gi i Chính nh ng n

l c gi i quy t các bài toán th c t không dùng ph ng pháp li t kê đã thúc đ y s phát tri n c anhi u ngành toán h c

Cu i cùng, nh ng tên g i sau đây, tuy v ngh a không ph i đ ng nh t, nh ng trong m t s tr ng

h p ng i ta có th dùng l n ngh a c a nhau đ c ó là:

• Ph ng pháp li t kê

• Ph ng pháp vét c n trên t p ph ng án

• Ph ng pháp duy t toàn b

Trang 5

A =

II CH NH H P KHÔNG L P

Khi f là đ n ánh có ngh a là v i ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j Nói m t cách d hi u, khi dãy giá

tr f(1), f(2), , f(k) g m các ph n t thu c S khác nhau đôi m t thì f đ c g i là m t ch nh h p

không l p ch p k c a S Ví d m t ch nh h p không l p (C, A, E):

!n)1kn) (

2n)(

1n(n

Akn

=+

Khi k = n M t ch nh h p không l p ch p n c a S đ c g i là m t hoán v các ph n t c a S.

Ví d : m t hoán v : (A, D, C, E, B, F) c a S = {A, B, C, D, E, F}

ý r ng khi k = n thì s ph n t c a t p X = {1, 2, , n} đúng b ng s ph n t c a S Do tính ch tđôi m t khác nhau nên dãy f(1), f(2), , f(n) s li t kê đ c h t các ph n t trong S Nh v y f làtoàn ánh M t khác do gi thi t f là ch nh h p không l p nên f là đ n ánh Ta có t ng ng 1-1 gi acác ph n t c a X và S, do đó f là song ánh V y nên ta có th đ nh ngh a m t hoán v c a S là m tsong ánh gi a {1, 2, , n} và S

S hoán v c a t p g m n ph n t = s ch nh h p không l p ch p n:

!n

Pn =

IV T H P

M t t p con g m k ph n t c a S đ c g i là m t t h p ch p k c a S.

Trang 6

L y m t t p con k ph n t c a S, xét t t c k! hoán v c a t p con này D th y r ng các hoán v đó

là các ch nh h p không l p ch p k c a S Ví d l y t p {A, B, C} là t p con c a t p S trong ví dtrên thì: (A, B, C), (C, A, B), (B, C, A), là các ch nh h p không l p ch p 3 c a S i u đó t c làkhi li t kê t t c các ch nh h p không l p ch p k thì m i t h p ch p k s đ c tính k! l n V y:

S t h p ch p k c a t p g m n ph n t :

)!

kn(k

!n

!k

AC

k n k n

n 1

n 0

Trang 7

Th t đó g i là th t t đi n trên các dãy đ dài n.

Khi đ dài hai dãy a và b không b ng nhau, ng i ta c ng xác đ nh đ c th t t đi n B ng cáchthêm vào cu i dãy a ho c dãy b nh ng ph n t đ c bi t g i là ph n t ∅ đ đ dài c a a và b b ng

Trang 8

nhau, và coi nh ng ph n t ∅ này nh h n t t c các ph n t khác, ta l i đ a v xác đ nh th t t

đi n c a hai dãy cùng đ dài Ví d :

• (1, 2, 3, 4) < (5, 6)

• (a, b, c) < (a, b, c, d)

• 'calculator' < 'computer'

I SINH CÁC DÃY NH PHÂN Đ DÀI N

M t dãy nh phân đ dài n là m t dãy x = x1x2 xn trong đó xi ∈ {0, 1} (∀i : 1 ≤ i ≤ n)

D th y: m t dãy nh phân x đ dài n là bi u di n nh phân c a m t giá tr nguyên p(x) nào đó n mtrong đo n [0, 2n

- 1] S các dãy nh phân đ dài n = s các s nguyên ∈ [0, 2n

Nh v y dãy đ u tiên s là 00 0 và dãy cu i cùng s là 11 1 Nh n xét r ng n u dãy x = (x1, x2, ,

xn) là dãy đang có và không ph i dãy cu i cùng thì dãy k ti p s nh n đ c b ng cách c ng thêm 1( theo c s 2 có nh ) vào dãy hi n t i

D li u vào (Input): nh p t file v n b n BSTR.INP ch a s nguyên d ng n ≤ 30

K t qu ra(Output): ghi ra file v n b n BSTR.OUT các dãy nh phân đ dài n

BSTR.INP BSTR.OUT

001 010 011 100 101 110 111

PROG02_1.PAS * Thu t toán sinh li t kê các dãy nh phân đ dài n

program Binary_Strings;

const

max = 30;

Trang 9

x: array[1 max] of Integer;

n, i: Integer;

begin

{ nh ngh a l i thi t b nh p/xu t chu n}

Assign(Input, 'BSTR.INP'); Reset(Input);

Assign(Output, 'BSTR.OUT'); Rewrite(Output);

ReadLn(n);

FillChar(x, SizeOf(x), 0); {C u hình ban đ u x 1 = x 2 = = x n := 0}

for i := 1 to n do Write(x[i]); {In ra c u hình hi n t i}

WriteLn;

i := n; {x i là ph n t cu i dãy, lùi d n i cho t i khi g p s 0 ho c khi i = 0 thì d ng}

while (i > 0) and (x[i] = 1) do Dec(i);

II LI T KÊ CÁC T P CON K PH N T

Ta s l p ch ng trình li t kê các t p con k ph n t c a t p {1, 2, , n} theo th t t đi n

Còn t t nhiên, gi i h n d i c a x i (giá tr nh nh t x i có th nh n) là x i-1 + 1.

Nh v y n u ta đang có m t dãy x đ i di n cho m t t p con, n u x là c u hình k t thúc có ngh a là

t t c các ph n t trong x đ u đã đ t t i gi i h n trên thì quá trình sinh k t thúc, n u không thì ta

ph i sinh ra m t dãy x m i t ng d n tho mãn v a đ l n h n dãy c theo ngh a không có m t t p

con k ph n t nào chen gi a chúng khi s p th t t đi n

Ví d : n = 9, k = 6 C u hình đang có x = {1, 2, 6, 7, 8, 9} Các ph n t x 3 đ n x 6 đã đ t t i gi i

h n trên nên đ sinh c u hình m i ta không th sinh b ng cách t ng m t ph n t trong s các x 6 , x 5 ,

x 4 , x 3 lên đ c, ta ph i t ng x 2 = 2 lên thành x 2 = 3 c c u hình m i là x = {1, 3, 6, 7, 8, 9} C u hình này đã tho mãn l n h n c u hình tr c nh ng ch a tho mãn tính ch t v a đ l n mu n v y

Trang 10

• Tìm t cu i dãy lên đ u cho t i khi g p m t ph n t xi ch a đ t gi i h n trên n - k + i.

{ nh ngh a l i thi t b nh p/xu t chu n}

Assign(Input, 'SUBSET.INP'); Reset(Input);

Assign(Output, 'SUBSET.OUT'); Rewrite(Output);

i := k; {x i là ph n t cu i dãy, lùi d n i cho t i khi g p m t x i ch a đ t gi i h n trên n - k + i}

while (i > 0) and (x[i] = n - k + i) do Dec(i);

Trang 11

III LI T KÊ CÁC HOÁN V

Ta s l p ch ng trình li t kê các hoán v c a {1, 2, , n} theo th t t đi n

Nh v y hoán v đ u tiên s là (1, 2, , n) Hoán v cu i cùng là (n, n-1, , 1)

Hoán v s sinh ra ph i l n h n hoán v hi n t i, h n th n a ph i là hoán v v a đ l n h n hoán v

hi n t i theo ngh a không th có m t hoán v nào khác chen gi a chúng khi s p th t

Gi s hoán v hi n t i là x = (3, 2, 6, 5, 4, 1), xét 4 ph n t cu i cùng, ta th y chúng đ c x p gi m

d n, đi u đó có ngh a là cho dù ta có hoán v 4 ph n t này th nào, ta c ng đ c m t hoán v bé

h n hoán v hi n t i! Nh v y ta ph i xét đ n x2 = 2, thay nó b ng m t giá tr khác Ta s thay b nggiá tr nào?, không th là 1 b i n u v y s đ c hoán v nh h n, không th là 3 vì đã có x1 = 3 r i(ph n t sau không đ c ch n vào nh ng giá tr mà ph n t tr c đã ch n) Còn l i các giá tr 4, 5,

6 Vì c n m t hoán v v a đ l n h n hi n t i nên ta ch n x2 = 4 Còn các giá tr (x3, x4, x5, x6) s

l y trong t p {2, 6, 5, 1} C ng vì tính v a đ l n nên ta s tìm bi u di n nh nh t c a 4 s này gáncho x3, x4, x5, x6 t c là (1, 2, 5, 6) V y hoán v m i s là (3, 4, 1, 2, 5, 6)

(3, 2, 6, 5, 4, 1) → (3, 4, 1, 2, 5, 6).

Ta có nh n xét gì qua ví d này: o n cu i c a hoán v đ c x p gi m d n, s x5 = 4 là s nh nh ttrong đo n cu i gi m d n tho mãn đi u ki n l n h n x2 = 2 N u đ i ch x5 cho x2 thì ta s đ c x2

= 4 và đo n cu i v n đ c s p x p gi m d n Khi đó mu n bi u di n nh nh t cho các giá tr

trong đo n cu i thì ta ch c n đ o ng c đo n cu i

Trong tr ng h p hoán v hi n t i là (2, 1, 3, 4) thì hoán v k ti p s là (2, 1, 4, 3) Ta c ng có thcoi hoán v (2, 1, 3, 4) có đo n cu i gi m d n, đo n cu i này ch g m 1 ph n t (4)

V y k thu t sinh hoán v k ti p t hoán v hi n t i có th xây d ng nh sau:

Xác đ nh đo n cu i gi m d n dài nh t, tìm ch s i c a ph n t x i đ ng li n tr c đo n cu i đó.

i u này đ ng ngh a v i vi c tìm t v trí sát cu i dãy lên đ u, g p ch s i đ u tiên th a mãn x i

< x i+1 N u toàn dãy đã là gi m d n, thì đó là c u hình cu i.

i := n - 1;

while (i > 0) and (x i > x i+1 ) do i := i - 1;

Trong đo n cu i gi m d n, tìm ph n t x k nh nh t tho mãn đi u ki n x k > x i Do đo n cu i

gi m d n, đi u này th c hi n b ng cách tìm t cu i dãy lên đ u g p ch s k đ u tiên tho mãn

x k > x i (có th dùng tìm ki m nh phân).

k := n;

while x k < x i do k := k - 1;

i ch x k và x i , l t ng c th t đo n cu i gi m d n (t x i+1 đ n x k ) tr thành t ng d n.

Input: file v n b n PERMUTE.INP ch a s nguyên d ng n ≤ 12

Output: file v n b n PERMUTE.OUT các hoán v c a dãy (1, 2, , n)

Trang 12

PROG02_3.PAS * Thu t toán sinh li t kê hoán v program Permute;

Assign(Input, 'PERMUTE.INP'); Reset(Input);

Assign(Output, 'PERMUTE.OUT'); Rewrite(Output);

1 Các ch ng trình trên x lý không t t trong tr ng h p t m th ng, đó là tr ng h p n = 0 đ i

v i ch ng trình li t kê dãy nh phân c ng nh trong ch ng trình li t kê hoán v , tr ng h p k = 0

đ i v i ch ng trình li t kê t h p, hãy kh c ph c đi u đó

2 Li t kê các dãy nh phân đ dài n có th coi là li t kê các ch nh h p l p ch p n c a t p 2 ph n t{0, 1} Hãy l p ch ng trình:

Nh p vào hai s n và k, li t kê các ch nh h p l p ch p k c a {0, 1, , n -1}

Trang 13

c a t p {1, 2, , n} Ch có đi u khi in t p con, ta không in giá tr s {1, 3, 5} mà thay vào đó s in

ra {Tên[1], Tên [3], Tên[5]} T c là in ra nh c a các giá tr tìm đ c qua ánh x

5 Li t kê t t c các t p con c a t p {1, 2, , n} Có th dùng ph ng pháp li t kê t p con nh trên

ho c dùng ph ng pháp li t kê t t c các dãy nh phân M i s 1 trong dãy nh phân t ng ng v i

m t ph n t đ c ch n trong t p Ví d v i t p {1, 2, 3, 4} thì dãy nh phân 1010 s t ng ng v i

t p con {1, 3} Hãy l p ch ng trình in ra t t c các t p con c a {1, 2, , n} theo hai ph ng pháp

5 Nh p vào danh sách tên n ng i, in ra t t c các cách x p n ng i đó vào m t bàn

6 Nh p vào danh sách n ng i nam và n ng i n , in ra t t c các cách x p 2n ng i đó vào m tbàn tròn, m i ng i nam ti p đ n m t ng i n

7 Ng i ta có th dùng ph ng pháp sinh đ li t kê các ch nh h p không l p ch p k Tuy nhiên có

m t cách là li t kê t t c các t p con k ph n t c a t p h p, sau đó in ra đ k! hoán v c a nó Hãy

vi t ch ng trình li t kê các ch nh h p không l p ch p k c a {1, 2, , n}

8 Li t kê t t c các hoán v ch cái trong t MISSISSIPPI theo th t t đi n

9 Li t kê t t c các cách phân tích s nguyên d ng n thành t ng các s nguyên d ng, hai cáchphân tích là hoán v c a nhau ch tính là m t cách

Cu i cùng, ta có nh n xét, m i ph ng pháp li t kê đ u có u, nh c đi m riêng và ph ng phápsinh c ng không n m ngoài nh n xét đó Ph ng pháp sinh không th sinh ra đ c c u hình th

p n u nh ch a có c u hình th p - 1, ch ng t r ng ph ng pháp sinh t ra u đi m trong tr ng

h p li t kê toàn b m t s l ng nh c u hình trong m t b d li u l n thì l i có nh c đi m và

ít tính ph d ng trong nh ng thu t toán duy t h n ch H n th n a, không ph i c u hình ban đ ulúc nào c ng d tìm đ c, không ph i k thu t sinh c u hình k ti p cho m i bài toán đ u đ n gi n

nh trên (Sinh các ch nh h p không l p ch p k theo th t t đi n ch ng h n) Ta sang m t chuyên

m c sau nói đ n m t ph ng pháp li t kê có tính ph d ng cao h n, đ gi i các bài toán li t kê

ph c t p h n đó là: Thu t toán quay lui (Back tracking)

Trang 14

§3 THU T TOÁN QUAY LUI

Thu t toán quay lui dùng đ gi i bài toán li t kê các c u hình M i c u hình đ c xây d ng

Mô hình c a thu t toán quay lui có th mô t nh sau:

{Th t c này th cho x i nh n l n l t các giá tr mà nó có th nh n}

procedure Try(i: Integer);

<Ghi nh n vi c cho x i nh n giá tr V (N u c n)>;

Try(i + 1); {G i đ quy đ ch n ti p x i+1 }

―― <N u c n, b ghi nh n vi c th x i := V, đ th giá tr khác>;

end;

end;

end;

Thu t toán quay lui s b t đ u b ng l i g i Try(1)

Ta có th trình bày quá trình tìm ki m l i gi i c a thu t toán quay lui b ng cây sau:

Try(2)

Try(2) Try(1)

Hình 1: Cây tìm ki m quay lui

Trang 15

I LI T KÊ CÁC DÃY NH PHÂN Đ DÀI N

Input/Output v i khuôn d ng nh trong PROG2_1.PAS

Bi u di n dãy nh phân đ dài N d i d ng (x1, x2, , xn) Ta s li t kê các dãy này b ng cách thdùng các giá tr {0, 1} gán cho xi V i m i giá tr th gán cho xi l i th các giá tr có th gán cho

xi+1.Ch ng trình li t kê b ng thu t toán quay lui có th vi t:

PROG03_1.PAS * Thu t toán quay lui li t kê các dãy nh phân đ dài n

Assign(Input, 'BSTR.INP'); Reset(Input);

Assign(Output, 'BSTR.OUT'); Rewrite(Output);

Trang 16

II LI T KÊ CÁC T P CON K PH N T

Input/Output có khuôn d ng nh trong PROG02_2.PAS

li t kê các t p con k ph n t c a t p S = {1, 2, , n} ta có th đ a v li t kê các c u hình (x1, x2, , xk) đây các xi ∈ S và x1 < x2 < < xk Ta có nh n xét:

PROG03_2.PAS * Thu t toán quay lui li t kê các t p con k ph n t

Assign(Input, 'SUBSET.INP'); Reset(Input);

Assign(Output, 'SUBSET.OUT'); Rewrite(Output);

Trang 17

N u đ ý ch ng trình trên và ch ng trình li t kê dãy nh phân đ dài n, ta th y v c b n chúng

ch khác nhau th t c Try(i) - ch n th các giá tr cho x i , ch ng trình li t kê dãy nh phân ta

th ch n các giá tr 0 ho c 1 còn ch ng trình li t kê các t p con k ph n t ta th ch n x i là m t trong các giá tr nguyên t x i-1 + 1 đ n n - k + i Qua đó ta có th th y tính ph d ng c a thu t toán quay lui: mô hình cài đ t có th thích h p cho nhi u bài toán, khác v i ph ng pháp sinh tu n t ,

v i m i bài toán l i ph i có m t thu t toán sinh k ti p riêng làm cho vi c cài đ t m i bài m t khác, bên c nh đó, không ph i thu t toán sinh k ti p nào c ng d cài đ t.

III LI T KÊ CÁC CH NH H P KHÔNG L P CH P K

li t kê các ch nh h p không l p ch p k c a t p S = {1, 2, , n} ta có th đ a v li t kê các c uhình (x1, x2, , xk) đây các xi ∈ S và khác nhau đôi m t

Nh v y th t c Try(i) - xét t t c các kh n ng ch n xi - s th h t các giá tr t 1 đ n n, mà các giá

tr này ch a b các ph n t đ ng tr c ch n Mu n xem các giá tr nào ch a đ c ch n ta s d ng

Trang 18

Assign(Input, 'ARRANGES.INP'); Reset(Input);

Assign(Output, 'ARRANGES.OUT'); Rewrite(Output);

Nh n xét: khi k = n thì đây là ch ng trình li t kê hoán v

IV BÀI TOÁN PHÂN TÍCH S

4 Th t c đ quy Try(i) s th các giá tr có th nh n c a xi (xi ≥ xi - 1)

5 Khi nào thì in k t qu và khi nào thì g i đ quy tìm ti p ?

L u ý r ng ti - 1 là t ng c a t t c các ph n t t x1đ n xi-1 do đó

• Khi ti = n t c là (xi = n - ti - 1) thì in k t qu

• Khi tìm ti p, xi+1 s ph i l n h n ho c b ng xi M t khác ti+1 là t ng c a các s t x1 t i xi+1không đ c v t quá n V y ta có ti+1 ≤ n ⇔ ti-1 + xi + xi+1 ≤ n ⇔ xi + xi + 1 ≤ n - ti - 1 t c là xi

Trang 19

≤ (n - ti - 1)/2 Ví d đ n gi n khi n = 10 thì ch n x1 = 6, 7, 8, 9 là vi c làm vô ngh a vì nh

v y c ng không ra nghi m mà c ng không ch n ti p x2đ c n a

M t cách d hi u ta g i đ quy tìm ti p khi giá tr x i đ c ch n còn cho phép ch n thêm m t

ph n t khác l n h n ho c b ng nó mà không làm t ng v t quá n Còn ta in k t qu ch khi

x i mang giá tr đúng b ng s thi u h t c a t ng i-1 ph n t đ u so v i n.

6 V y th t c Try(i) th các giá tr cho xi có th mô t nh sau: (đ t ng quát cho i = 1, ta đ t x0 =

1 và t0 = 0)

• Xét các giá tr c a xi t xi - 1đ n (n - ti-1) div 2, c p nh t ti := ti - 1 + xi và g i đ quy tìm ti p

• Cu i cùng xét giá tr xi = n - ti-1 và in k t qu t x1đ n xi

Input: file v n b n ANALYSE.INP ch a s nguyên d ng n ≤ 30

Output: file v n b n ANALYSE.OUT ghi các cách phân tích s n.

Trang 20

Assign(Input, 'ANALYSE.INP'); Reset(Input);

Assign(Output, 'ANALYSE.OUT'); Rewrite(Output);

Xét bàn c t ng quát kích th c nxn M t quân h u trên bàn c có th n đ c các quân khác n m

t i các ô cùng hàng, cùng c t ho c cùng đ ng chéo Hãy tìm các x p n quân h u trên bàn c saocho không quân nào n quân nào

V y m t nghi m c a bài toán s đ c bi t khi ta tìm ra đ c v trí c t c a nh ng quân h u.

• N u ta đ nh h ng ông (Ph i), Tây (Trái), Nam (D i), B c (Trên) thì ta nh n th y r ng:

♦ M t đ ng chéo theo h ng ông B c - Tây Nam ( B-TN) b t k s đi qua m t s ô, các ô

Trang 21

• Ban đ u c 3 m ng đánh d u đ u mang giá tr TRUE (Các c t và đ ng chéo đ u t do)

2 Thu t toán quay lui: Xét t t c các c t, th đ t quân h u 1 vào m t c t, v i m i cách đ t nh v y,xét t t c các cách đ t quân h u 2 không b quân h u 1 n, l i th 1 cách đ t và xét ti p các cách đ tquân h u 3 M i cách đ t đ c đ n quân h u n cho ta 1 nghi m

3 Khi ch n v trí c t j cho quân h u th i, thì ta ph i ch n ô(i, j) không b các quân h u đ t tr c đó

n, t c là ph i ch n c t j còn t do, đ ng chéo B-TN (i+j) còn t do, đ ng chéo N-TB(i-j)còn t do i u này có th ki m tra (aj = bi+j = ci-j = TRUE)

4 Khi th đ t đ c quân h u th i vào c t j, n u đó là quân h u cu i cùng (i = n) thì ta có m tnghi m N u không:

Tr c khi g i đ quy tìm cách đ t quân h u th i + 1, ta đánh d u c t và 2 đ ng chéo b quân

h u v a đ t kh ng ch (aj = bi+j = ci-j := FALSE) đ các l n g i đ quy ti p sau ch n cách đ tcác quân h u k ti p s không ch n vào nh ng ô n m trên c t j và nh ng đ ng chéo này n a

Sau khi g i đ quy tìm cách đ t quân h u th i + 1, có ngh a là s p t i ta l i th m t cách đ tkhác cho quân h u th i, ta b đánh d u c t và 2 đ ng chéo b quân h u v a th đ t kh ng ch(aj = bi+j = ci-j := TRUE) t c là c t và 2 đ ng chéo đó l i thành t do, b i khi đã đ t quân h u isang v trí khác r i thì c t và 2 đ ng chéo đó hoàn toàn có th gán cho m t quân h u khác

Hãy xem l i trong các ch ng trình li t kê ch nh h p không l p và hoán v v k thu t đánh d u đây ch khác v i li t kê hoán v là: li t kê hoán v ch c n m t m ng đánh d u xem giá tr có t do không, còn bài toán x p h u thì c n ph i đánh d u c 3 thành ph n: C t, đ ng chéo B-TN,

đ ng chéo N- TB Tr ng h p đ n gi n h n: Yêu c u li t kê các cách đ t n quân xe lên bàn c nxn sao cho không quân nào n quân nào chính là bài toán li t kê hoán v

Input: file v n b n QUEENS.INP ch a s nguyên d ng n ≤ 12

Output: file v n b n QUEENS.OUT, m i dòng ghi m t cách đ t n quân h u

Trang 22

b: array[2 2 * max] of Boolean;

c: array[1 - max max - 1] of Boolean;

procedure Init;

begin

ReadLn(n);

FillChar(a, SizeOf(a), True); {M i c t đ u t do}

FillChar(b, SizeOf(b), True); {M i đ ng chéo ông B c - Tây Nam đ u t do}

――FillChar(c, SizeOf(c), True); {M i đ ng chéo ông Nam - Tây B c đ u t do}

x[i] := j; {Th đ t quân h u i vào c t j}

――――――――if i = n then PrintResult

Assign(Input, 'QUEENS.INP'); Reset(Input);

Assign(Output, 'QUEENS.OUT'); Rewrite(Output);

Init;

Trang 23

th ch n xi nó s g i đ quy đ tìm ti p xi+1 có ngh a là quá trình s duy t ti n sâu xu ng phía d i

đ n t n nút lá, sau khi đã duy t h t các nhánh, ti n trình lùi l i th áp đ t m t giá tr khác cho xi, đóchính là ngu n g c c a tên g i "thu t toán quay lui"

5 Li t kê t t c các t p con c a t p S g m n s nguyên {S1, S2, , Sn} nh p vào t bàn phím

6 T ng t nh bài 5 nh ng ch li t kê các t p con có max - min ≤ T (T cho tr c)

7 M t dãy (x1, x2, , xn) g i là m t hoán v hoàn toàn c a t p {1, 2, , n} n u nó là m t hoán v vàtho mãn xi ≠ i v i ∀i: 1 ≤ i ≤ n Hãy vi t ch ng trình li t kê t t c các hoán v hoàn toàn c a t ptrên (n vào t bàn phím)

8 S a l i th t c in k t qu (PrintResult) trong bài x p h u đ có th v hình bàn c và các cách đ t

h u ra màn hình

9 Bài toán mã đi tu n: Cho bàn c t ng quát kích th c nxn và m t quân Mã, hãy ch ra m t hànhtrình c a quân Mã xu t phát t ô đang đ ng đi qua t t c các ô còn l i c a bàn c , m i ô đúng 1 l n

10 Chuy n t t c các bài t p trong bài tr c đang vi t b ng sinh tu n t sang quay lui

11 Xét s đ giao thông g m n nút giao thông đánh s t 1 t i n và m đo n đ ng n i chúng, m i

đo n đ ng n i 2 nút giao thông Hãy nh p d li u v m ng l i giao thông đó, nh p s hi u hainút giao thông s và d Hãy in ra t t c các cách đi t s t i d mà m i cách đi không đ c qua nút giaothông nào quá m t l n

Trang 24

§4 K THU T NHÁNH C N

I BÀI TOÁN T I U

M t trong nh ng bài toán đ t ra trong th c t là vi c tìm ra m t nghi m tho mãn m t s đi u ki n

nào đó, và nghi m đó là t t nh t theo m t ch tiêu c th , nghiên c u l i gi i các l p bài toán t i u

thu c v l nh v c quy ho ch toán h c Tuy nhiên c ng c n ph i nói r ng trong nhi u tr ng h pchúng ta ch a th xây d ng m t thu t toán nào th c s h u hi u đ gi i bài toán, mà cho t i nay

vi c tìm nghi m c a chúng v n ph i d a trên mô hình li t kê toàn b các c u hình có th và đánhgiá, tìm ra c u hình t t nh t Vi c li t kê c u hình có th cài đ t b ng các ph ng pháp li t kê: Sinh

tu n t và tìm ki m quay lui D i đây ta s tìm hi u ph ng pháp li t kê b ng thu t toán quay lui

đ tìm nghi m c a bài toán t i u

II S BÙNG N T H P

Mô hình thu t toán quay lui là tìm ki m trên 1 cây phân c p N u gi thi t r ng ng v i m i nút

t ng ng v i m t giá tr đ c ch n cho xi s ng v i ch 2 nút t ng ng v i 2 giá tr mà xi+1 có

th nh n thì cây n c p s có t i 2n nút lá, con s này l n h n r t nhi u l n so v i d li u đ u vào n.Chính vì v y mà n u nh ta có thao tác th a trong vi c ch n xi thì s ph i tr giá r t l n v chi phí

th c thi thu t toán b i quá trình tìm ki m lòng vòng vô ngh a trong các b c ch n k ti p xi+1, xi+2, Khi đó, m t v n đ đ t ra là trong quá trình li t kê l i gi i ta c n t n d ng nh ng thông tin đã tìm

đ c đ lo i b s m nh ng ph ng án ch c ch n không ph i t i u K thu t đó g i là k thu tđánh giá nhánh c n trong ti n trình quay lui

III MÔ HÌNH K THU T NHÁNH C N

D a trên mô hình thu t toán quay lui, ta xây d ng mô hình sau:

procedure Init;

begin

<Kh i t o m t c u hình b t k BESTCONFIG>;

end;

{Th t c này th ch n cho x i t t c các giá tr nó có th nh n}

procedure Try(i: Integer);

Trang 25

K thu t nhánh c n thêm vào cho thu t toán quay lui kh n ng đánh giá theo t ng b c, n u t i

b c th i, giá tr th gán cho xi không có hi v ng tìm th y c u hình t t h n c u hìnhBESTCONFIG thì th giá tr khác ngay mà không c n ph i g i đ quy tìm ti p hay ghi nh n k t

qu làm gì Nghi m c a bài toán s đ c làm t t d n, b i khi tìm ra m t c u hình m i (t t h nBESTCONFIG - t t nhiên), ta không in k t qu ngay mà s c p nh t BESTCONFIG b ng c u hình

M t ng i du l ch xu t phát t thành ph 1, mu n đi th m t t c các thành ph còn l i m i thành

ph đúng 1 l n và cu i cùng quay l i thành ph 1 Hãy ch ra cho ng i đó hành trình v i chi phí ít

nh t Bài toán đó g i là bài toán ng i du l ch hay bài toán hành trình c a m t th ng gia(Traveling Salesman)

Cách gi i

1) Hành trình c n tìm có d ng (x1 = 1, x2, , xn, xn+1 = 1) đây gi a xi và xi+1: hai thành ph liên

ti p trong hành trình ph i có đ ng đi tr c ti p (Cij ≠ +∞) và ngo i tr thành ph 1, không thành

ph nào đ c l p l i hai l n Có ngh a là dãy (x1, x2, , xn) l p thành 1 hoán v c a (1, 2, , n).2) Duy t quay lui: x2 có th ch n m t trong các thành ph mà x1 có đ ng đi t i (tr c ti p), v i

m i cách th ch n x2 nh v y thì x3 có th ch n m t trong các thành ph mà x2 có đ ng đi t i(ngoài x1) T ng quát: xi có th ch n 1 trong các thành ph ch a đi qua mà t x i-1 có đ ng đi

tr c ti p t i.(1 ≤ i ≤ n)

3) Nhánh c n: Kh i t o c u hình BestConfig có chi phí = +∞ V i m i b c th ch n xi xem chiphí đ ng đi cho t i lúc đó có < Chi phí c a c u hình BestConfig?, n u không nh h n thì thgiá tr khác ngay b i có đi ti p c ng ch t n thêm Khi th đ c m t giá tr xn ta ki m tra xem xn

có đ ng đi tr c ti p v 1 không ? N u có đánh giá chi phí đi t thành ph 1 đ n thành ph xn

c ng v i chi phí t xn đi tr c ti p v 1, n u nh h n chi phí c a đ ng đi BestConfig thì c p

Input: file v n b n TOURISM.INP

• Dòng 1: Ch a s thành ph n (1 ≤ n ≤ 20) và s tuy n đ ng m trong m ng l i giao thông

• m dòng ti p theo, m i dòng ghi s hi u hai thành ph có đ ng đi tr c ti p và chi phí đi trênquãng đ ng đó (chi phí này là s nguyên d ng ≤ 100)

Output: file v n b n TOURISM.OUT

Ghi hành trình tìm đ c

Trang 26

PROG04_1.PAS * K thu t nhánh c n dùng cho bài toán ng i du l ch

C: array[1 max, 1 max] of Integer; {Ma tr n chi phí}

X, BestWay: array[1 max + 1] of Integer; {X đ th các kh n ng, BestWay đ ghi nh n nghi m}

T: array[1 max + 1] of Integer; {T i đ l u chi phí đi t X 1 đ n X i }

Free: array[1 max] of Boolean; {Free đ đánh d u, Free i = True n u ch a đi qua tp i}

T[i] := T[i - 1] + C[x[i - 1], j]; {Chi phí := Chi phí b c tr c + chi phí đ ng đi tr c ti p}

if T[i] < MinSpending then {Hi n nhiên n u có đi u này thì C[x[i - 1], j] < +∞ r i}

―――――― if i < n then― {N u ch a đ n đ c x n }

―― begin

Trang 27

Assign(Input, 'TOURISM.INP'); Reset(Input);

Assign(Output, 'TOURISM.OUT'); Rewrite(Output);

Không trình bày, đ ngh t xem ch ng trình đ hi u, ch chú thích k thu t nhánh c n nh sau:

N u dãy X1X2 Xn tho mãn 2 đo n con b t k li n nhau đ u khác nhau, thì trong 4 ký t liên ti p

b t k bao gi c ng ph i có 1 ký t "C" Nh v y v i m t dãy con g m k ký t liên ti p c a dãy Xthì s ký t C trong dãy con đó b t bu c ph i ≥ k div 4

T i b c th ch n Xi, n u ta đã có Ti ký t "C" trong đo n đã ch n t X1 đ n Xi, thì cho dù các

b c đ quy ti p sau làm t t nh th nào ch ng n a, s ký t "C" s ph i ch n thêm bao gi c ng ≥(n - i) div 4 T c là n u theo ph ng án ch n Xi nh th này thì s ký t "C" trong dãy k t qu (khi

ch n đ n Xn) cho dù có làm t t đ n đâu c ng ≥ T i + (n - i) div 4 Ta dùng con s này đ đánh giánhánh c n, n u nó nhi u h n s ký t "C" trong BestConfig thì ch c ch n có làm ti p c ng ch đ c

m t c u hình t i t h n, ta b qua ngay cách ch n này và th ph ng án khác

Trang 28

Input: file v n b n ABC.INP ch a s nguyên d ng n ≤ 100

Output: file v n b n ABC.OUT ghi xâu tìm đ c

X, Best: array[1 max] of 'A' 'C';

T: array[0 max] of Integer; {T i cho bi t s ký t "C" trong đo n t X 1 đ n X i }

{Hàm Same(i, l) cho bi t xâu g m l ký t k t thúc t i X i có trùng v i xâu l ký t li n tr c nó không ?}

function Same(i, l: Integer): Boolean;

{Hàm Check(i) cho bi t X i có làm h ng tính không l p c a dãy X 1 X 2 X i hay không}

function Check(i: Integer): Boolean;

var

l: Integer;

begin

for l := 1 to i div 2 do― {Th các đ dài l}

if Same(i, l) then― {N u có xâu đ dài l k t thúc b i X i b trùng v i xâu li n tr c}

{Thu t toán quay lui có nhánh c n}

procedure Try(i: Integer); {Th các giá tr có th c a X i }

if j = 'C' then T[i] := T[i - 1] + 1 {Tính T i qua T i - 1 }

―――――――― else T[i] := T[i - 1];

Trang 29

if T[i] + (N - i) div 4 < MinC then { ánh giá nhánh c n}

Assign(Input, 'ABC.INP'); Reset(Input);

Assign(Output, 'ABC.OUT'); Rewrite(Output);

N u ta thay bài toán là tìm xâu ít ký t 'B' nh t mà v n vi t ch ng trình t ng t nh trên thì

ch ng trình s ch y ch m h n chút ít Lý do: th t c Try trên s th l n l t các giá tr 'A', 'B',

r i m i đ n 'C' Có ngh a ngay trong cách tìm, nó đã ti t ki m s d ng ký t 'C' nh t nên trong ph n

l n các b d li u nó nhanh chóng tìm ra l i gi i h n so v i bài toán t ng ng tìm xâu ít ký t 'B'

nh t Chính vì v y mà n u nh đ bài yêu c u ít ký t 'B' nh t ta c l p ch ng trình làm yêu c u ít

ký t 'C' nh t, ch có đi u khi in k t qu , ta đ i vai trò 'B', 'C' cho nhau ây là m t ví d cho th y

s c m nh c a thu t toán quay lui khi k t h p v i k thu t nhánh c n, n u vi t quay lui thu n tuý

ho c đánh giá nhánh c n không t t thì v i N = 100, tôi c ng không đ kiên nh n đ đ i ch ngtrình cho k t qu (ch bi t r ng > 3 gi ) Trong khi đó khi N = 100, v i ch ng trình trên ch ch y

h t h n 3 giây cho k t qu là xâu 27 ký t 'C'

Nói chung, ít khi ta g p bài toán mà ch c n s d ng m t thu t toán, m t mô hình k thu t cài đ t là

có th gi i đ c Thông th ng các bài toán th c t đòi h i ph i có s t ng h p, pha tr n nhi uthu t toán, nhi u k thu t m i có đ c m t l i gi i t t Không đ c l m d ng m t k thu t nào và

c ng không xem th ng m t ph ng pháp nào khi b t tay vào gi i m t bài toán tin h c Thu t toánquay lui c ng không ph i là ngo i l , ta ph i bi t ph i h p m t cách uy n chuy n v i các thu t toánkhác thì khi đó nó m i th c s là m t công c m nh

Bài t p:

1 M t dãy d u ngo c h p l là m t dãy các ký t "(" và ")" đ c đ nh ngh a nh sau:

i Dãy r ng là m t dãy d u ngo c h p l đ sâu 0

ii N u A là dãy d u ngo c h p l đ sâu k thì (A) là dãy d u ngo c h p l đ sâu k + 1

iii N u A và B là hay dãy d u ngo c h p l v i đ sâu l n l t là p và q thì AB là dãy d u ngo c

h p l đ sâu là max(p, q)

dài c a m t dãy ngo c là t ng s ký t "(" và ")"

Ví d : Có 5 dãy d u ngo c h p l đ dài 8 và đ sâu 3:

1 ((()()))

2 ((())())

Trang 30

• Cách 2: dùng b n đ m t đ : s d ng m t l i ô vuông kích th c mxn, trên đó t i ô (i, j) ghi

m t s trong kho ng t 0 đ n 8 cho bi t t ng s mìn trong các ô lân c n v i ô (i, j) (ô lân c n

v i ô (i, j) là ô có chung v i ô (i, j) ít nh t 1 đ nh)

Gi thi t r ng hai b n đ đ c ghi chính xác theo tình tr ng mìn trên hi n tr ng

K t qu : Ghi ra file v n b n MINE.OUT, các s trên 1 dòng ghi cách nhau ít nh t 1 d u cách

• Dòng 1: Ghi t ng s l ng mìn trong bãi

• m dòng ti p theo, dòng th i ghi n s trên hàng i c a b n đ đánh d u theo đúng th t t tráiqua ph i

Trang 32

VI CHI PHÍ TH C HI N THU T TOÁN 11

§2 QUY VÀ GI I THU T QUY 12

IV CHUY N T D NG TRUNG T SANG D NG H U T 38

V XÂY D NG CÂY NH PHÂN BI U DI N BI U TH C 41

Trang 33

VI THU T TOÁN S P X P KI U PHÂN O N (QUICK SORT) 47VII THU T TOÁN S P X P KI U VUN NG (HEAP SORT) 49VIII S P X P B NG PHÉP M PHÂN PH I (DISTRIBUTION COUNTING) 52

IX TÍNH N NH C A THU T TOÁN S P X P (STABILITY) 53

X THU T TOÁN S P X P B NG C S (RADIX SORT) 53

XI THU T TOÁN S P X P TR N (MERGE SORT) 57XII CÀI T 59XIII NH NG NH N XÉT CU I CÙNG 68

IX NH NG NH N XÉT CU I CÙNG 82

Trang 34

§0 CÁC B C C B N KHI TI N HÀNH GI I CÁC BÀI TOÁN TIN H C

Xác đ nh đúng yêu c u bài toán là r t quan tr ng b i nó nh h ng t i cách th c gi i quy t và ch t

l ng c a l i gi i M t bài toán th c t th ng cho b i nh ng thông tin khá m h và hình th c, ta

ph i phát bi u l i m t cách chính xác và ch t ch đ hi u đúng bài toán

Ví d :

• Bài toán: M t d án có n ng i tham gia th o lu n, h mu n chia thành các nhóm và m i nhóm

th o lu n riêng v m t ph n c a d án Nhóm có bao nhiêu ng i thì đ c trình lên b y nhiêu ý

ki n N u l y m i nhóm m t ý ki n đem ghép l i thì đ c m t b ý ki n tri n khai d án Hãy tìm cách chia đ s b ý ki n cu i cùng thu đ c là l n nh t.

• Phát bi u l i: Cho m t s nguyên d ng n, tìm các phân tích n thành t ng các s nguyên d ng sao cho tích c a các s đó là l n nh t.

Trên th c t , ta nên xét m t vài tr ng h p c th đ thông qua đó hi u đ c bài toán rõ h n và

th y đ c các thao tác c n ph i ti n hành i v i nh ng bài toán đ n gi n, đôi khi ch c n qua ví

d là ta đã có th đ a v m t bài toán quen thu c đ gi i

II TÌM C U TRÚC D LI U BI U DI N BÀI TOÁN

Khi gi i m t bài toán, ta c n ph i đ nh ngh a t p h p d li u đ bi u di n tình tr ng c th Vi c l a

ch n này tu thu c vào v n đ c n gi i quy t và nh ng thao tác s ti n hành trên d li u vào Có

nh ng thu t toán ch thích ng v i m t cách t ch c d li u nh t đ nh, đ i v i nh ng cách t ch c

d li u khác thì s kém hi u qu ho c không th th c hi n đ c Chính vì v y nên b c xây d ng

c u trúc d li u không th tách r i b c tìm ki m thu t toán gi i quy t v n đ

Các tiêu chu n khi l a ch n c u trúc d li u

• C u trúc d li u tr c h t ph i bi u di n đ c đ y đ các thông tin nh p và xu t c a bài toán

• C u trúc d li u ph i phù h p v i các thao tác c a thu t toán mà ta l a ch n đ gi i quy t bàitoán

• C u trúc d li u ph i cài đ t đ c trên máy tính v i ngôn ng l p trình đang s d ng

i v i m t s bài toán, tr c khi t ch c d li u ta ph i vi t m t đo n ch ng trình nh đ kh o

sát xem d li u c n l u tr l n t i m c đ nào

Trang 35

III TÌM THU T TOÁN

Thu t toán là m t h th ng ch t ch và rõ ràng các quy t c nh m xác đ nh m t dãy thao tác trên c utrúc d li u sao cho: V i m t b d li u vào, sau m t s h u h n b c th c hi n các thao tác đã ch

ra, ta đ t đ c m c tiêu đã đ nh

Các đ c tr ng c a thu t toán

1 Tính đ n đ nh

m i b c c a thu t toán, các thao tác ph i h t s c rõ ràng, không gây nên s nh p nh ng, l n

x n, tu ti n, đa ngh a Th c hi n đúng các b c c a thu t toán thì v i m t d li u vào, ch cho duy

nó yêu c u v t quá kh n ng l u tr c a h th ng máy tính

b) Thu t toán ph i đ c máy tính th c hi n trong th i gian cho phép, đi u này khác v i l i gi i toán(Ch c n ch ng minh là k t thúc sau h u h n b c) Ví d nh x p th i khoá bi u cho m t h c kthì không th cho máy tính ch y t i h c k sau m i ra đ c

Trang 36

Input: a, b

No Yes

Vi t s đ các thu t toán đ quy là m t ví d

• i v i nh ng thu t toán ph c t p và n ng v tính toán, các b c và các công th c nên mô t

m t cách t ng minh và chú thích rõ ràng đ khi l p trình ta có th nhanh chóng tra c u

• i v i nh ng thu t toán kinh đi n thì ph i thu c Khi gi i m t bài toán l n trong m t th i gian

gi i h n, ta ch ph i thi t k t ng th còn nh ng ch đã thu c thì c vi c l p ráp vào Tính đúng

đ n c a nh ng mô-đun đã thu c ta không c n ph i quan tâm n a mà t p trung gi i quy t các

ph n khác

IV L P TRÌNH

Sau khi đã có thu t toán, ta ph i ti n hành l p trình th hi n thu t toán đó Mu n l p trình đ t hi u

qu cao, c n ph i có k thu t l p trình t t K thu t l p trình t t th hi n k n ng vi t ch ngtrình, kh n ng g r i và thao tác nhanh L p trình t t không ph i ch c n n m v ng ngôn ng l ptrình là đ , ph i bi t cách vi t ch ng trình uy n chuy n, khôn khéo và phát tri n d n d n đchuy n các ý t ng ra thành ch ng trình hoàn ch nh Kinh nghi m cho th y m t thu t toán hay

nh ng do cài đ t v ng v nên khi ch y l i cho k t qu sai ho c t c đ ch m

Thông th ng, ta không nên c th hoá ngay toàn b ch ng trình mà nên ti n hành theo ph ngpháp tinh ch t ng b c (Stepwise refinement):

• Ban đ u, ch ng trình đ c th hi n b ng ngôn ng t nhiên, th hi n thu t toán v i các b c

t ng th , m i b c nêu lên m t công vi c ph i th c hi n

• M t công vi c đ n gi n ho c là m t đo n ch ng trình đã đ c h c thu c thì ta ti n hành vi t

Trang 37

Ph ng pháp tinh ch t ng b c là m t th hi n c a t duy gi i quy t v n đ t trên xu ng, giúpcho ng i l p trình có đ c m t đ nh h ng th hi n trong phong cách vi t ch ng trình Tránh

vi c mò m m, xoá đi vi t l i nhi u l n, bi n ch ng trình thành t gi y nháp

V KI M TH

1 Ch y th và tìm l i

Ch ng trình là do con ng i vi t ra, mà đã là con ng i thì ai c ng có th nh m l n M t ch ngtrình vi t xong ch a ch c đã ch y đ c ngay trên máy tính đ cho ra k t qu mong mu n K n ngtìm l i, s a l i, đi u ch nh l i ch ng trình c ng là m t k n ng quan tr ng c a ng i l p trình K

n ng này ch có đ c b ng kinh nghi m tìm và s a ch a l i c a chính mình

Có ba lo i l i:

• L i cú pháp: L i này hay g p nh t nh ng l i d s a nh t, ch c n n m v ng ngôn ng l p trình

là đ M t ng i đ c coi là không bi t l p trình n u không bi t s a l i cú pháp

• L i cài đ t: Vi c cài đ t th hi n không đúng thu t toán đã đ nh, đ i v i l i này thì ph i xem l i

r t khó kh n Khi đó ta nên làm các b test đ th ch ng trình c a mình

Các b test nên đ t trong các file v n b n, b i vi c t o m t file v n b n r t nhanh và m i l n ch y

th ch c n thay tên file d li u vào là xong, không c n gõ l i b test t bàn phím Kinh nghi m làmcác b test là:

• B t đ u v i m t b test nh , đ n gi n, làm b ng tay c ng có đ c đáp s đ so sánh v i k t qu

ch ng trình ch y ra

• Ti p theo v n là các b test nh , nh ng ch a các giá tr đ c bi t ho c t m th ng Kinh nghi mcho th y đây là nh ng test d sai nh t

• Các b test ph i đa d ng, tránh s l p đi l p l i các b test t ng t

• Có m t vài test l n ch đ ki m tra tính ch u đ ng c a ch ng trình mà thôi K t qu có đúnghay không thì trong đa s tr ng h p, ta không th ki m ch ng đ c v i test này

L u ý r ng ch ng trình ch y qua đ c h t các test không có ngh a là ch ng trình đó đã đúng B i

có th ta ch a xây d ng đ c b test làm cho ch ng trình ch y sai Vì v y n u có th , ta nên tìmcách ch ng minh tính đúng đ n c a thu t toán và ch ng trình, đi u này th ng r t khó

Trang 38

1 Tính tin c y

Ch ng trình ph i ch y đúng nh d đ nh, mô t đúng m t gi i thu t đúng Thông th ng khi vi t

ch ng trình, ta luôn có thói quen ki m tra tính đúng đ n c a các b c m i khi có th

2 Tính uy n chuy n

Ch ng trình ph i d s a đ i B i ít có ch ng trình nào vi t ra đã hoàn h o ngay đ c mà v n c n

ph i s a đ i l i Ch ng trình vi t d s a đ i s làm gi m b t công s c c a l p trình viên khi pháttri n ch ng trình

Ch ng trình ph i ch y nhanh và ít t n b nh , t c là ti t ki m đ c c v không gian và th i gian

có m t ch ng trình h u hi u, c n ph i có gi i thu t t t và nh ng ti u x o khi l p trình Tuynhiên, vi c áp d ng quá nhi u ti u x o có th khi n ch ng trình tr nên r i r m, khó hi u khi s a

đ i Tiêu chu n h u hi u nên d ng l i m c ch p nh n đ c, không quan tr ng b ng ba tiêu chu ntrên B i ph n c ng phát tri n r t nhanh, yêu c u h u hi u không c n ph i đ t ra quá n ng

T nh ng phân tích trên, chúng ta nh n th y r ng vi c làm ra m t ch ng trình đòi h i r t nhi ucông đo n và tiêu t n khá nhi u công s c Ch m t công đo n không h p lý s làm t ng chi phí vi t

ch ng trình Ngh ra cách gi i quy t v n đ đã khó, bi n ý t ng đó thành hi n th c c ng không

d chút nào

Nh ng c u trúc d li u và gi i thu t đ c p t i trong chuyên đ này là nh ng ki n th c r t phthông, m t ng i h c l p trình không s m thì mu n c ng ph i bi t t i Ch hy v ng r ng khi h cxong chuyên đ này, qua nh ng c u trúc d li u và gi i thu t h t s c m u m c, chúng ta rút ra đ cbài h c kinh nghi m: ng bao gi vi t ch ng trình khi mà ch a suy xét k v gi i thu t và

nh ng d li u c n thao tác, b i nh v y ta d m c ph i hai sai l m tr m tr ng: ho c là sai v gi i

thu t, ho c là gi i thu t không th tri n khai n i trên m t c u trúc d li u không phù h p Ch c n

m c m t trong hai l i đó thôi thì nguy c s p đ toàn b ch ng trình là hoàn toàn có th , càng c

ch a càng b r i, kh n ng h u nh ch c ch n là ph i làm l i t đ u(*)

(*) T t nhiên, c n th n đ n đâu thì c ng có xác su t r i ro nh t đ nh, ta hi u đ c m c đ tai h i c a hai l i này đ h n

ch nó càng nhi u càng t t

Trang 39

§1 PHÂN TÍCH TH I GIAN TH C HI N GI I THU T

I Đ PH C T P TÍNH TOÁN C A GI I THU T

V i m t bài toán không ch có m t gi i thu t Ch n m t gi i thu t đ a t i k t qu nhanh nh t là m tđòi h i th c t Nh v y c n có m t c n c nào đó đ nói r ng gi i thu t này nhanh h n gi i thu tkia ?

Th i gian th c hi n m t gi i thu t b ng ch ng trình máy tính ph thu c vào r t nhi u y u t M t

y u t c n chú ý nh t đó là kích th c c a d li u đ a vào D li u càng l n thì th i gian x lý càng

ch m, ch ng h n nh th i gian s p x p m t dãy s ph i ch u nh h ng c a s l ng các s thu cdãy s đó N u g i n là kích th c d li u đ a vào thì th i gian th c hi n c a m t gi i thu t có th

bi u di n m t cách t ng đ i nh m t hàm c a n: T(n)

Ph n c ng máy tính, ngôn ng vi t ch ng trình và ch ng trình d ch ngôn ng y đ u nh h ng

t i th i gian th c hi n Nh ng y u t này không gi ng nhau trên các lo i máy, vì v y không th d avào chúng khi xác đ nh T(n) T c là T(n) không th bi u di n b ng đ n v th i gian gi , phút, giây

đ c Tuy nhiên, không ph i vì th mà không th so sánh đ c các gi i thu t v m t t c đ N u

nh th i gian th c hi n m t gi i thu t là T1(n) = n2 và th i gian th c hi n c a m t gi i thu t khác là

T2(n) = 100n thì khi n đ l n, th i gian th c hi n c a gi i thu t T2 rõ ràng nhanh h n gi i thu t T1.Khi đó, n u nói r ng th i gian th c hi n gi i thu t t l thu n v i n hay t l thu n v i n2

c ng cho ta

m t cách đánh giá t ng đ i v t c đ th c hi n c a gi i thu t đó khi n khá l n Cách đánh giá th igian th c hi n gi i thu t đ c l p v i máy tính và các y u t liên quan t i máy tính nh v y s d n

t i khái ni m g i là đ ph c t p tính toán c a gi i thu t.

Cho f và g là hai hàm xác đ nh d ng v i m i n Hàm f(n) đ c g i là O(g(n)) n u t n t i m t h ng

s c > 0 và m t giá tr n0 sao cho:

f(n) ≤ c.g(n) v i ∀ n ≥ n0

Ngh a là n u xét nh ng giá tr n ≥ n0 thì hàm f(n) s b ch n trên b i m t h ng s nhân v i g(n) Khi

đó, n u f(n) là th i gian th c hi n c a m t gi i thu t thì ta nói gi i thu t đó có c p là g(n) (hay đ

ph c t p tính toán là O(g(n)))

II XÁC Đ NH Đ PH C T P TÍNH TOÁN C A GI I THU T

Vi c xác đ nh đ ph c t p tính toán c a m t gi i thu t b t k có th r t ph c t p Tuy nhiên, trong

th c t , đ i v i m t s gi i thu t ta có th phân tích b ng m t s quy t c đ n gi n:

Trang 40

2 Quy t c nhân

N u đo n ch ng trình P có th i gian th c hi n là T(n) = O(f(n)) Khi đó, n u th c hi n k(n) l n

đo n ch ng trình P v i k(n) = O(g(n)) thì đ ph c t p tính toán s là O(g(n).f(n))

hi u là O(logf(n)) mà không c n ghi c s c a logarit

c) N u m t thu t toán có đ ph c t p là h ng s , t c là th i gian th c hi n không ph thu c vàokích th c d li u vào thì ta ký hi u đ ph c t p tính toán c a thu t toán đó là O(1)

hi n là n3, thì v i n < 1000, rõ ràng gi i thu t O(n3) t t h n gi i thu t O(n2) Trên đây là xét trên

ph ng di n tính toán lý thuy t đ đ nh ngh a gi i thu t này "t t" h n gi i thu t kia, khi ch n m tthu t toán đ gi i m t bài toán th c t ph i có m t s m m d o nh t đ nh

f) C ng theo đ nh ngh a v đ ph c t p tính toán

• M t thu t toán có c p O(1) c ng có th vi t là O(logn)

• M t thu t toán có c p O(logn) c ng có th vi t là O(n)

• M t thu t toán có c p O(n) c ng có th vi t là O(n.logn)

• M t thu t toán có c p O(n.logn) c ng có th vi t là O(n2

D i đây là m t s hàm s hay dùng đ ký hi u đ ph c t p tính toán và b ng giá tr c a chúng đ

ti n theo dõi s t ng c a hàm theo đ i s n

Ngày đăng: 14/02/2014, 23:20

HÌNH ẢNH LIÊN QUAN

Hình 2: Cây tìm ki m quay lui trong bài toán li t kê dãy nh  phân - Tài liệu Chuyên đề Toán cao cấp doc
Hình 2 Cây tìm ki m quay lui trong bài toán li t kê dãy nh phân (Trang 15)
Hình 3: X p 8 quân h u trên bàn c  8x8 - Tài liệu Chuyên đề Toán cao cấp doc
Hình 3 X p 8 quân h u trên bàn c 8x8 (Trang 20)
Hình 4:  ng chéo  B-TN mang ch  s  10 và  đ ng chéo  N-TB mang ch  s  0, ô chung (5, 5) - Tài liệu Chuyên đề Toán cao cấp doc
Hình 4 ng chéo B-TN mang ch s 10 và đ ng chéo N-TB mang ch s 0, ô chung (5, 5) (Trang 21)
Hình 1:  L u  đ  thu t gi i - Tài liệu Chuyên đề Toán cao cấp doc
Hình 1 L u đ thu t gi i (Trang 36)
Hình 6: Các d ng cây nh  phân suy bi n - Tài liệu Chuyên đề Toán cao cấp doc
Hình 6 Các d ng cây nh phân suy bi n (Trang 59)
Hình 7:  Cây nh  phân hoàn ch nh và cây nh  phân  đ y  đ - Tài liệu Chuyên đề Toán cao cấp doc
Hình 7 Cây nh phân hoàn ch nh và cây nh phân đ y đ (Trang 60)
Hình 11:  Bi u th c d i d ng cây nh  phân - Tài liệu Chuyên đề Toán cao cấp doc
Hình 11 Bi u th c d i d ng cây nh phân (Trang 66)
Hình 13:  Vun đ ng - Tài liệu Chuyên đề Toán cao cấp doc
Hình 13 Vun đ ng (Trang 81)
Hình 12:  Heap - Tài liệu Chuyên đề Toán cao cấp doc
Hình 12 Heap (Trang 81)
Hình 14:  o k 1  cho k n  và xét ph n còn l i c a  đ ng - Tài liệu Chuyên đề Toán cao cấp doc
Hình 14 o k 1 cho k n và xét ph n còn l i c a đ ng (Trang 82)
Hình 15:  Vun ph n còn l i thành  đ ng r i l i  đ o tr  k 1  cho k n-1 - Tài liệu Chuyên đề Toán cao cấp doc
Hình 15 Vun ph n còn l i thành đ ng r i l i đ o tr k 1 cho k n-1 (Trang 82)
Hình 16:  Cài đ t các thu t toán s p x p v i d  li u l n, cho phép ch y các thu t toán theo ki u song song - Tài liệu Chuyên đề Toán cao cấp doc
Hình 16 Cài đ t các thu t toán s p x p v i d li u l n, cho phép ch y các thu t toán theo ki u song song (Trang 99)
Hình 17:  Cây nh  phân tìm ki m - Tài liệu Chuyên đề Toán cao cấp doc
Hình 17 Cây nh phân tìm ki m (Trang 102)
Hình 18:  Cây tìm ki m s  h c - Tài liệu Chuyên đề Toán cao cấp doc
Hình 18 Cây tìm ki m s h c (Trang 107)
Hình 19:  Cây tìm ki m c  s - Tài liệu Chuyên đề Toán cao cấp doc
Hình 19 Cây tìm ki m c s (Trang 109)
Hình 20:  V i  đ  dài dãy bít z = 3, cây tìm ki m c  s  g m các khoá 2, 4, 5 và sau khi thêm giá tr  7 - Tài liệu Chuyên đề Toán cao cấp doc
Hình 20 V i đ dài dãy bít z = 3, cây tìm ki m c s g m các khoá 2, 4, 5 và sau khi thêm giá tr 7 (Trang 110)
Hình 21:  RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b  giá tr  7 - Tài liệu Chuyên đề Toán cao cấp doc
Hình 21 RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b giá tr 7 (Trang 111)
Hình 22:  Cây tìm ki m c  s  a) và Trie tìm ki m c  s  b) - Tài liệu Chuyên đề Toán cao cấp doc
Hình 22 Cây tìm ki m c s a) và Trie tìm ki m c s b) (Trang 112)
Hình 8:  Liên thông m nh và Liên thông y u - Tài liệu Chuyên đề Toán cao cấp doc
Hình 8 Liên thông m nh và Liên thông y u (Trang 161)
Hình 6:   th  G và các thành ph n liên thông G 1 , G 2 , G 3  c a nó - Tài liệu Chuyên đề Toán cao cấp doc
Hình 6 th G và các thành ph n liên thông G 1 , G 2 , G 3 c a nó (Trang 161)
Hình 11:  Ba d ng cung ngoài cây DFS - Tài liệu Chuyên đề Toán cao cấp doc
Hình 11 Ba d ng cung ngoài cây DFS (Trang 166)
Hình 12:  Thu t toán Tarjan &#34;b &#34; cây DFS - Tài liệu Chuyên đề Toán cao cấp doc
Hình 12 Thu t toán Tarjan &#34;b &#34; cây DFS (Trang 168)
Hình 14:  Cây khung DFS và cây khung BFS (M i tên ch  chi u  đ i th m các  đ nh) - Tài liệu Chuyên đề Toán cao cấp doc
Hình 14 Cây khung DFS và cây khung BFS (M i tên ch chi u đ i th m các đ nh) (Trang 177)
Hình 15:  Phép  đ nh chi u DFS - Tài liệu Chuyên đề Toán cao cấp doc
Hình 15 Phép đ nh chi u DFS (Trang 179)
Hình 17:  Duy t DFS, xác  đ nh cây DFS và các cung ng c - Tài liệu Chuyên đề Toán cao cấp doc
Hình 17 Duy t DFS, xác đ nh cây DFS và các cung ng c (Trang 183)
Hình 19:  Phép  đ ánh l i ch  s  theo th  t  tôpô - Tài liệu Chuyên đề Toán cao cấp doc
Hình 19 Phép đ ánh l i ch s theo th t tôpô (Trang 205)
Hình 21:  M ng và lu ng trên các cung (1 phát, 6 thu) và đ  th  t ng lu ng t ng  ng - Tài liệu Chuyên đề Toán cao cấp doc
Hình 21 M ng và lu ng trên các cung (1 phát, 6 thu) và đ th t ng lu ng t ng ng (Trang 220)
Hình 22:  M ng G tr c và sau khi t ng lu ng - Tài liệu Chuyên đề Toán cao cấp doc
Hình 22 M ng G tr c và sau khi t ng lu ng (Trang 220)
Hình 23:  Cây pha &#34;m c&#34; l n h n sau m i l n xoay tr ng s  c nh và tìm  đ ng - Tài liệu Chuyên đề Toán cao cấp doc
Hình 23 Cây pha &#34;m c&#34; l n h n sau m i l n xoay tr ng s c nh và tìm đ ng (Trang 245)
Hình 26:  N  Blossom  đ  dò  đ ng xuyên qua Blossom - Tài liệu Chuyên đề Toán cao cấp doc
Hình 26 N Blossom đ dò đ ng xuyên qua Blossom (Trang 252)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w