Upload
nhat-tran-minh
View
213
Download
1
Embed Size (px)
DESCRIPTION
Một số bài tập về đếm số phép gán và so sánh của thuật toán
Citation preview
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH
MÔN HỌC
PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN
BÀI TẬP THỰC HÀNH SỐ 1.b
ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA CÁC CHƯƠNG TRÌNH NHỜ KỸ THUẬT SƠ CẤP
Lớp: CS112.G12
GVLT: Huỳnh Thị Thanh Thương
GVTH: Châu Kim Hùng
SVTH:
- Trần Minh Nhật – 13520583
- Phạm Nhật Nam – 13520520
- Nguyễn Hồng Nhân – 13520572
TP.Hồ Chí Minh, tháng 09 năm 2015
Bài 1.
a)
i = 1; 1 g
ret = 0; 1 g
s = 0; 1 g
while ( i ≤ n) n+1ss
{
j = 1 ; n g
s = s+1/i; // {số thực} n g
while (j ≤ s )
{
ret = ret + i*j;
j = j + 1;
}
i = i + 1; n g
}
Đặt α i là số lần lặp của vòng while trong và xét riêng với vòng while ngoài
while (j ≤ s ) α i+1 ss
{
ret = ret + i*j; α i g
j = j + 1; α i g
}
Gán (n) = 3 + 3n + ∑i=1
n
2α i
So sánh (n)= n+1 + ∑i=1
n
αi+1
*Tính α i:
Số lần lặp của vòng while trong = α i = số j ,với j từ 1->i, tương ứng với mỗi i ở vòng
while ngoài thì số lần lặp ở while trong tương ứng với s, với s là: ⌊∑j=1
i1j⌋
Tương ứng với mỗi i ở vòng while ngoài thì số lần lặp ở vòng while trong sẽ là s, với s là:
⌊∑j=1
i1j⌋
Như vậy α i=⌊∑j=1
i1j⌋
Suy ra:
Gán (n) = 3+3n+∑i=1
n
2 ⌊∑j=1
i1j⌋
So sánh (n) = n+1+∑i=1
n
(⌊∑j=1
i1j⌋+1)
b)
i=0;
A[n]=x;
While A[i] ≠ x do;
i=i+1;
endw;
Đoạn chương trình sẽ dừng khi A[i] = x
Đoạn chương trình có thể dừng sớm hơn hoặc tối đa là khi i = n
Bài 2)
a)
float Delta (float x, long n)
{
long i= 1; float z = 0; 2 g
while ( i ≤ n) n+1 ss
{
long j = 1, k=1 ; float t = 1; 3n g
while (j ≤ i )
{
t = t*x;
k=k+2;
j = j+k;
}
z = z+i*t; n g
i=i+1; n g
}
return z;
}
Đặt α i là số lần lặp của vòng while trong và xét riêng với vòng while ngoài
while (j ≤ i ) α i+1 ss
{
t = t*x; α i g
k=k+2; α i g
j = j+k; α i g
}
Gán (n) = 2+5n+∑i=1
n
3α i
So sánh (n) = n+1+∑i=1
n
(α ¿¿ i+1)¿
*Tính α i:
Với: k = 1; j = 1;
k = 3; j = 4;
k = 5; j = 9;
k = 7; j = 16;
…
Như vậy: Số lần lặp của vòng while trong là α i = số lần j chạy ,với j từ 1 -> i với j là số
chính phương
Số lần lặp của j bằng với số phần tử của tập hợp {r | r ≥ 1, r2≤i} = ⌊√i ⌋
α i = ⌊√i ⌋
Gán (n) = 2+5n+∑i=1
n
3 ⌊√ i ⌋
So sánh (n) = n+1+∑i=1
n
(⌊√i ⌋+1)
b)
float Alpha (float x, long n)
{
long i= 1; float z = 0; 2 g
while ( i ≤ n) n+1 ss
{
long j = 1; float t = 1; 2n g
while (j ≤ i )
{
t = t*x;
j = 2*j;
}
z = z+i*t; i=i+1; 2n g
}
return z;
}
Đặt α i là số lần lặp của vòng while trong và xét riêng với vòng while ngoài
while (j ≤ i ) α i+1
{
t = t*x; α i
j = 2*j; α i
}
Gán (n) = 2+2n+∑i=1
n
2α i
So sánh (n) = n+1+∑i=1
n
(α ¿¿ i+1)¿
*Tính α i:
Số lần lặp của vòng while trong làα i=¿ số lần j chạy, với j từ 1 -> i, j thuộc tập hợp
{ 2t | t ≥0, 2t≤ i}
Vậy số lần lặp của vòng while trong: α i=⌊ log2 i ⌋
Gán (n) = 2+2n+2∑i=1
n
⌊ log2i ⌋
So sánh (n) = n+1+∑i=1
n
(⌊ log2 i ⌋+1)
c)
float Epsi (float x, long n)
{
long i= 1; {1g}
float z = 0;{1g}
while ( i ≤ n){ n+1 ss}
{
long j = 1; {ng};
float t = 1; {ng};
while (j ≤ i ) {α i +1 ss}
{
t = t*x;{ α i g}
j = j+1; { α i g}
}
z = z+i*t; {ng}
i=2*i; }{ ng}
return z;
}
Tinh α i ?
Đặt α i là số lần lặp của vòng while trong => α i=¿ sô lần lặp của j, với j
chạy từ 1-> i.
Gán(n)= 2 + 4n + ∑i=1
n
2 (i)
So sánh (n) = n+1+∑i=1
n
(i+1)