Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Nguyễn Phú Quí – 2251120240

Câu 1 : Phân tích và đánh giá độ phức tạp thuật toán đoạn chương trình
Đầu vào:
n: Biến số nguyên dương thể hiện kích thước của tập dữ liệu.
Thuật toán:
Đoạn chương trình sử dụng hai vòng lặp for lồng nhau để thực hiện các
phép tính. Vòng lặp ngoài chạy n lần, với biến i tăng từ 0 đến n-1. Vòng
lặp trong chạy n-i lần, với biến j giảm từ n đến i. Trong mỗi lần lặp của
vòng lặp trong, giá trị của a được tăng lên bằng tổng của i, j và a hiện tại.
Đánh giá độ phức tạp:
Độ phức tạp thời gian:
Vòng lặp ngoài chạy n lần.
Vòng lặp trong chạy n-i lần, với trung bình n/2 lần lặp.
Tổng số phép toán thực hiện là: n + n/2 * (n-1) = O(n^2).
Độ phức tạp không gian:
Biến a, i và j sử dụng một lượng không gian bộ nhớ cố định, không phụ
thuộc vào kích thước đầu vào.
Do đó, độ phức tạp không gian là O(1).
Kết luận:
Đoạn chương trình có độ phức tạp thời gian là O(n^2) và độ phức tạp
không gian là O(1). Điều này cho thấy hiệu suất của thuật toán sẽ tăng
theo cấp số nhân khi kích thước đầu vào tăng lên.
Đánh giá:
Đoạn chương trình sử dụng thuật toán đơn giản và dễ hiểu. Tuy nhiên, độ
phức tạp thời gian O(n^2) cho thấy hiệu suất của thuật toán có thể trở nên
kém hiệu quả khi xử lý tập dữ liệu lớn. Do đó, cần cân nhắc lựa chọn
thuật toán phù hợp hơn cho các bài toán có kích thước dữ liệu lớn.
Nguyễn Phú Quí – 2251120240

Câu 2:
a) Mô tả cách làm
Thuật toán được sử dụng trong chương trình là giải thuật hoán đổi và đệ quy.
Mục tiêu là tìm ra số lớn nhất có thể bằng cách hoán đổi các chữ số trong số
nguyên n không quá k lần.
Chi tiết về cách làm:
Chuyển đổi số nguyên thành chuỗi: Chuyển số n thành chuỗi để thao tác với các
chữ số dễ dàng hơn.
Sử dụng hàm đệ quy max để thực hiện các hoán đổi:
Nếu k bằng 0, kết thúc quá trình đệ quy.
Duyệt qua tất cả các vị trí từ 0 đến n - 1.
Tại mỗi vị trí, so sánh với các vị trí còn lại để tìm vị trí có giá trị lớn hơn.
Nếu tìm thấy, thực hiện hoán đổi, và kiểm tra nếu chuỗi sau hoán đổi lớn hơn
giá trị lớn nhất (maxn) đã biết.
Tiếp tục đệ quy với k - 1.
Sau mỗi hoán đổi, cho chuỗi quay trở lại vị trí ban đầu để thử các khả năng
khác.
Kết thúc đệ quy: Sau khi duyệt qua tất cả các khả năng hoán đổi, giá trị lớn nhất
tìm được sẽ là kết quả.
b) Phân tích, đánh giá độ phức tạp của thuật toán
Độ phức tạp thời gian:
Vòng lặp ngoài duyệt qua tất cả các chữ số của chuỗi str, chạy từ 0 đến n-2. Do
đó, vòng lặp ngoài có độ phức tạp là O(n).
Vòng lặp trong duyệt từ i+1 đến n-1, nghĩa là số lần lặp trong sẽ phụ thuộc vào
vị trí của i. Trung bình, số lần lặp của vòng lặp trong sẽ là khoảng n/2.
Khi kết hợp vòng lặp ngoài và vòng lặp trong, số phép toán cần thực hiện sẽ là
n + n/2 * (n-1) = O(n^2).
Ngoài ra, mỗi lần lặp, thuật toán có một số phép toán bổ sung như so sánh các
giá trị, thực hiện hoán đổi, và gọi đệ quy. Vì hàm max có thể gọi đệ quy tối đa k
lần, độ phức tạp thời gian cuối cùng của thuật toán là O(n^2 * k).
Nguyễn Phú Quí – 2251120240

Độ phức tạp không gian:


Hàm max sử dụng một số biến cục bộ như i, j, và n, nhưng lượng không gian
này cố định bất kể kích thước đầu vào, do đó có độ phức tạp không gian là O(1).
Tuy nhiên, do hàm max sử dụng đệ quy, độ phức tạp không gian thực tế sẽ phụ
thuộc vào độ sâu của ngăn xếp đệ quy. Vì độ sâu này tối đa là k, nên độ phức
tạp không gian sẽ là O(k).

Câu 3:
a) Mô tả cách làm
thuật toán được sử dụng trong chương trình dựa trên chuỗi Fibonacci (Fibonacci
string), một biến thể của dãy số Fibonacci mà mỗi phần tử là một chuỗi được
kết hợp từ hai phần tử trước đó.
Cách hoạt động:
- Chuỗi Fibonacci:
Fibo(n) là chuỗi được tạo bằng cách nối chuỗi fibo(n-2) và chuỗi fibo(n-1) lại
với nhau
Cụ thể:
fibo(1) = "A".
fibo(2) = "B".
fibo(n) = fibo(n - 2) + fibo(n - 1).
Ví dụ, chuỗi Fibonacci thứ 3 là "AB", thứ 4 là "BAB", và thứ 5 là "ABBAB".
- Tìm ký tự ở vị trí m của chuỗi Fibonacci thứ n:
Tạo ra chuỗi Fibonacci thứ n bằng cách sử dụng hàm đệ quy fibo(n).
Kiểm tra xem m có nằm trong giới hạn của độ dài chuỗi. Nếu có, trả về ký tự ở
vị trí m - 1.
Nếu m vượt quá độ dài của chuỗi Fibonacci thứ n, trả về ký tự rỗng ' '.
b) Phân tích, đánh giá độ phức tạp của thuật toán|=
Độ phức tạp thời gian: O(2^n)
Mỗi lần gọi hàm fibo, chương trình sẽ gọi đệ quy hai lần cho fibo(n - 2) và
fibo(n - 1), dẫn đến số lượng lần gọi tăng theo cấp số nhân với cơ số là 2.
Nguyễn Phú Quí – 2251120240

Điều này gây ra độ phức tạp thời gian là O(2^n), làm cho chương trình trở nên
không khả thi với các giá trị n lớn.
Độ phức tạp không gian: O(n)
Do sử dụng đệ quy, chương trình cần một lượng không gian trên stack tương
ứng với độ sâu của đệ quy, tức là O(n).

You might also like