Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Giáo trình MS SQL Server 7.0
PREMIUM
Số trang
83
Kích thước
3.4 MB
Định dạng
PDF
Lượt xem
1520

Giáo trình MS SQL Server 7.0

Nội dung xem thử

Mô tả chi tiết

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 1

1. Mөc tiêu

2. KiӃn thӭc cѫ bҧn cҫn có ÿӇ hӑc chѭѫng này

3. Tài liӋu tham khҧo có liên quan ÿӃn chѭѫng

4. Nӝi dung:

I.1 - Sӵ cҫn thiӃt phҧi phân tích giҧi thuұt.

I.2 - Thӡi gian thӵc hiӋn cӫa giҧi thuұt.

I.3 - Tӹ suҩt tăng và ÿӝ phӭc tҥp cӫa giҧi thuұt.

I.4 - Cách tính ÿӝ phӭc tҥp.

I.5 - Phân tích các chѭѫng trình ÿӋ quy.

5. Vҩn ÿӅ nghiên cӭu cӫa trang kӃ tiӃp

Trong chѭѫng này chúng ta sӁ nghiên cӭu các vҩn ÿӅ sau:

· Sӵ cҫn thiӃt phҧi phân tích các giҧi thuұt.

· Thӡi gian thӵc hiӋn cӫa chѭѫng trình.

· Tӹ suҩt tăng và ÿӝ phӭc tҥp cӫa giҧi thuұt.

· Tính thӡi gian thӵc hiӋn cӫa chѭѫng trình.

· Phân tích các chѭѫng trình ÿӋ quy.

I.1- SӴ CҪN THIӂT PHҦI PHÂN TÍCH GIҦI THUҰT

Trong khi giҧi mӝt bài toán chúng ta có thӇ có mӝt sӕ giҧi thuұt khác nhau, vҩn ÿӅ là cҫn phҧi

ÿánh giá các giҧi thuұt ÿó ÿӇ lӵa chӑn mӝt giҧi thuұt tӕt (nhҩt). Thông thѭӡng thì ta sӁ căn cӭ vào các

tiêu chuҭn sau:

1.- Giҧi thuұt ÿúng ÿҳn.

2.- Giҧi thuұt ÿѫn giҧn.

3.- Giҧi thuұt thӵc hiӋn nhanh.

Vӟi yêu cҫu (1), ÿӇ kiӇm tra tính ÿúng ÿҳn cӫa giҧi thuұt chúng ta có thӇ cài ÿһt giҧi thuұt ÿó

và cho thӵc hiӋn trên máy vӟi mӝt sӕ bӝ dӳ liӋu mүu rӗi lҩy kӃt quҧ thu ÿѭӧc so sánh vӟi kӃt quҧÿã

biӃt. Thӵc ra thì cách làm này không chҳc chҳn bӣi vì có thӇ giҧi thuұt ÿúng vӟi tҩt cҧ các bӝ dӳ liӋu

chúng ta ÿã thӱ nhѭng lҥi sai vӟi mӝt bӝ dӳ liӋu nào ÿó. Vҧ lҥi cách làm này chӍ phát hiӋn ra giҧi thuұt

sai chӭ chѭa chӭng minh ÿѭӧc là nó ÿúng. Tính ÿúng ÿҳn cӫa giҧi thuұt cҫn phҧi ÿѭӧc chӭng minh

Eҵng toán hӑc. Tҩt nhiên ÿLӅu này không ÿѫn giҧn và do vұy chúng ta sӁ không ÿӅ cұp ÿӃn ӣÿây.

Khi chúng ta viӃt mӝt chѭѫng trình ÿӇ sӱ dөng mӝt vài lҫn thì yêu cҫu (2) là quan trӑng nhҩt.

Chúng ta cҫn mӝt giҧi thuұt dӉ viӃt chѭѫng trình ÿӇ nhanh chóng có ÿѭӧc kӃt qӫa , thӡi gian thӵc hiӋn

chѭѫng trình không ÿѭӧc ÿӅ cao vì dù sao thì chѭѫng trình ÿó cNJng chӍ sӱ dөng mӝt vài lҫn mà thôi.

Tuy nhiên khi mӝt chѭѫng trình ÿѭӧc sӱ dөng nhiӅu lҫn thì thì yêu cҫu tiӃït kiӋm thӡi gian

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 2

thӵc hiӋn chѭѫng trình lҥi rҩt quan trӑng ÿһc biӋt ÿӕi vӟi nhӳng chѭѫng trình mà khi thӵc hiӋn cҫn dӳ

liӋu nhұp lӟn do ÿó yêu cҫu (3) sӁÿѭӧc xem xét mӝt cách kӻ càng. Ta gӑi nó là hiӋu quҧ thӡi gian thӵc

hiӋn cӫa giҧi thuұt.

I.2- THӠI GIAN THӴC HIӊN CӪA GIҦI THUҰT

I.2.1- Thӡi gian thӵc hiӋn chѭѫng trình.

I.2.2- Ĉѫn vӏÿo thӡi gian thӵc hiӋn.

I.2.3- Thӡi gian thӵc hiӋn trong trѭӡng hӧp xҩu nhҩt.

Mӝt phѭѫng pháp ÿӇ xác ÿӏnh hiӋu quҧ thӡi gian thӵc hiӋn cӫa mӝt giҧi thuұt là lұp trình nó và ÿo

Oѭӡng thӡi gian thӵc hiӋn cӫa hoҥt ÿӝng trên mӝt máy tính xác ÿӏnh ÿӕi vӟi tұp hӧp ÿѭӧc chӑn lӑc các

Gӳ liӋu vào.

Thӡi gian thӵc hiӋn không chӍ phө thuӝc vào giҧi thuұt mà còn phө thuӝc váo tұp các chӍ thӏ

Fӫa máy tính, chҩt lѭӧng cӫa máy tính và kӻ xҧo cӫa ngѭӡi lұp trình. Sӵ thi hành cNJng có thӇÿLӅu

chӍnh ÿӇ thӵc hiӋn tӕt trên tұp ÿһc biӋt các dӳ liӋu vào ÿѭӧc chӑn. ĈӇ vѭӧt qua các trӣ ngҥi này, các

nhà khoa hӑc máy tính ÿã chҩp nhұn tính phӭc tҥp cӫa thӟi gian ÿѭӧc tiӃp cұn nhѭ mӝt sӵÿo lѭӡng cѫ

Eҧn sӵ thӵc thi cӫa giҧi thuұt. Thuұt ngӳ tính hiӋu quҧ sӁÿӅ cұp ÿӃn sӵÿo lѭӡng này và ÿһc biӋt ÿӕi

Yӟi sӵ phӭc tҥp thӡi gian trong trѭӡng hӧp xҩu nhҩt.

I.2.1- Thӡi gian thӵc hiӋn chѭѫng trình.

Thӡi gian thӵc hiӋn mӝt chѭѫng trình là mӝt hàm cӫa kích thѭӟc dӳ liӋu vào, ký hiӋu T(n) trong ÿó n

là kích thѭӟc (ÿӝ lӟn) cӫa dӳ liӋu vào.

Ví dө 1-1: Chѭѫng trình tính tәng cӫa n sӕ có thӡi gian thӵc hiӋn là T(n) = cn trong ÿó c là

Pӝt hҵng sӕ.

Thӡi gian thӵc hiӋn chѭѫng trình là mӝt hàm không âm, tӭc là T(n) ³0 "n³0.

I.2.2- Ĉѫn vӏÿo thӡi gian thӵc hiӋn.

Ĉѫn vӏ cӫa T(n) không phҧi là ÿѫn vӏÿo thӡi gian bình thѭӡng nhѭ giӡ, phút giây... mà thѭӡng

ÿѭӧc xác ÿӏnh bӣi sӕ các lӋnh ÿѭӧc thӵc hiӋn trong mӝt máy tính lý tѭӣng.

Ví dө 1-2: Khi ta nói thӡi gian thӵc hiӋn cӫa mӝt chѭѫng trình là T(n) = cn thì có nghƭa là

chѭѫng trình ҩy cҫn cn chӍ thӏ thӵc thi.

I.2.3- Thӡi gian thӵc hiӋn trong trѭӡng hӧp xҩu nhҩt.

Nói chung thì thӡi gian thӵc hiӋn chѭѫng trình không chӍ phө thuӝc vào kích thѭӟc mà còn

phө thuӝc vào tính chҩt cӫa dӳ liӋu vào. Nghƭa là dӳ liӋu vào có cùng kích thѭӟc nhѭng thӡi gian thӵc

hiӋn chѭѫng trình có thӇ khác nhau. Chҷng hҥn chѭѫng trình sҳp xӃp dãy sӕ nguyên tăng dҫn, khi ta

cho vào dãy có thӭ tӵ thì thӡi gian thӵc hiӋn khác vӟi khi ta cho vào dãy chѭa có thӭ tӵ, hoһc khi ta

cho vào mӝt dãy ÿã có thӭ tӵ tăng thì thӡi gian thӵc hiӋn cNJng khác so vӟi khi ta cho vào mӝt dãy ÿã

có thӭ tӵ giҧm.

Vì vұy thѭӡng ta coi T(n) là thӡi gian thӵc hiӋn chѭѫng trình trong trѭӡng hӧp xҩu nhҩt trên

Gӳ liӋu vào có kích thѭóc n, tӭc là: T(n) là thӡi gian lӟn nhҩt ÿӇ thӵc hiӋn chѭѫng trình ÿӕi vӟi mӑi dӳ

liӋu vào có cùng kích thѭӟc n.

I.3- TӸ SUҨT TĂNG VÀ ĈӜ PHӬC TҤP CӪA GIҦI THUҰT

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 3

I.3.1- Tӹ suҩt tăng

I.3.2- Khái niӋm ÿӝ phӭc tҥp cӫa giҧi thuұt

I.3.1- Tӹ suҩt tăng

Ta nói rҵng hàm không âm T(n) có Wӹ suҩt tăng (growth rate) f(n) nӃu tӗn tҥi các hҵng sӕ c

và n0 sao cho T(n) f(n) vӟi mӑi n • n0.

Ta có thӇ chӭng minh ÿѭӧc rҵng “Cho mӝt hàm không âm T(n) bҩt kǤ, ta luôn tìm ÿѭӧc tӹ

suҩt tăng f(n) cӫa nó”.

Ví dө 1-3: Giҧ sӱ T(0) = 1, T(1) = 4 và tәng quát T(n) = (n+1)2

. Ĉһt n0 = 1 và c = 4 thì vӟi mӑi

n • 1 chúng ta dӉ dàng chӭng minh rҵng T(n) = (n+1)2

4n2

vӟi mӑi n • 1, tӭc là tӹ suҩt tăng cӫa T(n)

là n2

.

Ví dө 1-4: Tӹ suҩt tăng cӫa hàm T(n) = 3n3

+ 2n2

là n3

. Thӵc vұy, cho n0 = 0 và c = 5 ta dӉ

dàng chӭng minh rҵng vӟi mӑi n • 0 thì 3n3

+ 2n2

5n3

I.3.2- Khái niӋm ÿӝ phӭc tҥp cӫa giҧi thuұt

Giҧ sӱ ta có hai giҧi thuұt P1 và P2 vӟi thӡi gian thӵc hiӋn tѭѫng ӭng là T1(n) = 100n2

(vӟi tӹ

suҩt tăng là n2

) và T2(n) = 5n3

(vӟi tӹ suҩt tăng là n3

). Giҧi thuұt nào sӁ thӵc hiӋn nhanh hѫn? Câu trҧ

Oӡi phө thuӝc vào kích thѭӟc dӳ liӋu vào. Vӟi n < 20 thì P2 sӁ nhanh hѫn P1 (T2<T1), do hӋ sӕ cӫa 5n3

nhӓ hѫn hӋ sӕ cӫa 100n2

(5<100). Nhѭng khi n > 20 thì ngѭѫc lҥi do sӕ mNJ cӫa 100n2

nhӓ hѫn sӕ mNJ

Fӫa 5n3

(2<3). Ӣÿây chúng ta chӍ nên quan tâm ÿӃn trѭӡng hӧp n>20 vì khi n<20 thì thӡi gian thӵc

hiӋn cӫa cҧ P1 và P2 ÿӅu không lӟn và sӵ khác biӋt giӳa T1 và T2 là không ÿáng kӇ..

Nhѭ vұy mӝt cách hӧp lý là ta xét tӹ suҩt tăng cӫa hàm thӡi gian thӵc hiӋn chѭѫng trình thay

vì xét chính bҧn thân thӡi gian thӵc hiӋn.

Cho mӝt hàm T(n), T(n) gӑi là có ÿӝ phӭc tҥp f(n) nӃu tӗn tҥi các hҵng c, N0 sao cho T(n)

cf(n) vӟi mӑi n • N0 (tӭc là T(n) có tӹ suҩt tăng là f(n)) và kí hiӋu T(n) là O(f(n)) (ÿӑc là “ô cӫa f(n)”)

Ví dө 1-5: T(n)= (n+1)2

có tӹ suҩt tăng là n2

nên T(n)= (n+1)2

là O(n2

)

Chú ý: O(c.f(n))=O(f(n)) vӟi c là hҵng sӕ. Ĉһc biӋt O(c)=O(1)

Nói cách khác ÿӝ phӭc tҥp tính toán cӫa giҧi thuұt là mӝt hàm chһn trên cӫa hàm thӡi gian. Vì

Kҵng nhân tӱ c trong hàm chһn trên không có ý nghƭa nên ta có thӇ bӓ qua vì vұy hàm thӇ hiӋn ÿӝ phӭc

Wҥp có các dҥng thѭӡng gһp sau: log2n, n, nlog2n, n2

, n3

, 22

, n!, nn

. Ba hàm cuӕi cùng ta gӑi là dҥng

hàm mNJ, các hàm khác gӑi là hàm ÿa thӭc. Mӝt giҧi thuұt mà thӡi gian thӵc hiӋn có ÿӝ phӭc tҥp là mӝt

hàm ÿa thӭc thì chҩp nhұn ÿѭӧc tӭc là có thӇ cài ÿһt ÿӇ thӵc hiӋn, còn các giҧi thuұt có ÿӝ phӭc tҥp

hàm mNJ thì phҧi tìm cách cҧi tiӃn giҧi thuұt.

Khi nói ÿӃn ÿӝ phӭc tҥp cӫa giҧi thuұt là ta muӕn nói ÿӃn hiӋu quҧ cӫa thӡi gian thӵc hiӋn cӫa

chѭѫng trình nên ta có thӇ xem viӋc xác ÿӏnh thӡi gian thӵc hiên cӫa chѭѫng trình chính là xác ÿӏnh ÿӝ

phӭc tҥp cӫa giҧi thuұt.

I.4- CÁCH TÍNH ĈӜ PHӬC TҤP

I.4.1- Qui tҳc cӝng

I.4.2- Qui tҳc nhân

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 4

I.4.3- Qui tҳc tәng quát ÿӇ phân tích mӝt chѭѫng trình

I.4.4- Ĉӝ phӭc tҥp cӫa chѭѫng trình có gӑi chѭѫng trình con không ÿӋ qui

Cách tính ÿӝ phӭc tҥp cӫa mӝt giҧi thuұt bҩt kǤ là mӝt vҩn ÿӅ không ÿѫn giҧn. Tuy nhiên ta có

thӇ tuân theo mӝt sӕ nguyên tҳc sau:

I.4.1- Qui tҳc cӝng:

NӃu T1(n) và T2(n) là thӡi gian thӵc hiӋn cӫa hai ÿRҥn chѭѫng trình P1 và P2; và

T1(n)=O(f(n)), T2(n)=O(g(n) thì thӡi gian thӵc hiӋn cӫa ÿRҥn hai chѭѫng trình ÿó Qӕi tiӃp nhau là

T(n)=O(max(f(n),g(n)))

Ví dө 1-6: LӋnh gán x:=15 tӕn mӝt hҵng thӡi gian hay O(1)

LӋnh ÿӑc dӳ liӋu READ(x) tӕn mӝt hҵng thӡi gian hay O(1)

Vұy thӡi gian thӵc hiӋn cҧ hai lӋnh trên nӕi tiӃp nhau là O(max(1,1))=O(1)

I.4.2- Qui tҳc nhân:

NӃu T1(n) và T2(n) là thӡi gian thӵc hiӋn cӫa hai ÿRҥn chѭѫng trình P1và P2 và T1(n) =

O(f(n)), T2(n) = O(g(n) thì thӡi gian thӵc hiӋn cӫa ÿRҥn hai ÿRҥn chѭѫng trình ÿó Oӗng nhau là T(n) =

O(f(n).g(n))

I.4.3- Qui tҳc tәng quát ÿӇ phân tích mӝt chѭѫng trình:

- Thӡi gian thӵc hiӋn cӫa mӛi lӋnh gán, READ, WRITE là O(1)

- Thӡi gian thӵc hiӋn cӫa mӝt chuӛi tuҫn tӵ các lӋnh ÿѭӧc xác ÿӏnh bҵng qui tҳc cӝng. Nhѭ

Yұy thӡi gian này là thӡi gian thi hành mӝt lӋnh nào ÿó lâu nhҩt trong chuӛi lӋnh.

- Thӡi gian thӵc hiӋn cҩu trúc IF là thӡi gian lӟn nhҩt thӵc hiӋn lӋnh sau THEN hoһc sau ELSE

và thӡi gian kiӇm tra ÿLӅu kiӋn. Thѭӡng thӡi gian kiӇm tra ÿLӅu kiӋn là O(1).

- Thӡi gian thӵc hiӋn vòng lһp là tәng (trên tҩt cҧ các lҫn lһp) thӡi gian thӵc hiӋn thân vòng

Oһp. NӃu thӡi gian thӵc hiӋn than vòng lһp không ÿәi thì thӡi gian thӵc hiӋn vòng lһp là tích cӫa sӕ lҫn

Oһp vӟi thӡi gian thӵc hiӋn thân vòng lһp.

Ví dө 1-7: Tính thӡi gian thӵc hiӋn cӫa ÿRҥn chѭѫng trình

procedure Bubble (var a: array[1..n] of integer);

var i,j,temp: integer;

begin

{1} for i:=1 to n-1 do

{2} for j:=n downto i+1 do

{3} if a[j-1]>a[j] then begin

{ ÿәi chә a[i], a[j] }

{4} temp:=a[j-1];

{5} a[j-1]:=a[j];

{6} a[j]:=temp; end;

end;

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 5

Cҧ ba lӋnh ÿәi chӛ {4} {5} {6} tӕn O(1) thӡi gian, do ÿó lӋnh {3} tӕn O(1).

Vòng lһp {2} thӵc hiӋn (n-i) lҫn, mӛi lҫn O(1) do ÿó vòng lһp {2} tӕn O((n-i).1)=O(n-i).

Vòng lһp {1} lһp (n-1) lҫn vұy ÿӝ phӭc tҥp cӫa giҧi thuұt là:

I.4.4- Ĉӝ phӭc tҥp cӫa chѭѫng trình có gӑi chѭѫng trình con không ÿӋ qui

NӃu chúng ta có mӝt chѭѫng trình vӟi các chѭѫng trình con không ÿӋ quy, ÿӇ tính thӡi gian

thӵc hiӋn cӫa chѭѫng trình, trѭӟc hӃt chúng ta tính thӡi gian thӵc hiӋn cӫa các chѭѫng trình con không

Jӑi các chѭѫng trình con khác. Sau ÿó chúng ta tính thӡi gian thӵc hiӋn cӫa các chѭѫng trình con chӍ

Jӑi các chѭѫng trình con mà thӡi gian thӵc hiӋn cӫa chúng ÿã ÿѭӧc tính. Chúng ta tiӃp tөc quá trình

ÿánh giá thӡi gian thӵc hiӋn cӫa mӛi chѭѫng trình con sau khi thӡi gian thӵc hiӋn cӫa tҩt cҧ các

chѭѫng trình con mà nó gӑi ÿã ÿѭӧc ÿánh giá. Cuӕi cùng ta tính thӡi gian cho chѭѫng trình chính.

Giҧ sӱ ta cô mӝt hӋ thӕng các chѭѫng trình gӑi theo sѫÿӗ sau:

Chѭѫng trình A gӑi hai chѭѫng trình con là B và C, chѭѫng trình B gӑi hai chѭѫng trình con là

B1 và B2, chѭѫng trình B1 gӑi hai chѭѫng trình con là B11 và B12.

ĈӇ tính thӡi gian thӵc hiӋn cӫa A, ta tính theo các bѭӟc sau:

- Tính thӡi gian thӵc hiӋn cӫa C, B2, B11 và B12.

- Tính thӡi gian thӵc hiӋn cӫa B1.

- Tính thӡi gian thӵc hiӋn cӫa B.

- Tính thӡi gian thӵc hiӋn cӫa A.

Ví dө 1-8: Ta có thӇ viӃt lҥi chѭѫng trình sҳp xӃp bubble nhѭ sau:

procedure Swap (var x, y: integer);

var temp: integer;

begin

temp := x;

x := y;

y := temp;

end;

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 6

procedure Bubble (var a: array[1..n] of integer);

var i,j :integer;

begin

{1} for i:=1 to n-1 do

{2} for j:=n downto i+1 do

{3} if a[j-1]>a[j] then Swap(a[j-1], a[j]);

end;

Trong cách viӃt trên, chѭѫng trình Bubble gӑi chѭѫng trình con Swap, do ÿó ÿӇ tính thӡi gian

thӵc hiӋn cӫa Bubble, trѭӟc hӃt ta cҫn tính thӡi gian thӵc hiӋn cӫa Swap. DӉ thҩy thӡi gian thӵc hiӋn

Fӫa Swap là O(1) vì nó chӍ bao gӗm 3 lӋnh gán.

Trong Bubble, lӋnh {3} gӑi Swap nên chӍ tӕn O(1), lӋnh {2} thӵc hiӋn n-i lҫn, mӛi lҫn tӕn

O(1) nên tӕn O(n-i). LӋnh {1} thӵc hiӋn n-1 lҫn nên

I.5- PHÂN TÍCH CÁC CHѬѪNG TRÌNH Ĉӊ QUY

I.5.1- Thành lұp phѭѫng trình ÿӋ quy

I.5.2- Giҧi phѭѫng trình ÿӋ quy

Vӟi các chѭѫng trình có gӑi các chѭѫng trình con ÿӋ quy, ta không thӇ áp dөng cách tính nhѭ

Yӯa trình bày trong mөc I.4.4 bӣi vì mӝt chѭѫng trình ÿӋ quy sӁ gӑi chính bҧn thân nó.

Vӟi các chѭѫng trình ÿӋ quy, trѭӟc hӃt ta cҫn thành lұp các phѭѫng trình ÿӋ quy, sau ÿó giҧi

phѭѫng trình ÿӋ quy, nghiӋm cӫa phѭѫng trình ÿӋ quy sӁ là thӡi gian thӵc hiӋn cӫa chѭѫng trình ÿӋ

quy.

I.5.1- Thành lұp phѭѫng trình ÿӋ quy

Phѭѫng trình ÿӋ quy là mӝt phѭѫng trình biӇu diӉn mӕi liên hӋ giӳa T(n) và T(k), trong ÿó

T(n) là thӡi gian thӵc hiӋn chѭѫng trình vӟi kích thѭӟc dӳ liӋu nhұp là n, T(k) thӡi gian thӵc hiӋn

chѭѫng trình vӟi kích thѭӟc dӳ liӋu nhұp là k, vӟi k < n. ĈӇ thành lұp ÿѭӧc phѭѫng trình ÿӋ quy, ta

phҧi căn cӭ vào chѭѫng trình ÿӋ quy.

Ví dө 1-9: Xét hàm tính giai thӯa viӃt bҵng giҧi thuұt ÿӋ quy nhѭ sau:

function Giai_thua(n:integer): integer;

begin

if n=0 then Giai_thua :=1

else Giai_thua := n* Giai_thua(n-1);

end;

*ӑi T(n) là thӡi gian thӵc hiӋn viӋc tính n giai thӯa, thì T(n-1) là thӡi gian thӵc hiӋn viӋc tính

n-1 giai thӯa. Trong trѭӡng hӧp n=0 thì chѭѫng trình chӍ thӵc hiӋn mӝt lӋnh gán Giai_thua:=1, nên tӕn

O(1), do ÿó ta có T(0) = C1. Trong trѭӡng hӧp n>0 chѭѫng trình phҧi gӑi ÿӋ quy Giai_thua(n-1), viӋc

Jӑi ÿӋ quy này tӕn T(n-1), sau khi có kӃt quҧ cӫa viӋc gӑi ÿӋ quy, chѭѫng trình phҧi nhân kӃt quҧÿó

Yӟi n và gán cho Giai_thua. Thӡi gian ÿӇ thӵc hiӋn phép nhân và phép gán là mӝt hҵng C2. Vұy ta có

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 7

Ĉây là phѭѫng trình ÿӋ quy ÿӇ tính thӡi gian thӵc hiӋn cӫa chѭѫng trình ÿӋ quy Giai_thua.

Ví dө 1-10: Chúng ta xét thӫ tөc MergeSort mӝt cách phác thҧo nhѭ sau:

function MergeSort (L:List ; n:integer) : List;

var

L1,L2 : List;

begin

if n = 1 then return(L)

else

begin

Chia L thành 2 nӱa L1 và L2 , mӛi mӝt nӱa có ÿӝ dài n/2;

return(Merge(MergeSort (L1 , n/2), MergeSort(L2, n/2)));

end;

end;

Chҷng hҥn ÿӇ sҳp xӃp danh sách L gӗm 8 phҫn tӱ 7, 4, 8, 9, 3, 1, 6, 2 ta có mô hình minh hӑa

Fӫa MergeSort nhѭ sau:

Hàm MergeSort nhұn mӝt danh sách có ÿӝ dài n và trҧ vӅ mӝt danh sách ÿã ÿѭӧc sҳp xӃp. Thӫ

Wөc Merge nhұn hai danh sách ÿã ÿѭӧc sҳp L1 và L2 mӛi danh sách có ÿӝ dài n/2, trӝn chúng lҥi vӟi

nhau ÿӇÿѭӧc mӝt danh sách gӗm n phҫn tӱ có thӭ tӵ. Giҧi thuұt chi tiӃt cӫa Merge ta sӁ bàn sau,

chúng ta chӍÿӇ ý rҵng thӡi gian ÿӇ Merge các danh sách có ÿӝ dài n/2 là O(n).

Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Giɠi Thuɪt – ĈɝI +͌C CɣN THɆ........................................................................ Trang 8

Gӑi T(n) là thӡi gian thӵc hiӋn MergeSort mӝt danh sách n phҫn tӱ thì T(n/2) là thӡi gian thӵc

hiӋn MergeSort mӝt danh sách n/2 phҫn tӱ , ta có thӇ viӃt phѭѫng trình ÿӋ quy nhѭ sau:

Trong ÿó c1 là thӡi gian phҧi tӕn khi L có ÿӝ dài 1. Trong trѭӡng hӧp n > 1, thӡi gian cӫa

MergeSort ÿѭӧc chia làm hai phҫn. Phҫn gӑi ÿӋ quy MergeSort mӝt danh sách có ÿӝ dài n/2 là T(n/2)

do ÿó ta có 2T(n/2). Phҫn thӭ hai bao gӗm phép thӱ n >1, chia danh sách L thành hai nӱa bҵng nhau và

Merge. Ba thao tác này lҩy thӡi gian không ÿәi ÿӕi vӟi phép thӱ hoһc tӹ lӋ vӟi n ÿӕi vӟi ngҳt và

Merge. Nhѭ vұy hҵng c2ÿѭӧc chӑn và c2n là thӡi gian tәng ÿӇ làm các viӋc ÿó ngoҥi trӯ gӑi ÿӋ quy.

I.5.2- Giҧi phѭѫng trình ÿӋ quy

Có ba phѭѫng pháp giҧi phѭѫng trình ÿӋ quy:

1.- Phѭѫng pháp truy hӗi

2.- Phѭѫng pháp ÿoán nghiӋm.

3.- Lӡi giҧi tәng quát cӫa mӝt lӟp các phѭѫng trình ÿӋ quy.

Phѭѫng pháp truy hӗi

Dùng ÿӋ quy ÿӇ thay thӃ bҩt kǤ T(m) vӟi m < n vào phía phҧi cӫa phѭѫng trình cho ÿӃn khi tҩt

Fҧ T(m) vӟi m > 1 ÿѭӧc thay thӃ bӣi biӇu thӭc cӫa các T(1). Vì T(1) luôn là hҵng nên chúng ta có công

thӭc cӫa T(n) chӭa các sӕ hҥng chӍ liên quan ÿӃn n và các hҵng sӕ.

Giҧi phѭѫng trình.

Ví dө 1-10: Giҧi phѭѫng trình:

Ta có:

Giҧ sӱ n = 2k

, quá trình suy rӝng sӁ kӃt thúc khi i =k, khi ÿó ta có:

T(n) = 2k

T(1) + kC2n

Vì 2k

= n nên k = logn và vӟi T(1) =C1 nên ta có

Tải ngay đi em, còn do dự, trời tối mất!