Giải SBT Tin học 11 định hướng KHMT Cánh diều bài 5 Đánh giá thuật toán

Giải chi tiết sách bài tập SBT Tin học 11 định hướng khoa học máy tính Cánh diều bài 5 Đánh giá thuật toán. ConKec sẽ hướng dẫn giải tất cả câu hỏi và bài tập với cách giải nhanh và dễ hiểu nhất. Hi vọng, thông qua đó học sinh được củng cố kiến thức và nắm bài học tốt hơn.

Fcs17. Những phát biểu nào dưới đây là SAI?

1) O(m + n + p) = O(max(m,n,p)) với m, n, p được cho ở dữ liệu đầu vào.

2) $O(2^{n}+ n^{2}=O(n^{2})$ với n được cho ở dữ liệu đầu vào.

3) $O(n+n^{2}+nn)=O(nn)$  với n được cho ở dữ liệu đầu vào.

4) O(2022) = O(1)

Trả lời:

2) $O(2^{n}+ n^{2})=O(n^{2})$ với n được cho ở dữ liệu đầu vào.

3) $O(n+n^{2}+nn)=O(nn)$  với n được cho ở dữ liệu đầu vào.

Fcs18. Xét bài toán: Tính tổng bình phương các số tự nhiên từ 1 đến n, với n là một số tự nhiên lớn hơn 0. Nói cách khác, tính giá trị $S= 1^{2}+2^{2}+…+(n-1)^{2}+n^{2}$.

Em hãy xây dựng thuật toán để giải quyết bài toán trên với độ phức tạp:

1) O(n)

2) O(1)

Trả lời:

1) Dùng vòng lặp từ 1 đến n để cộng từng giá trị bình phương vào biến tổng S

total = 0

     for i in {i, 1≤i≤n}

        total += i^2

    return total

2) Sử dụng công thức $S=\frac{n(n+1)(2n+1)}{6}$

return (n * (n + 1) * (2 * n + 1)) / 6

Fcs19. Xét bài toán: Cho danh sách các số nguyên $A=(a_{1},a_{2},…,a_{n})$ khác nhau từng đôi một. Xác định phần tử có giá trị lớn thứ hai trong danh sách A.

Em hãy xây dựng thuật toán để giải quyết bài toán trên với độ phức tạp:

1) O(n2 )

2) O(n)

Trả lời:

1) Sử dụng hàm Sorted() để sắp xếp lại danh sách theo thứ tự giảm dần rồi in ra phần tử ở vị trí thứ hai

arr.sort(reverse = True)

return arr[1]

2) Khởi tạo hai biến max1 = 0 và max2 = 0 tượng trưng cho giá trị lớn thứ nhất và lớn thứ hai trong danh sách A, ta tiến hành duyệt và xét lần lượt từng phần tử v của A:

- Nếu max1 < v, ta cập nhật max2 = max1 và max1 = v

- Ngược lại, ta có thể suy ra max1 > v (max1 không thể bằng v vì các phần tử trong danh sách A khác nhau từng đôi một). Ta so sánh max2 và v. Nếu max2 < v thì ta cập nhật max2 = v

max1 = max2 = 0

for v in arr:

         if v > max1:

             max2 = max1

             max1 = v

         elif v > max2:

             max2 = v

         return max2

Fcs20, Xác định độ phức tạp của đoạn chương trình sau, với giá trị N > 0  được cho ở dữ liệu đầu vào.

a, i = N, N

while (i != 0):

      a -= i

       i //= 2

Trả lời:

Vì giá trị của i bị giảm đi một nửa sau mỗi bước và vòng lặp sẽ dừng khi i = 0, nên độ phức tạp của chương trình là O(log,N).

Fcs20, Xác định độ phức tạp của đoạn chương trình sau, với giá trị n > 0  được cho ở dữ liệu đầu vào.

j = 0

for i in range(n):

     while j < n:

      j += 1

Trả lời:

Sau khi kết thúc lượt chạy i = 0, giá trị j sẽ tăng lên bằng n. Ở các lượt chạy sau đó của i thì vòng lặp while bên trong sẽ không được thực thi, nên độ phức tạp của cả chương trình chỉ là O(n).

Xem thêm các bài Giải SBT tin học 11 định hướng Khoa học máy tính cánh diều, hay khác:

Xem thêm các bài Giải SBT tin học 11 định hướng Khoa học máy tính cánh diều được biên soạn cho Học kì 1 & Học kì 2 theo mẫu chuẩn của Bộ Giáo dục theo sát chương trình Lớp 11 giúp bạn học tốt hơn.

Xem Thêm

Lớp 11 | Để học tốt Lớp 11 | Giải bài tập Lớp 11

Giải bài tập SGK, SBT, VBT và Trắc nghiệm các môn học Lớp 11, dưới đây là mục lục các bài giải bài tập sách giáo khoa và Đề thi chi tiết với câu hỏi bài tập, đề kiểm tra 15 phút, 45 phút (1 tiết), đề thi học kì 1 và 2 (đề kiểm tra học kì 1 và 2) các môn trong chương trình Lớp 11 giúp bạn học tốt hơn.