Tương tự như vậy, dung lượng bộ nhớ đòi hỏi phải là khả dụng để giải một bài toán,vì vậy độ phức tạp không gian cũng cần phải tính đến.Vì việc xem xét độ phức tạp không gian gắn liền với[r]
Trang 1I:
1.1 KHÁI
1.1.1
Có
* + các %& nguyên, / chúng theo 2 3 4 "5) cho ! tìm 67 6
8 9 hai 6: - nó Khi 67+ giao cho ! bài toán 7 <*$ thì < 65 tiên = làm là xây "3 ! mô hình "@ bài toán 6 thành 9 = toán Các
trúc 67+ dùng trong các mô hình này là * + dãy, hàm, hoán <@ quan cùng < các trúc khác 7 6B @ cây, - 9 khái %D 67+ nghiên 2
E các 7F sau
G* 67+ ! mô hình toán thích + : là ! 5 - quá trình = IJ hoàn quá trình = còn 5 = có ! 7F pháp dùng mô hình 6J = bài toán
Khi / ,/ và cài 6R ! 5 tin cho ! < 6 nào 6 ta 5 =
67 ra 7F pháp = $/ mà 3 6 là * toán = $/ < 6 này Rõ ràng
1.1.2
W * 9 “Algorithm” X * toán) là phát Z tên nhà toán ] S* Al-Khowarizmi Ban 65 Z algorism 67+ dùng 6J : các quy 8 3 các phép tính
%& trên các %& * phân Sau 6 algorism $J thành algorithm vào / ,c 19
f %3 quan tâm ngày càng 4 6& < các máy tính, khái * toán 6# 67+ cho ! ý V chung F bao hàm = các - O xác 6@ 6J = các bài toán, 2 không = : là - O 6J 3 các phép tính %&
Có
mô
cùng < 9 ký toán quen ! còn dùng ! " = mã 6J mô = *
Trang 2toán
Thí
a) Dùng ngôn ngữ tự nhiên để mô tả các bước cần phải thực hiện:
1
2 So sánh
3
4 nZ khi không còn %& nguyên nào 9 trong dãy 3 6 E 6J này chính là
b) Dùng đoạn giả mã:
procedure max (a1, a2, , an: integers)
max:= a1
for i:= 2 to n
if max <ai then max:= ai
{max là
W * toán này 7 / gán %& 65 tiên a1
“for”
@ - max thì nó 67+ gán làm giá @ - max
1.1.3 Các .' *%/ '0 *1* toán:
vào (Input): Q! * toán có các giá @ 65 vào Z ! * 6# 67+ : rõ ra (Output): WZ v * các giá @ 65 vào, * toán %D ra các giá @ 65 ra
Các giá @ 65 ra chính là - bài toán
Tính
Tính xác
- * toán = cho 9 ,/ = 7 nhau
Tính
* toán 6! và 67 ra ,/ = 7 ý &
Tính
xác 6@
1.2
1.2.1 Bài toán tìm Bài toán xác
kê %8 2 3 7 R trong 7 + khác nhau 7F trình
Trang 3,J tra chính = - các Z tìm ,/ các Z này trong ! & Z 6J mà Z 6J
67+ là các bài toán tìm ,/
Bài toán tìm ,/ quát 67+ mô = 7 sau: xác 6@ <@ trí - 5 j x trong 1, a2, , an R xác 6@ U nó không có
1.2.2 1* toán tìm @+A? *BA tính: Tìm ,/ $/ tính hay tìm ,/ 5 3 là
1; khi x=a1, là <@ trí a1, 2 là 1; khi xa1, so sánh x < a2 L/ x=a2, là <@ trí - a2, 2 là 2 Khi xa2, so sánh x < a3 W/
khi tìm
kê 6# 67+ ,J tra mà không xác 6@ 67+ <@ trí - x, thì là 0 i= mã 6&
< * toán tìm ,/ $/ tính 67+ cho "7 6>$g
procedure tìm ,/ $/ tính (x: integer, a1,a2, ,an: integers phân
i := 1
while (i n and x ai)
i := i + 1
if i n then location := i
else location := 0
{location là
1.2.3 1* toán tìm @+A? phân:
ký 3 thì chúng 67+ %8 theo 2 3 Z 6J W * toán 2 hai này là * toán tìm
kích
tìm
so sánh
tìm ,/ @ phân = F so < * toán tìm ,/ $/ tính
Thí
tách
O J là: 1,2,3,5,6,7,8,10 và 12,13,15,16,18,19,20,22 Sau 6 ta so sánh 19 < %&
Trang 4này
Bây
1,a2, ,an < a1 < a2 < < an, ta
m E 9 - dãy, < m=[(n+1)/2] L/ x > am, < tìm ,/ x E j 2 hai - dãy, B am+1,am+2, ,an m, thì %3 tìm ,/ trong j 65 - dãy B a1,a2, ,am
Bây
Dùng chính
quá trình này cho
xác 6@ %& này có = là x hay không i= mã cho * toán tìm ,/ @ phân 67+ cho "7 6>$g
procedure tìm ,/ @ phân (x: integer, a1,a2, ,an: integers 4 "5Y
i := 1 {i là 6J mút trái - ,= tìm ,/ r
j := n {j là 6J mút = - ,= tìm ,/ r
while i < j
begin
m:= [(i+j)/2]
if x>am then i:=m+1
else j := m end
if x = ai then location := i else location := 0
{location là
1.3
1.3.1 Khái +7? 2M N $O' *P$ '0 ?N* *1* toán:
W7 6 = - ! * toán là gian mà máy tính %j "O 6J = bài toán theo * toán 6. xét, khi các giá @ 65 vào có ! kích 7 xác 6@
Trang 5@ 65 vào có kích 7 xác 6@ Các < 6 7 / liên quan 6/ 6! 2 tính toán - ! * toán b3 phân tích gian 5 / 6J = ! bài toán có kích
xem xét 6! 2 gian và không gian - ! * toán là ! < 6 /
$/ khi các * toán 67+ 3 `/ ! * toán %D 67 ra 6 %& trong ! micro giây, trong ! phút R trong ! : 4 J nhiên là / %2 quan
<*$ 6! 2 không gian y 5 = tính 6/f( < xem xét 6! 2 không gian
6>$ ta %D * trung xem xét 6! 2 gian
toán
"V 6! 2 gian 67+ mô = thông qua %& các phép toán 6K N thay vì gian
9 ,= gian khác nhau hF 9. phân tích = các phép toán thành các phép tính bit %F mà máy tính %j "O là 6 2
hai %& - * toán 6K N ! 6F <@ gian (giây Y thì gian 3
* toán trong 7 + là n-1 giây f dãy 64 %& gian 3
Thí "# 4:W * toán < trò chFi “Tháp Hà L!\
Trò ch
vào Y các 6V có 67 kính 6ôi ! khác nhau Nguyên 8 6R 6V vào là: v
A; hai
67+ di $J ! 6V.
Xét trò chFi < n 6V ban 65 E A X B và C &Y i Sn là
$J 6V 6J chFi xong trò chFi < n 6V.
L/ n=1 thì rõ ràng là S1=1
L/ n>1 thì tr7 / ta $J n-1 6V bên trên sang B X9 yên 6V 2 n E
Nh
Sn=Sn-1+1+Sn=2Sn-1+1=2(2Sn-2+1)+1=22Sn-2+2+1= =2n-1S1+2n-2+ +2+1=2n1
Trang 6W * toán < trò chFi “Tháp Hà L!\ 6òi N 2641
n4m!
Hai thí "O trên cho $ Ug ! * toán = ,/ thúc sau ! %& 9 b
3 /
Ta nói: * toán trong Thí "O 3 có 6! 2 là n-1 và là ! * toán 9
(hay * toán nhanh); * toán trong Thí "O 4 có 6! 2 là 2n1 và 6ó là ! * toán không 9 (hay * toán * Y
1.3.2 So sánh N $O' *P$ '0 các *1* toán:
Q! bài toán th7 có cách = có * toán 6J = các * toán 6ó có 6! 2 khác nhau
Xét bài toán: Tính giá @ - 6a 2 P(x)=anxn+an-1xn-1+ +a1x+a0 x0
1* toán 1:
Procedure tính giá @ - 6a 2 (a0, a1, , an, x0: các %& 3Y
sum:=a0
for i:=1 to n
sum:=sum+aix0i
{sum là giá @ - 6a 2 P(x) x0}
Chú ý U 6a 2 P(x) có J </ d7 "g
P(x)=( ((anx+an-1)x+an-2)x )x+a0
Ta có J tính P(x) theo * toán sau:
1* toán 2:
Procedure tính giá @ - 6a 2 (a0, a1, , an, x0: các %& 3Y
P:=an
for i:=1 to n
P:=P.x0+an-i {P là giá @ - 6a 2 P(x) x0}
Ta hãy xét 6! 2 - hai * toán trên
I& < * toán 1: E b7 2, = 3 1 phép nhân và 1 phép ! < i=1; 2 phép nhân và 1 phép ! < i=2, , n phép nhân và 1 phép ! < i=n f*$
%& phép tính (nhân và !Y mà * toán 1 6òi N là:
(1+1)+(2+1)+ +(n+1)= +n=
2
) 1 (n
n
2
) 3 (n
n
(nhân B !Y do 6ó %& phép tính (nhân và !Y mà * toán 2 6òi N là 2n
Trang 7L/ coi gian 3 v phép tính nhân và ! là nh7 nhau và là ! 6Fn <@ gian thì < v n cho tr7 gian 3 * toán 1 là n(n+3)/2, còn gian 3 * toán 2 là 2n
Rõ ràng là gian 3 * toán 2 ít hFn so < gian 3 * toán 1 Hàm f1(n)=2n là hàm
f2(n)=n(n+3)/2
Ta nói U * toán 2 (có 6! 2 là 2n) là * toán 9 hFn (hay nhanh hFn) so < * toán 1 (có 6! 2 là n(n+3)/2)
Các hàm xét sau
1:Ta nói hàm f(n) có
C>0 và ! %& 3 nhiên n0 sao cho
|f(n)| C|g(n)| < nn0
Ta </ f(n)=O(g(n)) và còn nói f(n) = mãn quan big-O 6& < g(n)
Theo 6@ V này, hàm g(n) là ! hàm 6Fn = có J 67+ 6 " cho
Khái big-O 6ã 67+ dùng trong toán 6ã 5 ! / ,c nay Trong tin
nó 67+ %j "O ! rãi 6J phân tích các * toán Nhà toán ng7 I2 Paul Bachmann là ng7 65 tiên 67a ra khái big-O vào n4m 1892
2
) 3 (n
n
f(n)= =O(n2) vì n2 < n3 (C=1, n0=3)
2
) 3 (n
n
2
) 3 (n
n
Q! cách quát, / f(n)=aknk+ak-1nk-1+ +a1n+a0 thì f(n)=O(nk) W* <*$
< n>1,
|f(n)|| |ak|nk+|ak-1|nk-1+ +|a1|n+|a0| = nk(|ak|+|ak-1|/n+ +|a1|/nk-1+a0/nk)
nk(|ak|+|ak-1|+ +|a1|+a0)
I này 2 N |f(n)| Cnk < n>1
Cho g(n)=3n+5nlog2n, ta có g(n)=O(nlog2n) W* <*$
3n+5nlog2n = n(3+5log2n) n(log2n+5log2n) = 6nlog2n < n8 (C=6, n0=8)
Cho f1(n)=O(g1(n)) và f2(n) là O(g2(n)) Khi 6
(f1 + f2)(n) = O(max(|g1(n)|,|g2(n)|), (f1f2)(n) = O(g1(n)g2(n))
O minh Theo = / B C1, C2, n1, n2 sao cho
|f1(n)| C1|g1(n)| và |f2(n)| C2|g2(n)| < n > n1 và n > n2
Do 6 |(f1 + f2)(n)| = |f1(n) + f2(n)| |f1(n)| + |f2(n)| C1|g1(n)| + C2|g2(n)| (C1+C2)g(n)
< n > n0=max(n1,n2), E 6>$o1+C2 và g(n)=max(|g1(n)| , |g2(n)|)
|(f1f2)(n)| = |f1(n)||f2(n)| C1|g1(n)|C2|g2(n)| C1C2|(g1g2)(n)| < n > n0=max(n1,n2)
Trang 82: L/ ! * toán có 6! 2 là f(n) < f(n)=O(g(n)) thì ta y nói * toán có 6! 2 O(g(n))
L/ có hai * toán = cùng ! bài toán, * toán 1 có 6! 2 O(g1(n)), * toán 2 có 6! 2 O(g2(n)), mà g1(n) có F g2(n), thì ta nói
U * toán 1 9 F (hay nhanh FY * toán 2
1.3.3 - giá N $O' *P$ '0 ?N* *1* toán:
1) 1* toán tìm @+A? *BA tính:
b& các phép so sánh 67+ dùng trong * toán này y %D 67+ xem 7 7
phép so sánh
i, thì 6# có 2i+1 phép so sánh 67+ %j "O b& phép so sánh
* toán tìm ,/ $/ tính có 6! 2 là O(n)
2) 1* toán tìm @+A? phân:
IJ 6F = ta = %j U có n=2k
1,a2, ,an, < k là
k+1 5 j trong 6 k là %& nguyên N sao cho n < 2k+1)
w v giai 6 - * toán <@ trí - %& 65 tiên i và %& & cùng j
F ! 5 j hay không L/ i < j, ! phép so sánh %D 67+ làm 6J xác 6@
x có
có
cho chúng ta
cho
2k+2=2log2n+2 phép so sánh 6J 3 phép tìm ,/ @ phân X/ n không = là
k+1 5 j < k=[log2n] và %3 tìm ,/ 6K N = 3 2[log2n]+2 phép so sánh) Do 6 * toán tìm ,/ @ phân có 6! 2 là O(log2n) WZ %3 phân tích E trên suy ra U * toán tìm ,/ @ phân, ngay = trong 7 + y = F * toán tìm ,/ $/ tính
3) Chú ý:
! bài toán Thí "O / ! * toán 6K N 10 thì có J còn 6 chi phí gian máy tính 6K N 6J = bài toán 6 L7 / ! * toán 6K N 10 : 4 6J
= ! bài toán, thì 3 * toán 6 %D là ! 6 phi lý Q! trong 9 trong máy tính Q! nhân & quan khác làm = gian 5 / 6J = !
Trang 9bài toán là %3 j lý song song - 6>$ là , * 3 6B các dãy phép tính
Do
dùng các
4 7 6>$ 67+ xem là không J = 67+ thì bây có J = bình 7
1 Các *1* W */X dùng cho N $O' *P$ '0 ?N* *1* toán:
O(bn) (b>1) I! 2 hàm y
2 X+ gian máy tính /Z' dùng G+ ?N* *1* toán:
Kích 7 Các phép tính bit 67+ %j "O
- bài toán
10 3.10-9 s 10-8 s 3.10-8 s 10-7 s 10-6 s 3.10-3 s
102 7.10-9 s 10-7 s 7.10-7 s 10-5 s 4.10134 *
103 1,0.10-8 s 10-6 s 1.10-5 s 10-3 s * *
104 1,3.10-8 s 10-5 s 1.10-4 s 10-1 s * *
105 1,7.10-8 s 10-4 s 2.10-3 s 10 s * *
106 2.10-8 s 10-3 s 2.10-2 s 17 phút * *
1.4
1.4.1 1* toán Euclide:
Ph
nguyên 6ó ra Z %& nguyên & là không = Lý do là E v gian = tiêu & cho
là
toán
tố” / - ông W * toán Euclide "3 vào 2 6 sau 6ây.
7 M 1 a1* toán chia): Cho a và b là hai %& nguyên và b0 Khi 6ó B duy hai %& nguyên q và r sao cho
a = bq+r, 0 r < |b|
Trong
là th7Fng %& và r 67+ là %& d7
Trang 10Khi b là nguyên d7Fng, ta ký %& d7 r trong phép chia a cho b là a mod b.
7 M 2:Cho a = bq + r, trong 6ó a, b, q, r là các %& nguyên Khi 6ó
UCLN(a,b) = UCLN(b,r)
i= %j a và b là hai %& nguyên d7Fng < a b IR r0 = a và r1 = b `U cách áp
"O liên / * toán chia, ta tìm 67+g
r0 = r1q1 + r2 0 r2 < r1
r1 = r2q2 + r3 0 r3 < r2
rn-2 = rn-1qn-1 + rn 0 rn < rn-1
rn-1 = rnqn
& cùng, %& d7 0 %D trong dãy các phép chia liên / vì dãy các %& d7
a = r0 > r1 > r2 > 0 không J 2 quá a %& 67+ HFn 9. Z Q 6 2 E trên ta suy ra:
UCLN(a,b) = UCLN(r0,r1) = UCLN(r1,r2) = = UCLN(rn-2, rn-1) = UCLN(rn-1,rn) = rn
Do
Thí "# 6: Dùng * toán Euclide tìm UCLN(414, 662).
662 = 441.1 + 248
414 = 248.1 + 166
248 = 166.1+ 82
166 = 82.2 + 2
82 = 2.41
Do 6 UCLN(414, 662) = 2
W * toán Euclide 67+ </ d7 " = mã nh7 sau:
procedure CLN (a,b: positive integers)
x := a
y := b
while y 0
begin
r := x mod y
x := y
y := r
end
{UCLN (a,b) là x}
Trong * toán trên, các giá @ ban 65 - x và y t7Fng 2 là a và b w v giai
Trang 111.4.2 =+c "+d các Ee nguyên:
7 M 3:Cho b là
d
n = akbk + ak-1bk-1 + + a1b + a0
w 6ây k là ! %& 3 nhiên, a0, a1, , ak là các %& 3 nhiên N hFn b và ak 0
`J " - n 67+ cho trong Q 6 3 67+ là khai J - n theo cF %&
b, ký là (akak-1 a1a0)b Bây ta %D mô = * toán xây "3 khai J cF %& b
n = bq0 + a0, 0 a0 < b
b& d7 a0 chính là 9 %& 62 bên = cùng trong khai J cF %& b - n W/ theo chia q0 cho b, ta 67+g
q0 = bq1 + a1, 0 a1 < b
b& d7 a1 chính là 9 %& 2 hai tính Z bên = trong khai J cF %& b - n W/ O quá trình này,
trong khai J cF %& b - n là các %& d7 t7Fng 2 Quá trình này %D ,/ thúc khi ta
Thí "# 7: Tìm khai J F %& 8 - (12345)10
12345 = 8.1543 + 1
1543 = 8.192 + 7
192 = 8.24 + 0
24 = 8.3 + 0
3 = 8.0 + 3
Do 6 (12345)10 = (30071)8
procedure khai triển theo cơ số b (n: positive integer)
q := n
k := 0
while q 0
begin
ak := q mod b
q := [q]
b
k := k + 1
end
1.4.3 1* toán cho các phép tính Ee nguyên:
Các * toán 3 các phép tính < 9 %& nguyên khi dùng các khai
J @ phân - chúng là 3 ,x quan trong %& - máy tính Ta %D mô = E
... Khái +7? 2M N $O'' *P$ ''0 ?N* *1* toán:W7 6 = - ! * toán gian mà máy tính %j "O 6J = toán theo * toán 6. xét, giá @ 65 vào có ! kích...
xem xét 6! 2 gian khơng gian - ! * tốn ! < 6 /
$/ * toán 67+ 3 `/ ! * toán %D 67 6 %& ! micro giây, ! phút R ! : 4 J...
W * toán 7 / gán %& 65 tiên a1
“for”
@ - max 67+ gán làm giá @ - max
1.1.3 Các .'' *%/ ''0 *1* toán: