Trang chủ Lớp 11 SGK Tin học 11 - Kết nối tri thức Xác định độ phức tạp thời gian tính toán cho chương trình...

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 = 1 while i = n...

Vận dụng kiến thức trong bài và kiến thức thực tế của bản thân để trả lời câu hỏi Hướng dẫn trả lời Câu hỏi 2 trang 84 Tin học 11 - Kết nối tri thức, Luyện tập 2 - trang 111 Bài 24. Đánh giá độ phức tạp thời gian thuật toán SGK Tin học 11 - Kết nối tri thức.

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 = 1

while i <n;

  i = i*2

  sum = sum + 1

print (sum)

Method - Phương pháp giải/Hướng dẫn/Gợi ý

Advertisements (Quảng cáo)

Vận dụng kiến thức trong bài và kiến thức thực tế của bản thân để trả lời câu hỏi.

Answer - Lời giải/Đáp án

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)