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 = 500(2 + 499.2) n(2a1 + (n − 1)d) = = 250000 2 b) + + + 16 + + 1024 = c) n+1 X a(1 − rn+1 ) 2(1 − 29+1 ) = = 2046 1−r 1−2 1=n+1−3+1=n−1 i=3 d) n+1 X i= i=3 n+1 X i− i=1 X i= i=1 (n + 1)(n + 2) −3= n + 3n − 2 e) n−1 X i(i + 1) = i=0 n−1 X (i2 + i) = n−1 X i=0 i2 + i=0 n−1 X i i=0 n(n − 1)(2n − 1) n(n − 1) n(n + 1)2 = + = f) n X j+1 j=1 =3 n X j =3 j=1 n X ! j −3 j=0 =3 3n+2 − 3n+1 − −1 = 3−1 = g) n X n X ij = i=1 j=1 n (3 − 1) n X n(n + 1) n(n + 1) (n2 + n)2 n(n + 1) = = i 2 i=1 h) n X i=1 i) X n X = i i(i + 1) i=1 1 − i i+1 1 1 1 = − + − + .+ − 2 n n+1 n = n+1 (j + j) = (22 + 2) + (32 + 3) + (52 + 5) = 48 j∈{2,3,5} j) m X n X 100 m X n m X X X n(n + 1) (i+j) = 101 (i+j) = 101 i(n + 1) + i=1 j=0 k=0 i=1 j=0 i=1 m(n + 1)(m + 1) mn(n + 1) 101 = 101 + = m(n+1)(m+n+1) 2 2 Đếm số phép gán so sánh s ← 0; i ← 1; while i ≤ n j ← 1; while j ≤ i2 s←s+1 ; j ← j + 1; end i ← i + 1; end /* 2g */ /* 1g; n+1 ss */ /* 2g */ /* 1g */ Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ i2 Vì αi số j mà j chạy từ → i2 với bước tăng Do đó, αi nhận giá trị {1, 4, 9, , i2 } → αi = i2 (αi ≥ 1) Kết luận Gán(n) = + 2n + = n X 2αi = + 2n + i=1 n X i2 = + 2n + i=1 n(n + 1)(2n + 1) 2n + 3n + 7n + Sosánh(n) = n + + n X (αi + 1) = n + + i=1 n X i=1 i + n X i=1 n(n + 1)(2n + 1) 2n3 + 3n2 + 13n + = 2n + + = 6 Đếm số phép gán so sánh s ← 0; i ← 1; while i ≤ n j ← n − i2 ; while j ≤ i2 s ← s + ij ; j ← j + 1; end i ← i + 1; end /* 2g */ /* 1g; n+1 ss */ /* 2g */ /* 1g */ Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ i2 Vì αi số j mà j chạy từ n − i2 → i2 với bước tăng Do đó, αi nhận giá trị {n − i2 , , i2 } ⇒ αi = i2 − (n − i2 ) + = 2i2 − n +1r n Với αi ≥ ⇔ n − i2 − i2 ≤ ⇒ i ≥ (i ≥ 1) Ta có: Gán(n) = + 2n + n X 2αi = + 2n + i=1 i=1 n X = + 2n + i=⌈ Sosánh(n) = n + + n X (2i2 − n + 1) √n n X (2i2 − n + 1) ⌉ (αi + 1) = n + + i=1 = 2n + + n X i=1 n X i=⌈ √n (2i2 − n + 1) ⌉ αi + n X i=1 (αi ≥ 1) Đặt t = p n n X i=⌈ √n , ta được: n n n X X X (2i − n + 1) = (2i − n + 1) = (−n + 1) + i2 ⌉ i=t = (−n + 1)(n − t + 1) + i=t n X i −2 i=1 t−1 X i=t i2 i=1 = (−n + 1)(n − t + 1) + n(n + 1)(2n + 1) t(t − 1)(2t − 1) − 3 Kết luận Gán(n) = + 2n + 2(−n + 1)(n − t + 1) + [n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] = + 2(−n + 1)(n − t) + [n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] Sosánh(n) = 2n + + (−n + 1)(n − t + 1) + [n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] = + n + (−n + 1)(n − t) + [n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] p 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; end return z; /* 2g */ /* 2g; n+1 ss */ /* 2g */ /* 2g */ 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 Và j nhận giá trị {1, 2, 4, 8, 16, , 2k }, k ∈ N Do đó: αi số phần tử tập {k ∈ N | 2k ≤ i} ⇒ ≤ k ≤ log2 i ⇒ αi = ⌊log2 i⌋ + Kết luận Gán(n) = + 4n + n X 2αi = + 4n + i=1 n X n X i=1 i=1 i=1 ⌊log2 i⌋ + = + 4n + n X (⌊log2 i⌋ + 1) n X = + 6n + ⌊log2 i⌋ i=1 ≈ + 6n + 2n log n Sosánh(n) = n + + n X (αi + 1) = n + + i=1 n X = 3n + + n X ⌊log2 i⌋ + i=1 n X i=1 ⌊log2 i⌋ ≈ 3n + + n log n i=1 Đế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 */ Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ 2i Vì αi số j mà j chạy từ n − i → 2i với bước tăng Do đó: 2i − (n − i) +1 3i − n + = αi số phần tử tập {n − i, n − i + 2, , 2i} = Với αi ≥ ⇔ n − i ≤ 2i ⇔ i ≥ n Vậy: αi = 0, i< lnm 3i − n + , i≥ lnm Gọi βi số lần lặp vòng lặp while nhỏ với điều kiện k > Vì βi số j mà j chạy từ i → với tỉ lệ bước giảm Do đó: i i i i βi số phần tử tập i, , , , k | k ∈ N, k ≥ ⇒ ≤ k ≤ log2 i 2 Vậy: βi = ⌊log2 i⌋ + Ta có Gán(n) = + 3n + = + 3n + n X 2αi + i=1 n X n X i=1 n X (3i − n + 2) + (⌊log2 i⌋ + 1) i=1 i=⌈ n 3⌉ = + 5n + n X 2βi n X (3i − n + 2) + ⌊log2 i⌋ i=1 i=⌈ n 3⌉ Sosánh(n) = n + + =n+1+ n X i=1 n X i=1 (αi + 1) + n X (βi + 1) i=1 αi + n X βi + n X i=1 i=1 n n X X (3i − n + 2) + (⌊log2 i⌋ + 1) = 3n + + n i=1 i=⌈ ⌉ n n X X = 4n + + (3i − n + 2) + ⌊log2 i⌋ i=1 i=⌈ n 3⌉ Đặt t = n n X , ta được: n n X X (3i − n + 2) = (−n + 2) + i i=t i=⌈ n 3⌉ i=t = (−n + 2)(n − t + 1) + (n − t + 1)(n + t) Kết luận n X Gán(n) = + 5n + (−n + 2)(n − t + 1) + (n − t + 1)(n + t) + ⌊log2 i⌋ i=1 n X 15 1 = + n + n2 + t(2n − 1) − t2 + ⌊log2 i⌋ 2 2 i=1 ≈4+ 15 1 n + n2 + t(2n − 1) − t2 + 2n log n 2 2 n X Sosánh(n) = 4n + + (−n + 2)(n − t + 1) + (n − t + 1)(n + t) + ⌊log2 i⌋ i=1 n =2+ X 21 1 n + n2 + t(2n − 1) − t2 + ⌊log2 i⌋ 4 4 i=1 ≈2+ 21 1 n + n2 + t(2n − 1) − t2 + n log n 4 4 Đế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 if y > then count ← count + 1; end end i ← i + 1; end /* 2g */ /* 3g; 4n+1 ss */ /* 2g */ /* 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 đó: x + lxm x−1 +1= ≈ 2 2 (n − i)(i − 3n) ≈ αi số phần tử tập {1, 3, 5, , x} = 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: n i x = (n − i)(i − 3n) − y = i − 2n − 2n + 3n + − + 4n − + Kết luận Gán(n) = + × 4n + = 17n + + 4n X i=1 3n−1 X i=n+1 2αi + [3n − − (2n + 1) + 1] (n − i)(i − 3n) 50 ≈ 17n + + n(4n2 − 1) = n3 + n + 3 Sosánh(n) = 4n + + = 14n + 4n X (αi + 1) + 4n + [3n − − (n + 1) + 1] i=1 3n−1 X i=n+1 (n − i)(i − 3n) 41 ≈ 14n + n(4n2 − 1) = n + n3 3 Đế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 + + 4n − + Để 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 Ta có 4n X Gán(n) = + × 4n + i=1 Sosánh(n) = 4n + + 4n X 3n−1 X 2αi = + 16n + (n − i)(i − 3n) i=n+1 (αi + 1) + i=1 3n−1 X = 8n + + 4n X αi i=1 (n − i)(i − 3n) i=n+1 Xét: 3n−1 X (n − i)(i − 3n) = i=n+1 3n−1 X (−3n2 + 4ni − i2 ) i=n+1 = −3n2 3n−1 X + 4n i=n+1 3n−1 X i=n+1 i− 3n−1 X i2 i=n+1 = −3n (2n − 1) + 4n × 2n(2n − 1) − 3n−1 X i=1 = 10n3 − 5n2 − i + n X i2 i=1 4n3 − n 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 + (4n − n) = 3 11 Đếm số phép gán so sánh i ← 1; count ← 0; while i ≤ 3n x ← 2n − i; y ← i − n; j ← 1; while j ≤ x if j ≥ n then count ← count − 1; end j ← j + 1; end if y > then if x > then count ← count + 1; end end i ← i + 1; end /* 2g */ /* 3g; 3n+1 ss */ /* 1g */ /* 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 = 2n − i Với αi ≥ ⇔ i ≤ 2n − Ta có bảng xét dấu: i n x = 2n − i + y = i−n − 2n + + Gọi βi số lần câu lệnh if j ≥ n thoả mãn 12 3n − + βi = số phần tử tập hợp {n, n + 1, , x} = x − n + = 2n − i − n + = n − i + Với βi ≥ ⇔ i ≤ n Từ bảng xét dấu: x > ⇔ ≤ i ≤ 2n − y > ⇔ n + ≤ i ≤ 3n x>0 ⇔ n + ≤ i ≤ 2n − y>0 Kết luận Gán(n) = + × 3n + 3n X βi + i=1 = + 13n + n X 3n X αi + [2n − − (n + 1) + 1] i=1 (n − i + 1) + i=1 (2n − i) i=1 = + 13n + (n + 1) n X 1− i=1 = + 13n + n(n + 1) − = 2n−1 X n X i + 2n i=1 2n−1 X i=1 1− 2n−1 X i i=1 n(n + 1) 2n(2n − 1) + 2n(2n − 1) − 2 5n2 + 25n + 2 Sosánh(n) = 3n + + = + 8n + 3n X (αi + 1) + i=1 3n X 3n X αi + 3n + [3n − (n + 1) + 1] i=1 1+2 i=1 2n−1 X 3n X αi i=1 (2n − i) = + 11n + i=1 2n−1 X = + 11n + 4n 1−2 i=1 2n−1 X i i=1 = + 11n + 4n(2n − 1) − × 13 2n(2n − 1) = 4n2 + 9n + Đếm số phép gán so sánh i ← 1; res ← 0; while i≤ n j ← 1; k ← 1; while j ≤ i res ← res + ij; k ← k + 2; j ← j + k; end i ← i + 1; end /* 2g */ /* 2g; n+1 ss */ /* 3g */ /* 1g */ Gọi αi số lần lặp vòng lặp while nhỏ với điều kiện j ≤ i Vì αi số j mà j chạy từ → i với bước tăng cấp số cộng với số hạng đầu u1 = công bội d = Do đó: αi số phần tử tập {1, 4, 9, , i} = số phần tử tập {m ∈ N∗ | m2 ≤ i} Vậy: αi = j√ k i Kết luận Gán(n) = + 3n + n X n j X √k 3αi = + 3n + i i=1 i=1 √ √ √ 2 = + 3n + n −2 n − n + 6n + Sosánh(n) = n + + n X (αi + 1) = 2n + + i=1 n j X = 2n + + n X αi i=1 √k i i=1 √ √ √ 2 = 2n + + n −2 n − n + 6n + 14 10 Đếm số phép gán so sánh sum ← 0; /* 3g */ i ← 1; idx ← −1; while i ≤ n j ← 1; /* 1g; n+1 ss */ while j ≤ n if (i = j) AND (i + j = n + 1) then idx ← i; end sum ← sum + a[i][j]; /* 2g; n+1 ss */ j ← j + 1; end i ← i + 1; /* 1g */ end if idx ̸= −1 then sum ← sum − a[idx][idx]; end i=j Để gán idx ← i : ⇔ 2i = n + ⇔ n lẻ i+j =n+1 Nhận xét: TH 1: n lẻ → tồn trường hợp thoả mãn điều kiện để idx ← i, đó: Gán(n) = + 2n + (1 + 2n2 ) + = 2n2 + 2n + Sosánh(n) = n + + n(n + 1) + 2n2 + = 3n2 + 2n + TH 2: n chẵn → không tồn trường hợp thoả mãn điều kiện ⇒ idx ← −1, đó: Gán(n) = + 2n + 2n2 Sosánh(n) = n + + n(n + 1) + 2n2 + = 3n2 + 2n + Kết luận Gán(n) = 2n2 + 2n + 5, 2n2 + 2n + 3, n lẻ n chẵn Sosánh(n) = 3n2 + 2n + 15
Ngày đăng: 28/06/2023, 07:42
Xem thêm: