Thông tin tài liệu
BÀI TẬP MƠN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TỐN by Hoàng Quang Khải - 21520952 Lê Tuấn Vũ - 21521679 Nguyễn Nhật Minh - 21521135 Lê Tiến Quyết - 21520428 Faculty of Computer Science Homework #01: Đánh giá thuật toán dùng kỹ thuật toán sơ cấp GV hướng dẫn: Huỳnh Thị Thanh Thương TPHCM, March 9, 2023 Tính tổng hữu hạn a) 1+3+5+7+ .+999 = b) + + + 16 + + 1024 = n(2a + (n 1)d) − = 22 500(2 + 499.2) a(1 − rn+1) = = 250000 2(1 − 29+1) = 2046 − r1 − n+1 c) 1=n+1−3+1=n−1 i=3 n+1 n+1 (n + 1)(n + 2) d)i = i=3 i− i=1 i=1 −3= i= 2 n + 3n − e) n−1 n−1 n−1 i(i + 1) = (i + i) = i=0 n−1 i + i=0 i=0 i i=0 +n(n − 1) = n(n + 1) = n(n − 1)(2n − 1) f) n j+1 n n j =3 =3 j=1 j =3 3 n+1 − j=0 −1 − 3 = n+2 − j=1 n = (3 n n g) ij = i i=1 j=1 (n + n) n(n + 1) n(n + 1) n(n + 1) n = 2 = − 1) i=1 h) n i(i + 1) i=1 n = i i=1 i − i+1 1 1 = − + − + + n n −n+1 −9 = i) 2 (j + j) = (2 + 2) + (3 + 3) + (5 + 5) = 48 j∈{2,3,5} n+1 j) m n 100 m n (i+j) = 101 i=1 j=0 k=0 (i+j) = 101 i(n + 1) + i=1 j=0 i=1 m(n + 1)(m + 1) = 101 n(n + 1) m mn(n + 1) + = 101 m(n+1)(m+n+1) Đếm số phép gán so sánh s ← 0; i ← 1; while i ≤ n j ← 1; while j ≤ i s←s+1; ← j + 1; end i ← i + 1; end j Vì α /* 2g /* 1g; n+1 ss */ /* 2g */ /* 1g */ số lần lặp vòng lặp i j j mà chạy từ → i số Gọi α */ i Do đó, αi nhận giá trị {1, 4, 9, , i while nhỏ với điều kiện j với bước tăng 2 ≤ i (α i 1) ≥ } → αi = i Kết luận n Gán(n) = + 2n + = n 2αi = + 2n + i = + 2n + i=1 i=1 2n + 3n + 7n + n n Sosánh(n) = n + + (αi + 1) = n + + i=1 = 2n + + n i + i=1 n(n + 1)(2n + 1) = 2n i=1 + 3n + 13n + 6 n(n + 1)(2n + 1) 3 Đếm số phép gán so sánh s ← 0; i ← 1; /* 2g i n ≤ while j←n−i ; while j ≤ i s ← s + ij ; ← j + 1; end i ← i + 1; end */ j /* 1g; n+1 ss */ /* 2g /* 1g */ α Gọi i số lần lặp vòng lặp Vì αi số j mà j chạy từ n 2− i Do đó, αi nhận giá trị {n − i , , i 2 ⇒ αi = i − (n − i ) + = 2i − n + */ while nhỏ với điều kiện j i ≤ 2 (α i 1) ≥ →2 i với bước tăng } n Với αi ≥ ⇔ n − i − i ≤ ⇒ i ≥ (i ≥ 1) Ta có: n n 2αi Gán(n) = + 2n + (2i − n + 1) = + 2n + i=1 i=1 n (2i − n + 1) = + 2n + i=⌈ √ n ⌉ n Sosánh(n) = n + + n (αi + 1) = n + + i=1 αi + i=1 n (2i − n + 1) = 2n + + i=⌈ √ n ⌉ n i=1 n Đặt t = , ta được: n n (2i − n + 1) = i=⌈ √ n (2i − n + 1) = ⌉ i=t t−1 n = (−n + 1)(n − t + 1) + i −2 i=1 = n (−n + 1)(n − t + 1) + n i (−n + 1) + i=t i i=t i=1 n(n + 1)(2n + 1) − t(t − 1)(2t − 1) 33 Kết luận Gán(n) = + 2n + 2(−n + 1)(n − t + 1) + = + 2(−n + 1)(n − t) + 2 3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] 3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] Sosánh(n) = 2n + + (−n + 1)(n − t + 1) + = + n + (−n + 1)(n − t) + 3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] 3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] n Với t = Đếm số phép gán so sánh float Function Alpha (float x, long n) long i ← 1; float z ← 0; while i ≤ n long j ← 1; float t ← 1; while j ≤ i t ← tx; j ← 2j; end z ← z + it; i ← i + 1; /* 2g */ /* 2g; n+1 ss */ /* 2g */ /* 2g */ end return z; Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ i (α i ≥ 1) Vì αi số j mà j chạy từ → i với tỉ lệ bước tăng k Và j nhận giá trị {1, 2, 4, 8, 16, , }, k ∈ N k Do đó: αi số phần tử tập {k ∈ N | ≤ i} ⇒ ≤ k ≤ log2 i ⇒ αi = ⌊log2 i⌋ + Kết luận n n Gán(n) = + 4n + (⌊log2 i⌋ + 1) 2αi = + 4n + i=1 i=1 n n ⌊log2 i⌋ + = 2+ 4n + i=1 n ⌊log2 i⌋ = + 6n + i=1 i=1 ≈ + 6n + 2n log n n n i=1 n = 3n + + i=1 ⌊log2 i⌋ + (αi + 1) = n + + Sosánh(n) = n + + n i=1 i=1 ⌊log2 i⌋ ≈ 3n + + n log n Đếm số phép gán so sánh sum ← 0; i ← 1; while i ≤ n j ← n − i; while j ≤ 2i sum ← sum + ij; j ← j + 2; end k ← i; while k > sum ← sum + 1; k ← k/2; end i ← i + 1; end /* 2g */ /* 1g; n+1 ss */ /* 2g */ /* 1g */ /* 2g */ /* 1g */ i=1 21 = + n + n + t(2n −1)− t + n ⌊log2 i⌋ i=1 21 ≈ + n + 4n + t(2n −1)− t + n log n Đếm số phép gán so sánh i ← 1; count ← 0; while i ≤ 4n x ← (n − i)(i − 3n); y ← i − 2n; j ← 1; while j ≤ x count ← count − 2; j ← j + 2; end if x > then /* 2g */ /* 3g; 4n+1 ss */ /* 2g */ if y > then count ← count + 1; /* 1g */ end end i ← i + 1; /* 1g */ end Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ x Vì αi số j mà j chạy từ → x với bước tăng Do đó: α số phần tử tập i { 1, 3, 5, , x } = ≈ Với αi ≥ ⇔ n + ≤ i ≤ 3n − x−1 x+1 +1= 2 (n − i)(i − 3n) x ≈ Vậy: 0, i ≤ n i ≥ 3n αi = (n − i)(i − 3n) , n + ≤ i ≤ 3n − Ta có bảng xét dấu: i n x = (n − i)(i − 3n) − y = i − 2n − 2n 3n + + − + Kết luận 4n Gán(n) = + × 4n + 2αi + [3n − − (2n + 1) + 1] i=1 3n−1 = 17n + + i=n+1 ≈ 17n + + (n − i)(i − 3n) 50 3n(4n − 1) = 3n + 3n + 4n Sosánh(n) = 4n + + (αi + 1) + 4n + [3n − − (n + 1) + 1] i=1 3n−1 = 14n + i=n+1 ≈ 14n + (n − i)(i − 3n) 2 3n(4n − 1) = 41 3n + 3n 4n − + Đếm số phép gán so sánh i ← 1; count ← 0; while i ≤ 4n x ← (n − i)(i − 3n); y ← i − 2n; j ← 1; while j ≤ x if i ≥ 2y then count ← count − 2; end j ← j + 1; end i ← i + 1; end /* 2g */ /* 3g; 4n+1 ss */ /* 1g */ /* 1g */ /* 1g */ Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ x Vì αi số j mà j chạy từ → x với bước tăng Do đó: αi số phần tử tập {1, 2, 3, , x} = x = (n − i)(i − 3n) Với αi ≥ ⇔ n + ≤ i ≤ 3n − Vậy: 0, i ≤ n i ≥ 3n αi = (n − i)(i − 3n), n + ≤ i ≤ 3n − Ta có bảng xét dấu: i n x = (n − i)(i − 3n) − y = i − 2n − 2n 3n + + − + Để câu lệnh count ← count − thực ⇔ i ≤ 2y ⇔ i ≤ 2(i − 2n) ⇔ i ≤ 4n ⇒ Câu lệnh thực while i ≤ 4n thoả mãn 10 4n − + Ta có 4n Gán(n) = + × 4n + 3n−1 2αi = + 16n + i=1 4n Sosánh(n) = 4n + + (n − i)(i − 3n) i=n+1 4n (αi + 1) + i=1 αi i=1 3n−1 = 8n + + (n − i)(i − 3n) i=n+1 Xét: 3n−1 3n−1 i=n+1 i=n+1 3n−1 = −3n (−3n + 4ni − i ) (n − i)(i − 3n) = 3n−1 + 4n i=n+1 3n−1 i i− i=n+1 i=n+1 3n−1 n = −3n (2n − 1) + 4n × 2n(2n − 1) −i + i2 i=1 = 10n − 5n 3n(3n − 1)(6n − 1) − n(n + 1)(2n + 1) + 6 Kết luận + 46n + 8n3 Gán(n) = + 16n + (4n3 − n) = 3 + 22n + 8n3 Sosánh(n) = + 8n + (4n3 − n) = i=1 3 4n − n =
Ngày đăng: 20/09/2023, 14:52
Xem thêm: