TRUONG DAI HOC CONG NGHE THONG TIN KHOA KHOA HOC MAY TINH BAI TAP MON PHAN TICH VA THIET KE THUAT TOAN HOMEWORK #01: DANH GIA THUAT TOAN DUNG KY THUAT TOAN SO CAP GV hướng dẫn: Huỳn
Trang 1
TRUONG DAI HOC CONG NGHE THONG TIN
KHOA KHOA HOC MAY TINH
BAI TAP MON PHAN TICH VA THIET KE THUAT TOAN
HOMEWORK #01: DANH GIA THUAT TOAN DUNG KY
THUAT TOAN SO CAP
GV hướng dẫn: Huỳnh Thị Thanh Thương Nhóm thực hiện:
1 Bui Nhat Phi 22521078
2 Thai Ngoc Quan 22521189
3 Nguyễn Phú Tài 22521280
4 Huỳnh Nhật Minh 22520862
TP.HCM, ngày 16 tháng 3 năm 2024
Trang 5e 2a; phép gan, a; + 1 phép so sánh (xét độc lập while trong)
e ø„~+ 1 phếp so sánh của while ngoài
G(n) =2+2n "» 20;
i=l 5S(m) =n+1+ So (ai + 1)
mn
Xét:
® œ¿ — số con 7, với 7 từ 1 đến i”, bước tăng 7 = j+1 = øœ¡ =/?—1+1=
Vậy: Giá trị của G(n):
G(n) =2+2n+ » (222)
1 nín + 1)(2n + 1)
=2+2: +2n + 3
Giá trị của S9(m):
SS(n) "1A v.v
i=1 m n(n + 1)(2n +1)
Trang 6e 2 phép gan đầu tiên
e 4n phép gán của while ngoài
© 2a; phép gan, a; + 1 phép so sánh (xét độc lập while trong)
e n+1 phép so sénh while ngoai
G(n) =2+4n "» 2a;
¿=1 5S(m) =n+1+ » +1)
¿=1
Xét aj:
© a; = 86 con j, véi j tit 1 dén i, bude ting 7 = 2 * j
ef ={1,2,4,8, ,2* <i}, s6 conk: 1 <2? <i S0<k < logyi
Trang 7log a + log b = log (a * b)
e œ;¿ là số vòng lặp của while trong trên (xét độc lập với while trong trên)
e 6; lA 86 vòng lặp của while trong dưới (xét độc lập với while trong
dưới)
® G(n), S5(n) lần lượt là số phép gần và so sánh cần tìm
Tà có:
e 2 lệnh gán đầu tiên
e 3n lénh gan cha while ngoài
e 2o; phếp gắn, œ + l phép so sánh (xét độc lập while trong trên)
e 23; phép gan, Ø; + 1 phép so sánh (xét độc lập while trong dưới)
e ø„~+ 1 phếp so sánh của while ngoài
Trang 9k=k+4+ 2;
j=j+k
endw i=i+1;
L¿ = 86 con j chay ttt 1 —> 7, bước tang tại 7 thet ¢: ky, = 2t+1
=j/.=l+3+5+7+-: ha = Yip Dat iae
Ma 1 <j, <i nén L, 1A sé con £ thỏa mãn 1< <i
sil<t<Vish=vi
= G(n) =2+ 3n +3 ` Vi 2+ 3n + 9nVn
j=1
Trang 10e œ; là số vòng lặp của while trong (xét độc lập với while trong)
e 6; là số phép gán của lệnh count = count - 2
® ð; là số phép so sánh của câu lệnh if(ï>=2y)
® G(m), S5(n) lần lượt là số phép gán và so sánh cần tìm
Tà có:
e 2 lệnh gán đầu tiên
Trang 11© a; + 8; phép gan cha while trong (xét độc lập while trong)
e Lénh gan count = count - 2 thuc hién khi i>=2y
¿ >= 3 © ¡ < 4n => lệnh gần luôn được thực hiện => 6; = a;
e Lệnh so sánh if(>=2y) thực hiện khi while trong lặp > 6; = a;
Trang 12®© 4; là số vòng lặp của while trong (xét độc lập với while trong)
e B;,C; lan luot là số phép gần và so sánh của while trong (xét độc lập
với while ngoài)
e 7); L„ lần lượt là số phép gần và so sánh của lệnh if (x>0) if(y>0) count=count+1;
Trang 13® 4; = số con 7, với 7 từ 1 đến #, bước tăng j + +
=> Á¡ =# = (n — ?)(— 3n)
e While trong chỉ thực hiện khi 7 < z © 1 < (ø— 2) — 3m)
=> (n — ?)(¡— 3n) > Ũ
=nm+l]<¿<8n— ]
e Phép gán 7 + + thực hiện 4; lần ứng với mỗi vòng lặp của while ngoài
e Phép gán coun# = cơun‡ — 2 thực hiện A; lần với điều kiện ¿ > 2n
e Từ đó kết luận được: Từ ¿ = 1 —> 22 — 1 chỉ có A; phép gan, tit
4 = 2n —> Ân có 2A; phép gần
Xét C; :
e Mỗi lần lặp của while trong, lệnh if(i>=2x*n) luôn được thực thi, do
đó phép so sánh i >= 2 *# cũng được thực hiện ứng với số lần lặp của
while trong, tức 4; lần
e Bản thân phép so sánh 7 <= # của while trong cũng được so sánh
A¿+ 1 lần (4; lần đúng, thực thi lệnh bên trong while trong, 1 lần sai, thoát while trong)
e Lénh if (x>0) va phép so sénh x > 0 luôn được thực thi ứng với mỗi
lần lặp của while ngoài Tức là nó được thực thi 4ø lần
Trang 14đúng, tức chỉ khi z > 0, hay ø < ¿ < 3m
=nm+l]<¿<8n— ]
e Từ đó ta có: #¿ = 4n + (3n — 1) — (n+ 1) + 1= 4n + 2n — 1 = 6n — T Gia tri cla G(n):
Trang 15e q; la s6 lan lap cha while trong (xét độc lập while trong)
Trang 16Ta lap bang xét dau:
e >0 luôn được thực hiện => 3n phép so sanh
e + >0 được thực hiện khi y > 0 đúng, tức là ® + 1 < ¿ < 3n
= %¡ = 3n + 3n — (n + 1) +1 =ñn
Vậy: Giá trị của G(n):
3n 3n G(n) =2+1LntS at S 0 tôi
Trang 17while (i <= n)
{ jJ = 1;
while (j <= n) { if (Gi == j) kè (¡ + j ==n + 1))
sum = sum — a[idx] [idx];
Ta quy ude nhu sau: Dém dua trén ngdn ngit hé tro short-circuit evalu- ation (déi số thứ hai trong biểu thúc logic chỉ được đánh giá nếu đối số thứ nhất không đủ để rác định giá trị biểu thúc) Ngoài ra, phép logic && sẽ không được đếm
Tà có:
e 3 phép gán đầu tiên
e 2n phép gán while ngoài
e 2ø phép gán luôn được thực hiện của while trong
Nhan xét: Diéu kién if ((i == j) && (Gi + j == n + 1)) đúng khi
¿=7j=(n+ 1)/2, mà ¿, 7 nguyên nên lúc này n là số lẻ
Xét ø lễ: ¡ chạy từ 1 đến ø%, 7 chạy từ 1 đến ø ứng với mỗi ¡, ta thấy ¡ = 7= (n+1)/2 chỉ xây một lần duy nhất trong toàn bộ chương trình nên phép
gán idx = i được thực hiện 1 lan vA theo dé sum = sum - alidx] [idx]
Trang 18=> Số phép gan: G(n) =34+2n+ 2` n= 2n2 + 2n + 3
¿=1
Œ là số phép so sánh khi thực thi lệnh if ((i == j) && (i + j == n + 1))
Tà có:
e ø +1 phép so sánh điều kiện lặp while ngoài
e ø +1 phép so sánh điều kiện lặp while trong
e 1 phếp so sánh cuối
S6 phép so sinh: SS(n) =n +1+ » (n+1)+Œ~+1
1 Xét while trong: lệnh iŸ được thực hiện n lần, trong n lần đó, có 1 lần
điều kiện ¡ == j đúng để thực hiện phép so sánh ¡ + j == n + I
Trang 19= Lap n lan
Gọi a là số lần lặp của while trong (xét độc lập while trong)
œ¿ = số con j với j chạy từ 1 đến s
i k=1
Trang 2011 Baill
a) Đếm thủ công
Đặt:
e A; 1a số lần lặp của while trong (xét độc lập với while trong)
e Ö; là số phép gán của lệnh if(i!=j) sum=sum+1;
Ứng với mỗi lần lặp của while ngoài, cho đến khi ¿ = ø, luôn có nñ(m— 1)
thời điểm điều kiện 7! = j7 thỏa mãn (tương tự THỊ)
Từ ¿ > ø + 1 đến ¿ = rm, không tồn tại thời điểm điều kiện ¿! = j thỏa mãn vi lic nay i > maa(j) =n
(242m 4+ V2 n+ n(m—-1), néum>n
Trang 215S(m) =m + 1+ S 0A; +1)
i=1
=m+1+ 5 (Qn +1)
i=1 b) Kiém tra két qua dém bang may tinh Code C++:
Trang 22= Nhận xét bảng: Giá trị khi đếm thủ công và khi chạy chương trình của
cả Gín) và 55(n) là như nhau