Tính độ phức tạp của các hàm thời gian sau:
a) T(n) = 2n(n - 2) + 4.
b) T(n) = n3 + 5n - 3.
Áp dụng các quy tác trên để tính độ phức tạp của các hàm thời gian sau:
a) T(n) = n3 + nlogn + 2n + 1.
b) T(n) = 3n4 + 2n2logn + 10.
Tính các giới hạn sau:
a) \(\lim \frac{{5n + 1}}{{2n}};\)
b) \(\lim \frac{{6{n^2} + 8n + 1}}{{5{n^2} + 3}};\)
c) \(\lim \frac{{\sqrt {{n^2} + 5n + 3} }}{{6n + 2}};\)
d) \(\lim \left( {2 - \frac{1}{{{3^n}}}} \right);\)
e) \(\lim \frac{{{3^n} + {2^n}}}{{{{4.3}^n}}};\)
g) \(\lim \frac{{2 + \frac{1}{n}}}{{{3^n}}}.\)
a) \(\lim \frac{{5n + 1}}{{2n}} = \lim \frac{{5 + \frac{1}{n}}}{2} = \frac{{5 + 0}}{2} = \frac{5}{2}\)
b) \(\lim \frac{{6{n^2} + 8n + 1}}{{5{n^2} + 3}} = \lim \frac{{6 + \frac{8}{n} + \frac{1}{{{n^2}}}}}{{5 + \frac{3}{{{n^2}}}}} = \frac{{6 + 0 + 0}}{{5 + 0}} = \frac{6}{5}\)
c) \(\lim \frac{{\sqrt {{n^2} + 5n + 3} }}{{6n + 2}} = \lim \frac{{\sqrt {1 + \frac{5}{n} + \frac{3}{{{n^2}}}} }}{{6 + \frac{2}{n}}} = \frac{{\sqrt {1 + 0 + 0} }}{{6 + 0}} = \frac{1}{6}\)
d) \(\lim \left( {2 - \frac{1}{{{3^n}}}} \right) = \lim 2 - \lim {\left( {\frac{1}{3}} \right)^n} = 2 - 0 = 0\)
e) \(\lim \frac{{{3^n} + {2^n}}}{{{{4.3}^n}}} = \lim \frac{{1 + {{\left( {\frac{2}{3}} \right)}^n}}}{4} = \frac{{1 + 0}}{4} = \frac{1}{4}\)
g) \(\lim \frac{{2 + \frac{1}{n}}}{{{3^n}}}\)
Ta có \(\lim \left( {2 + \frac{1}{n}} \right) = \lim 2 + \lim \frac{1}{n} = 2 + 0 = 2 > 0;\lim {3^n} = + \infty \Rightarrow \lim \frac{{2 + \frac{1}{n}}}{{{3^n}}} = 0\)
1. Tìm n ϵ Z, biết :
a, n2 - 2n + 3 ⋮ n + 4
b, 3n2 + n + 16 ⋮ n + 5n
c, n3 + n - 5n - 2 ⋮ n + 3
d, n + 4 ⋮ 3 - n
e, 2n + 1 ⋮ 5 - n
Giúp mình với thứ 7 mình phải nộp rồi ạ !
Viết lời giải ra giúp mình nhé !
Em hãy thiết lập chương trình và tính thời gian chạy thực tế trên máy tính của các chương trình 1 và 2 ở Hình 24.2 với các giá trị n khác nhau từ đó thấy được ý nghĩa sự khác biệt độ phức tạp thời gian của hai chương trình này.
*Chương trình 1:
from collections import Counter
import time
n = 1000
c = 0
# Ghi lại thời điểm bắt đầu
start_time = time.time()
for k in range(n):
c = c + 1
# Ghi lại thời điểm kết thúc
end_time = time.time()
# Tính thời gian hoàn thành
elapsed_time = end_time - start_time
# Sử dụng hàm Counter để đếm số lần lặp
counter = Counter(range(n))
# In số lần lặp
print("Số lần lặp: {}".format(counter))
# In thời gian thực thi
print("Thời gian thực thi của chương trình: {:.6f} giây".format(elapsed_time))
*Chương trình 2:
import time
n = 1000
c = 0
# Ghi lại thời điểm bắt đầu
start_time = time.perf_counter()
for k in range(n):
for j in range(n):
c = c + 1
# Ghi lại thời điểm kết thúc
end_time = time.perf_counter()
# Tính thời gian hoàn thành
elapsed_time = end_time - start_time
# In số lần lặp
print("Số lần lặp: {}".format(c))
# In thời gian thực thi
print("Thời gian thực thi của chương trình: {:.6f} giây".format(elapsed_time))
→Sự khác biệt độ phức tạp thời gian của 2 chương trình trên:
Độ phức tạp thời gian của chương trình 1 là O(1), còn độ phức tạp thời gian của chương trình 2 là O(n2).
Cho biết hàm sau sẽ trả về giá trị là bao nhiêu? Xác định độ phức tạp thời gian O- lớn của chương trình.
def Mystery(n):
r=0
for i in range(n-1):
for j in range(i+1,n):
for k in range(1,j):
r=r+1
return r
Tham khảo:
Hàm "Mystery(n)" sẽ trả về giá trị là r.
Độ phức tạp thời gian của chương trình này là O(n3)
Hãy cho biết hàm sau thực hiện công việc gì? Xác định độ phức tạp thời gian của thuật toán.
def func(A):
n=len(A)
for i in range(n-1):
for j in range(i+1,n):
if A[j] > A[j]:
A[j],A[j] = A[j],A[i]
Công việc của hàm là thực hiện sắp xếp.
Độ phức tạp của thuật toán là O(n2)
Tính các giới hạn sau:
a) \(\lim\limits\dfrac{\sqrt[3]{n^6-7n^3-5n+8}}{n+12}\)
b) \(\lim\limits\dfrac{1}{\sqrt{3n+2}-\sqrt{2n+1}}\)
c) \(\lim\limits\dfrac{4.3^n+7^{n+1}}{2.5^n+7^n}\)
a.
\(A=\lim\frac{\sqrt[3]{n^6-7n^3-5n+8}}{n+12}=\lim \frac{\sqrt[3]{\frac{n^6-7n^3-5n+8}{n^3}}}{\frac{n+12}{n}}=\lim \frac{\sqrt[3]{n^3-7-\frac{5}{n^2}+\frac{8}{n^3}}}{1+\frac{12}{n}}\)
Ta thấy:
\(\lim\sqrt[3]{n^3-7-\frac{5}{n^2}+\frac{8}{n^3}}=\infty \)
\(\lim (1+\frac{12}{n})=1\)
Suy ra $A=\infty$
b.
\(B=\lim\frac{1}{\sqrt{3n+2}-\sqrt{2n+1}}=\lim \frac{1}{\frac{3n+2-(2n+1)}{\sqrt{3n+2}+\sqrt{2n+1}}}=\lim \frac{\sqrt{3n+2}+\sqrt{2n+1}}{n+1}\)
\(=\lim \frac{\sqrt{\frac{3n+2}{n}}+\sqrt{\frac{2n+1}{n}}}{\frac{n+1}{\sqrt{n}}}=\lim \frac{\sqrt{3+\frac{2}{n}}+\sqrt{2+\frac{1}{n}}}{\sqrt{n}+\frac{1}{\sqrt{n}}}\)
Ta thấy:
\(\lim( \sqrt{3+\frac{2}{n}}+\sqrt{2+\frac{1}{n}})=\sqrt{3}+\sqrt{2}>0\)
\(\lim (\sqrt{n}+\frac{1}{\sqrt{n}})=\infty\)
$\Rightarrow B=\infty$
c.
\(C=\lim \frac{4.3^n+7^{n+1}}{2.5^n+7^n}=\lim \frac{4(\frac{3}{7})^n+7}{2(\frac{5}{7})^n+1}\)
Ta thấy:
\(\lim [4(\frac{3}{7})^n+7]=4.0+7=7\) với $|\frac{3}{7}|<1$
\(\lim [2(\frac{5}{7})^n+1]=2.0+1=1\) với $|\frac{5}{7}|<1$
$\Rightarrow C=\frac{7}{1}=7$
Xác định độ phức tạp thời gian tính toán cho chương trình sau:
n = 1000
sum = 0
i = 1while i <n;
i = i*2
sum = sum + 1
print (sum)
Chương trình trên tính số lần lặp cần thiết để i lớn hơn n bằng cách nhân i với 2 trong mỗi lần lặp, sau đó tăng biến sum lên 1. Để xác định độ phức tạp thời gian của chương trình này, ta cần xem xét số lần lặp của vòng while và các phép toán trong vòng lặp.
Vòng while: Vòng lặp này chạy cho đến khi i >= n, và giá trị ban đầu của i là 1. Trong mỗi lần lặp, i được nhân với 2, vậy số lần lặp là log2(n) (vì sau mỗi lần nhân i với 2, giá trị của i sẽ gấp đôi). Ví dụ, nếu n = 1000 thì số lần lặp là log2(1000) ≈ 10.
Các phép toán trong vòng lặp:
Phép gán i = i * 2: Đây là phép nhân, có độ phức tạp là O(1).
Phép gán sum = sum + 1: Đây là phép gán giá trị vào biến sum, có độ phức tạp là O(1).
Vậy tổng độ phức tạp thời gian của chương trình là O(log n), hay O(log2(1000)) ≈ O(10)
Tìm các giới hạn sau:
a) \(lim\dfrac{5n}{n-\sqrt{n^2-n-1}}\)
b) \(lim\dfrac{\sqrt{n+\sqrt{n+1}}}{n-\sqrt{n}}\)
c) \(lim\dfrac{\sqrt{2n^4-n^2+7}}{3n+5}\)
d) \(lim\dfrac{\sqrt{3n^2+2n}-n}{3n-2}\)
\(a=\lim\dfrac{5n\left(n+\sqrt{n^2-n-1}\right)}{n+1}=\lim\dfrac{5\left(n+\sqrt{n^2-n-1}\right)}{1+\dfrac{1}{n}}=\dfrac{+\infty}{1}=+\infty\)
\(b=\lim\dfrac{\sqrt{\dfrac{1}{n}+\sqrt{\dfrac{1}{n^3}+\dfrac{1}{n^4}}}}{1-\dfrac{1}{\sqrt{n}}}=\dfrac{0}{1}=0\)
\(c=\lim\dfrac{\sqrt{2n^2-1+\dfrac{7}{n^2}}}{3+\dfrac{5}{n}}=\dfrac{+\infty}{3}=+\infty\)
\(d=\lim\dfrac{\sqrt{3+\dfrac{2}{n}}-1}{3-\dfrac{2}{n}}=\dfrac{\sqrt{3}-1}{3}\)