1.Dễ
Ghi nhớ (memoisation) là gì?
- ATự động chuyển đệ quy thành vòng lặp tương đương để không cần ngăn xếp lời gọi
- BGiải phóng bộ nhớ sau khi một hàm trả về
- CViết chú thích bên cạnh từng dòng mã
- DLưu kết quả của các lời gọi hàm để các lời gọi lặp lại được trả lời từ bộ nhớ
2.Dễ
Lớp độ phức tạp nào tăng nhanh nhất khi n lớn?
- AO(n²)
- BO(n log n)
- CO(n³)
- DO(2ⁿ)
3.Dễ
Một thuật toán có hai vòng lặp lồng nhau, mỗi vòng chạy n lần, thường có độ phức tạp nào?
- AO(log n)
- BO(2n)
- CO(n)
- DO(n²)
4.Trung bình
Độ phức tạp thời gian của thuật toán quy hoạch động chuẩn cho dãy con chung dài nhất của các chuỗi có độ dài m và n là gì?
- AO(m + n)
- BO(mn)
- CO(mn log n)
- DO(2m+n)
5.Trung bình
Công thức truy hồi T(n) = 2T(n/2) + O(1) có nghiệm là gì?
- AO(n log n)
- BO(n)
- CO(log n)
- DO(n²)
6.Trung bình
Thuật toán nào tìm đường đi ngắn nhất từ một nguồn trong đồ thị có trọng số cạnh không âm?
- AThuật toán Kruskal
- BThuật toán Dijkstra
- CBắt buộc phải dùng Bellman–Ford trong mọi trường hợp
- DTìm kiếm theo chiều sâu
7.Khó
Chi phí thời gian và không gian của việc tính số Fibonacci thứ n bằng một vòng lặp chỉ giữ hai giá trị cuối là bao nhiêu?
- AThời gian O(n) và không gian O(1)
- BThời gian O(2ⁿ) và không gian O(1)
- CThời gian O(log n) và không gian O(n)
- DThời gian O(n) và không gian O(n)
8.Khó
Vì sao tra cứu trung bình trong bảng băm là O(1) nhưng trường hợp xấu nhất là O(n)?
- ANhiều khóa có thể va chạm vào cùng một ngăn
- BHàm băm chậm
- CCác khóa phải được sắp xếp trước
- DMảng có truy cập O(n)
Đáp án
- 1. D · Lưu kết quả của các lời gọi hàm để các lời gọi lặp lại được trả lời từ bộ nhớ
- 2. D · O(2ⁿ)
- 3. D · O(n²)
- 4. B · O(mn)
- 5. B · O(n)
- 6. B · Thuật toán Dijkstra
- 7. A · Thời gian O(n) và không gian O(1)
- 8. A · Nhiều khóa có thể va chạm vào cùng một ngăn
Lời giải đầy đủ từng bước: hãy luyện chủ đề này trên examproblems.com.