1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 5 0

Đ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

Thông tin cơ bản

Tiêu đề Đánh giá Thuật toán Dùng Kỹ Thuật Thuật Toán Sơ Cấp
Tác giả Hoàng Quang Khải, Lê Tuấn Vũ, Nguyễn Nhật Minh, Lê Tiến Quyết
Người hướng dẫn PTS. Huỳnh Thị Thanh Thương
Trường học University of Science and Technology Ho Chi Minh City
Chuyên ngành Phân tích và Thiết kế Thuật toán
Thể loại Bài tập môn
Năm xuất bản 2023
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 16
Dung lượng 224,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

BÀI TẬP MÔN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁ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

Trang 2

1 Tính tổng hữu hạn

a) 1+3+5+7+ .+999 = n(2a1+ (n − 1)d)

500(2 + 499.2)

b) 2 + 4 + 8 + 16 + + 1024 = a(1 − r

n+1)

2(1 − 29+1)

1 − 2 = 2046 c)

n+1

X

i=3

1 = n + 1 − 3 + 1 = n − 1

d)

n+1

X

i=3

i =

n+1

X

i=1

i −

2

X

i=1

i = (n + 1)(n + 2)

2 n

2+ 3n − 4

e)

n−1

X

i=0

i(i + 1) =

n−1

X

i=0

(i2+ i) =

n−1

X

i=0

i2 +

n−1

X

i=0

i

= n(n − 1)(2n − 1)

n(n − 1)

n(n + 1)2

3 f)

n

X

j=1

3j+1 = 3

n

X

j=1

3j = 3

n

X

j=0

3j − 30

!

= 3 3n+1− 1

3 − 1 − 1



= 3

n+2− 9 2

= 9

2(3

n− 1)

g)

n

X

i=1

n

X

j=1

ij =

n

X

i=1

in(n + 1)

n(n + 1) 2

n(n + 1)

(n2+ n)2

4 h)

n

X

i=1

1 i(i + 1) =

n

X

i=1

i 1

i + 1



= 1

1−1

2+

1

2−1

3+ .+

1

n + 1

n + 1 i) X (j2 + j) = (22 + 2) + (32+ 3) + (52+ 5) = 48

Trang 3

m

X

i=1

n

X

j=0

100

X

k=0

(i+j) = 101

m

X

i=1

n

X

j=0

(i+j) = 101

m

X

i=1

 i(n + 1) + n(n + 1)

2



= 101 m(n + 1)(m + 1)

mn(n + 1) 2



= 101

2 m(n+1)(m+n+1)

i ← 1;

while i ≤ n do

while j ≤ i2 do

j ← j + 1;

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ i2 (αi ≥ 1)

Vì αi là số con j mà j chạy từ 1 → i2 với bước tăng là 1

Do đó, αi nhận các giá trị {1, 4, 9, , i2} → αi = i2

Kết luận

Gán(n) = 2 + 2n +

n

X

i=1

2αi = 2 + 2n + 2

n

X

i=1

i2 = 2 + 2n + n(n + 1)(2n + 1)

3

= 2n

3+ 3n2+ 7n + 6 3

Sosánh(n) = n + 1 +

n

X

i=1

(αi+ 1) = n + 1 +

n

X

i=1

i2 +

n

X

i=1

1

= 2n + 1 + n(n + 1)(2n + 1)

2n3+ 3n2+ 13n + 6

6

Trang 4

3 Đếm số phép gán và so sánh

i ← 1;

while i ≤ n do

while j ≤ i2 do

j ← j + 1;

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ i2 (αi ≥ 1)

Vì αi là số con j mà j chạy từ n − i2 → i2 với bước tăng là 1

Do đó, αi nhận các giá trị {n − i2, , i2}

⇒ αi = i2− (n − i2) + 1 = 2i2− n + 1

Với αi ≥ 1 ⇔ n − i2− i2 ≤ 0 ⇒ i ≥r n

2

 (i ≥ 1)

Ta có:

Gán(n) = 2 + 2n +

n

X

i=1

2αi = 2 + 2n + 2

n

X

i=1

(2i2− n + 1)

= 2 + 2n + 2

n

X

i=⌈√n

2⌉ (2i2− n + 1)

Sosánh(n) = n + 1 +

n

X

i=1

(αi+ 1) = n + 1 +

n

X

i=1

αi+

n

X

i=1

1

= 2n + 1 +

n

X

i=⌈√n

2⌉ (2i2− n + 1)

Trang 5

Đặt t = n2, ta được:

n

X

i=⌈√n

2⌉

(2i2− n + 1) =

n

X

i=t

(2i2− n + 1) =

n

X

i=t

(−n + 1) + 2

n

X

i=t

i2

= (−n + 1)(n − t + 1) + 2

n

X

i=1

i2− 2

t−1

X

i=1

i2

= (−n + 1)(n − t + 1) + n(n + 1)(2n + 1)

3 Kết luận

Gán(n) = 2 + 2n + 2(−n + 1)(n − t + 1) + 2

3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)]

= 4 + 2(−n + 1)(n − t) + 2

3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)]

Sosánh(n) = 2n + 1 + (−n + 1)(n − t + 1) + 1

3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)]

= 2 + n + (−n + 1)(n − t) + 1

3[n(n + 1)(2n + 1) − t(t − 1)(2t − 1)] Với t =pn2

float Function Alpha (float x, long n)

float z ← 0;

while i ≤ n do

float t ← 1;

while j ≤ i do

j ← 2j;

end

i ← i + 1;

end

return z;

Trang 6

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ i (αi ≥ 1)

Vì αi là số con j mà j chạy từ 1 → i với tỉ lệ bước tăng là 2

Và j nhận các giá trị {1, 2, 4, 8, 16, , 2k}, k ∈ N

Do đó: αi là số phần tử của tập {k ∈ N | 2k≤ i} ⇒ 0 ≤ k ≤ log2i

⇒ αi = ⌊log2i⌋ + 1

Kết luận

Gán(n) = 2 + 4n +

n

X

i=1

2αi = 2 + 4n + 2

n

X

i=1

(⌊log2i⌋ + 1)

= 2 + 4n + 2

n

X

i=1

⌊log2i⌋ + 2

n

X

i=1

1 = 2 + 6n + 2

n

X

i=1

⌊log2i⌋

≈ 2 + 6n + 2n log n

Sosánh(n) = n + 1 +

n

X

i=1

(αi+ 1) = n + 1 +

n

X

i=1

⌊log2i⌋ +

n

X

i=1

2

= 3n + 1 +

n

X

i=1

⌊log2i⌋ ≈ 3n + 1 + n log n

i ← 1;

while i ≤ n do

while j ≤ 2i do

j ← j + 2;

end

while k > 0 do

k ← k/2;

end

end

Trang 7

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ 2i.

Vì αi là số con j mà j chạy từ n − i → 2i với bước tăng là 2

Do đó:

αi là số phần tử của tập {n − i, n − i + 2, , 2i} = 2i − (n − i)

= 3i − n + 2

2 Với αi ≥ 1 ⇔ n − i ≤ 2i ⇔ i ≥ n

3. Vậy:

αi =

0, i <

ln 3 m

3i − n + 2

ln 3 m

Gọi βi là số lần lặp của vòng lặp while nhỏ với điều kiện k > 0

Vì βi là số con j mà j chạy từ i → 1 với tỉ lệ bước giảm là 1

2.

Do đó:

βi là số phần tử của tập



i, i

2,

i

4, ,

i

2k | k ∈ N, i

2k ≥ 1



⇒ 0 ≤ k ≤ log2i Vậy:

βi = ⌊log2i⌋ + 1

Ta có

Gán(n) = 2 + 3n +

n

X

i=1

2αi+

n

X

i=1

2βi

= 2 + 3n +

n

X

i=⌈n

3⌉ (3i − n + 2) + 2

n

X

i=1

(⌊log2i⌋ + 1)

= 2 + 5n +

n

X

i=⌈n

3⌉ (3i − n + 2) + 2

n

X

i=1

⌊log2i⌋

Trang 8

Sosánh(n) = n + 1 +

n

X

i=1

(αi+ 1) +

n

X

i=1

(βi+ 1)

= n + 1 +

n

X

i=1

αi+

n

X

i=1

βi+ 2

n

X

i=1

1

= 3n + 1 + 1

2

n

X

i=⌈n

3⌉ (3i − n + 2) +

n

X

i=1

(⌊log2i⌋ + 1)

= 4n + 1 + 1

2

n

X

i=⌈n

3⌉ (3i − n + 2) +

n

X

i=1

⌊log2i⌋

Đặt t =n3, ta được:

n

X

i=⌈n

3⌉

(3i − n + 2) =

n

X

i=t

(−n + 2) + 3

n

X

i=t

i

= (−n + 2)(n − t + 1) + 3

2(n − t + 1)(n + t) Kết luận

Gán(n) = 2 + 5n + (−n + 2)(n − t + 1) + 3

2(n − t + 1)(n + t) + 2

n

X

i=1

⌊log2i⌋

= 4 +15

2 n +

1

2n

2+1

2t(2n − 1) −

3

2t

2 + 2

n

X

i=1

⌊log2i⌋

≈ 4 + 15

2 n +

1

2n

2+ 1

2t(2n − 1) −

3

2t

2+ 2n log n

Sosánh(n) = 4n + 1 + 1

2(−n + 2)(n − t + 1) +

3

4(n − t + 1)(n + t) +

n

X

i=1

⌊log2i⌋

= 2 + 21

4 n +

1

4n

2+ 1

4t(2n − 1) −

3

4t

2+

n

X

i=1

⌊log2i⌋

≈ 2 + 21

4 n +

1

4n

2+1

4t(2n − 1) −

3

4t

2+ n log n

Trang 9

6 Đếm số phép gán và so sánh

count ← 0;

while i ≤ 4n do

y ← i − 2n;

j ← 1;

while j ≤ x do

j ← j + 2;

end

if x > 0 then

if y > 0 then

end

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ x

Vì αi là số con j mà j chạy từ 1 → x với bước tăng là 2

Do đó:

αi là số phần tử của tập {1, 3, 5, , x} = x − 1

x + 1

2 ≈lx

2 m

≈ (n − i)(i − 3n)

2



Với αi ≥ 1 ⇔ n + 1 ≤ i ≤ 3n − 1

Trang 10

αi =

0, i ≤ n hoặc i ≥ 3n

 (n − i)(i − 3n)

2

 , n + 1 ≤ i ≤ 3n − 1

Ta có bảng xét dấu:

i

x = (n − i)(i − 3n)

y = i − 2n

Kết luận

Gán(n) = 2 + 4 × 4n +

4n

X

i=1

2αi+ [3n − 1 − (2n + 1) + 1]

= 17n + 1 + 2

3n−1

X

i=n+1

 (n − i)(i − 3n)

2



≈ 17n + 1 +1

3n(4n

2− 1) = 4

3n

3+50

3 n + 1

Sosánh(n) = 4n + 1 +

4n

X

i=1

(αi+ 1) + 4n + [3n − 1 − (n + 1) + 1]

= 14n +

3n−1

X

i=n+1

 (n − i)(i − 3n)

2



≈ 14n +1

3n(4n

2− 1) = 41

3 n +

4

3n

3

Trang 11

7 Đếm số phép gán và so sánh

count ← 0;

while i ≤ 4n do

y ← i − 2n;

j ← 1;

while j ≤ x do

if i ≥ 2y then

end

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ x

Vì αi là số con j mà j chạy từ 1 → x với bước tăng là 1

Do đó:

αi là số phần tử của tập {1, 2, 3, , x} = x = (n − i)(i − 3n)

Với αi ≥ 1 ⇔ n + 1 ≤ i ≤ 3n − 1

Vậy:

αi =

0, i ≤ n hoặc i ≥ 3n (n − i)(i − 3n), n + 1 ≤ i ≤ 3n − 1

Ta có bảng xét dấu:

i

x = (n − i)(i − 3n)

y = i − 2n

Để câu lệnh count ← count − 2 được thực hiện ⇔ i ≤ 2y ⇔ i ≤ 2(i − 2n)

⇔ i ≤ 4n ⇒ Câu lệnh luôn được thực hiện khi while i ≤ 4n thoả mãn

Trang 12

Ta có

Gán(n) = 2 + 4 × 4n +

4n

X

i=1

2αi = 2 + 16n + 2

3n−1

X

i=n+1

(n − i)(i − 3n)

Sosánh(n) = 4n + 1 +

4n

X

i=1

(αi+ 1) +

4n

X

i=1

αi

= 8n + 1 + 2

3n−1

X

i=n+1

(n − i)(i − 3n)

Xét:

3n−1

X

i=n+1

(n − i)(i − 3n) =

3n−1

X

i=n+1

(−3n2+ 4ni − i2)

= −3n2

3n−1

X

i=n+1

1 + 4n

3n−1

X

i=n+1

i −

3n−1

X

i=n+1

i2

= −3n2(2n − 1) + 4n × 2n(2n − 1) −

3n−1

X

i=1

i2+

n

X

i=1

i2

= 10n3− 5n2−3n(3n − 1)(6n − 1)

n(n + 1)(2n + 1)

4n3− n 3 Kết luận

Gán(n) = 2 + 16n + 2

3(4n

3− n) = 6 + 46n + 8n

3

3

Sosánh(n) = 1 + 8n + 2

3(4n

3 − n) = 3 + 22n + 8n

3

3

Trang 13

8 Đếm số phép gán và so sánh

count ← 0;

while i ≤ 3n do

y ← i − n;

j ← 1;

while j ≤ x do

if j ≥ n then

end

end

if y > 0 then

if x > 0 then

end

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ x

Vì αi là số con j mà j chạy từ 1 → x với bước tăng là 1

Do đó:

αi là số phần tử của tập {1, 2, 3, , x} = x = 2n − i

Với αi ≥ 1 ⇔ i ≤ 2n − 1

Ta có bảng xét dấu:

i

x = 2n − i

y = i − n

Gọi βi là số lần câu lệnh if j ≥ n thoả mãn

Trang 14

βi = số phần tử của tập hợp {n, n + 1, , x} = x − n + 1

= 2n − i − n + 1 = n − i + 1 Với βi ≥ 1 ⇔ i ≤ n

Từ bảng xét dấu:

x > 0 ⇔ 1 ≤ i ≤ 2n − 1

y > 0 ⇔ n + 1 ≤ i ≤ 3n

 x > 0

y > 0 ⇔ n + 1 ≤ i ≤ 2n − 1

Kết luận

Gán(n) = 2 + 4 × 3n +

3n

X

i=1

βi+

3n

X

i=1

αi+ [2n − 1 − (n + 1) + 1]

= 1 + 13n +

n

X

i=1

(n − i + 1) +

2n−1

X

i=1

(2n − i)

= 1 + 13n + (n + 1)

n

X

i=1

1 −

n

X

i=1

i + 2n

2n−1

X

i=1

1 −

2n−1

X

i=1

i

= 1 + 13n + n(n + 1) −n(n + 1)

2 + 2n(2n − 1) −

2n(2n − 1) 2

= 5n

2+ 25n + 2 2

Sosánh(n) = 3n + 1 +

3n

X

i=1

(αi+ 1) +

3n

X

i=1

αi+ 3n + [3n − (n + 1) + 1]

= 1 + 8n +

3n

X

i=1

1 + 2

3n

X

i=1

αi

= 1 + 11n + 2

2n−1

X

i=1

(2n − i)

= 1 + 11n + 4n

2n−1

X

i=1

1 − 2

2n−1

X

i=1

i

= 1 + 11n + 4n(2n − 1) − 2 × 2n(2n − 1) = 4n2+ 9n + 1

Trang 15

9 Đếm số phép gán và so sánh

res ← 0;

while i≤ n do

k ← 1;

while j ≤ i do

k ← k + 2;

j ← j + k;

end

end

Gọi αi là số lần lặp của vòng lặp while nhỏ với điều kiện j ≤ i

Vì αi là số con j mà j chạy từ 1 → i với bước tăng là một cấp số cộng với

số hạng đầu là u1 = 3 và công bội d = 2

Do đó:

αi là số phần tử của tập {1, 4, 9, , i} = số phần tử của tập {m ∈ N∗ | m2 ≤ i} Vậy:

αi =j√

ik Kết luận

Gán(n) = 2 + 3n +

n

X

i=1

3αi = 2 + 3n + 3

n

X

i=1

j√

ik

= 2 + 3n +1

2√n−2√n2− 3√n + 6n + 5

Sosánh(n) = n + 1 +

n

X

i=1

(αi+ 1) = 2n + 1 +

n

X

i=1

αi

= 2n + 1 +

n

X

i=1

j√

ik

= 2n + 1 + 1

6√n−2√n2− 3√n + 6n + 5

Trang 16

10 Đếm số phép gán và so sánh

i ← 1;

idx ← −1;

while i ≤ n do

while j ≤ n do

if (i = j) AND (i + j = n + 1) then

idx ← i;

end

j ← j + 1;

end

end

if idx ̸= −1 then

sum ← sum − a[idx][idx];

end

Để gán idx ← i :



i = j

i + j = n + 1 ⇔ 2i = n + 1 ⇔ n lẻ Nhận xét:

TH 1: n lẻ → tồn tại duy nhất 1 trường hợp thoả mãn điều kiện để idx ← i,

khi đó:

Gán(n) = 3 + 2n + (1 + 2n2) + 1 = 2n2+ 2n + 5

Sosánh(n) = n + 1 + n(n + 1) + 2n2+ 1 = 3n2 + 2n + 2

TH 2: n chẵn → không tồn tại trường hợp thoả mãn điều kiện ⇒ idx ← −1,

khi đó:

Gán(n) = 3 + 2n + 2n2

Sosánh(n) = n + 1 + n(n + 1) + 2n2+ 1 = 3n2 + 2n + 2

Kết luận

Gán(n) = 2n2 + 2n + 5, n lẻ

2n2 + 2n + 3, n chẵn Sosánh(n) = 3n2+ 2n + 2

Ngày đăng: 28/06/2023, 07:42

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w