Bài tập môn phân tích và thiết kế thuật toán đánh giá thuật toán dùng kỹ thuật toán sơ cấp

16 2 0
Bài tập môn phân tích và thiết kế thuật toán đánh giá thuật toán dùng kỹ thuật toán sơ cấp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan