[SGK Tin học Lớp 11 Kết nối tri thức] Bài 24. Đánh giá độ phức tạp thời gian thuật toán trang 111 SGK Tin học 11 Định hướng khoa học máy tính Kết nối tri thức

Hướng dẫn học bài: Bài 24. Đánh giá độ phức tạp thời gian thuật toán trang 111 SGK Tin học 11 Định hướng khoa học máy tính Kết nối tri thức - Môn Tin học Lớp 11 Lớp 11. Đây là sách giáo khoa nằm trong bộ sách 'SGK Tin học Lớp 11 Kết nối tri thức Lớp 11' được biên soạn theo chương trình đổi mới của Bộ giáo dục. Hi vọng, với cách hướng dẫn cụ thể và giải chi tiết các bé sẽ nắm bài học tốt hơn.

khởi động

quan sát và ước lượng thời gian thực hiện các đoạn chương trình 1 và 2 trong hình 24.2. chương trình nào chạy nhanh hơn? vì sao?

quan sát và ước lượng thời gian thực hiện các đoạn chương trình 1 và 2 trong hình 24.2


phương pháp giải:

 dựa vào kiến thức trong bài kết hợp kiến thức thực tế của bản thân để trả lời câu hỏi.


lời giải chi tiết:

chương trình 1 chạy nhanh hơn, vì chương trình 1 có 1 vòng lặp, chương trình 2 có 2 vòng lặp.


? mục i hđ1

quan sát và thực hiện đánh giá thời gian chạy của các chương trình 1 và 2 trong hình 24.2. từ đó biết và hiểu được cách đánh giá thời gian thực hiện chương trình.


phương pháp giải:

vận dụng kiến thức mục 1 trang 111, 112 sgk để trả lời câu hỏi.


lời giải chi tiết:

chương trình 1: thời gian thực hiện chương trình là t1=t1(n)=2+n+1=n+3 (đơn vị thời gian)

chương trình 2: thời gian thực hiện chương trình là t2=t1(n)=2+n2+1=n2+3 (đơn vị thời gian)


? mục i ch1

các lệnh và đoạn chương trình sau cần chạy trong bao nhiêu đơn vị thời gian?

các lệnh và đoạn chương tình sau cần chạy trong bao nhiêu đơn vị thời gian?


phương pháp giải:

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


lời giải chi tiết:

a) t1=1+n//3=1+1000000//3 đơn vị thời gian

b) t2=1+1+(n//3)=2+1000000//3 đơn vị thời gian


? mục i ch2

khẳng định "trong mọi chương trình chỉ có đúng một phép toán tích cực" là đúng hay sai?


phương pháp giải:

vận dụng kiến thức mục 1 trang 111, 112 sgk và kiến thức thực tế của bản thân để trả lời câu hỏi.


lời giải chi tiết:

sai. trong một chương trình máy tính, có thể có nhiều phép toán tích cực (positive operations), cũng như các phép toán khác nhau, chẳng hạn phép toán cộng, trừ, nhân, chia, so sánh, gán giá trị, và các phép toán logic, v.v... các phép toán tích cực là các phép toán thực hiện các tính chất tích cực của chương trình, như tính toán dữ liệu, xử lý logic, và đưa ra kết quả mong đợi.


? mục ii hđ2

cùng trao đổi và tìm hiểu cách phân loại thuật toán dựa trên độ phức tạp thời gian thuật toán.


phương pháp giải:

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


lời giải chi tiết:

thuật toán là một chuỗi các bước được thiết kế để giải quyết một vấn đề cụ thể. một trong những yếu tố quan trọng để đánh giá hiệu suất của một thuật toán là độ phức tạp thời gian, tức là thời gian mà thuật toán mất để thực thi dựa trên kích thước đầu vào của vấn đề. phân loại thuật toán dựa trên độ phức tạp thời gian là một phương pháp được sử dụng phổ biến để đánh giá và so sánh hiệu suất của các thuật toán khác nhau. dưới đây là một số phân loại chính dựa trên độ phức tạp thời gian của thuật toán:

-o(1) (độ phức tạp thời gian hằng số): đây là loại thuật toán có thời gian thực thi không thay đổi theo kích thước đầu vào. thời gian thực thi của thuật toán này là cố định, vì vậy độ phức tạp thời gian là hằng số. ví dụ: truy cập vào phần tử trong mảng có kích thước cố định.

-o(log n) (độ phức tạp thời gian logarithmic): đây là loại thuật toán có thời gian thực thi tăng theo logarit của kích thước đầu vào. thuật toán này thường được sử dụng trong các bài toán tìm kiếm nhị phân, các thuật toán chia để trị, hoặc các thuật toán sắp xếp hiệu quả như quicksort hoặc mergesort.

-o(n) (độ phức tạp thời gian tuyến tính): đây là loại thuật toán có thời gian thực thi tăng tỷ lệ trực tiếp với kích thước đầu vào. ví dụ: duyệt qua từng phần tử trong mảng một lần.

-o(n^2) (độ phức tạp thời gian bậc hai): đây là loại thuật toán có thời gian thực thi tăng theo bình phương của kích thước đầu vào. ví dụ: thuật toán sắp xếp bubble sort, các thuật toán tìm kiếm không hiệu quả như linear search trong một mảng lồng nhau.

-o(n^k) (độ phức tạp thời gian bậc k): đây là loại thuật toán có thời gian thực thi tăng theo lũy thừa của kích thước đầu


? mục ii ch

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.


phương pháp giải:

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.


lời giải chi tiết:

a) t(n) = 2n(n - 2) + 4 = 2n- 4n + 4 = o(n2)

b) t(n) = n3 + 5n – 3 = o(n3)


? mục iii hđ3

đọc, quan sát, thảo luận để biết một số quy tắc đơn giản tính độ phức tạp thời gian thuật toán.


phương pháp giải:

vận dụng kiến thức mục 3 trang 114 sgk để trả lời câu hỏi.


lời giải chi tiết:

qt1. quy tắc cộng: o(f(n)+g(n))=o(max(f(n),g(n)))

qt2. quy tắc nhân:

- với hằng số: o(c.f(n))=o(f(n))

- với hàm số: o(f(n).g(n))=o(f(n)).o(g(n))


? mục iii ch

á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.


phương pháp giải:

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


lời giải chi tiết:

a)t(n) = o(n3)

a)t(n) = o(n4)


luyện tập 1

xác định độ phức tạp thời gian cho chương trình sau:

n = 1000

s = 0

for i in range (n);

   s = s + i*(i+1)

print (s)


phương pháp giải:

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


lời giải chi tiết:

chương trình trên tính tổng các giá trị i*(i+1) trong khoảng từ 0 đến n-1 và lưu kết quả vào biến s. để 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 for và các phép toán trong vòng lặp.

vòng for: vòng lặp này chạy từ 0 đến n-1, với n là 1.000. vậy số lần lặp là n, hay 1.000 lần.

các phép toán trong vòng lặp:

phép gán s = s + i*(i+1): đây là phép gán giá trị vào biến s, có độ phức tạp là o(1).

phép toán i*(i+1): đây là phép nhân và cộng, 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(n), hay o(1.000)


luyện tập 2

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)


phương pháp giải:

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.


lời giải chi tiết:

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)


vận dụng 1

xác định độ phức tạp thời gian của thuật toán sắp xếp chọn đã được học trong bài 21.


phương pháp giải:

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


lời giải chi tiết:

số lần so sánh giữa các phần tử: trong thuật toán sắp xếp chọn, số lần so sánh giữa các phần tử là cố định, không phụ thuộc vào dữ liệu đầu vào. cụ thể, số lần so sánh trong thuật toán sắp xếp chọn là n(n-1)/2, với n là số  tử trong mảng hoặc danh sách.

số lần hoán đổi giữa các phần tử: trong thuật toán sắp xếp chọn, số lần hoán đổi giữa các phần tử có thể đạt đến tối đa n-1 lần, với n là số phần tử trong mảng hoặc danh sách.

vậy độ phức tạp thời gian của thuật toán sắp xếp chọn là o(n^2), hay n(n-1)/2 lần so sánh và tối đa n-1 lần hoán đổi giữa các phần tử.


vận dụng 2

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.


phương pháp giải:

dựa vào kiến thức trong bài kết hợp kiến thức thực tế của bản thân để trả lời câu hỏi.


lời giải chi tiết:

*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).

Giải bài tập những môn khác

Môn Ngữ văn Lớp 11

  • Bài tập trắc nghiệm Văn Lớp 11 Cánh diều
  • Bài tập trắc nghiệm Văn Lớp 11 Cánh diều
  • Bài tập trắc nghiệm Văn Lớp 11 Chân trời sáng tạo
  • Bài tập trắc nghiệm Văn Lớp 11 Kết nối tri thức
  • Bài tập trắc nghiệm Văn Lớp 11 Chân trời sáng tạo
  • Bài tập trắc nghiệm Văn Lớp 11 Kết nối tri thức
  • Chuyên đề học tập Văn Lớp 11 Cánh diều
  • Chuyên đề học tập Văn Lớp 11 Chân trời sáng tạo
  • Chuyên đề học tập Văn Lớp 11 Kết nối tri thức
  • Đề thi, đề kiểm tra Văn Lớp 11 Kết nối tri thức
  • Đề thi, đề kiểm tra Văn Lớp 11 Chân trời sáng tạo
  • Đề thi, đề kiểm tra Văn Lớp 11 Cánh diều
  • Lý thuyết ngữ văn lớp 11
  • SBT Văn Lớp 11 Cánh diều
  • SBT Văn Lớp 11 Kết nối tri thức
  • SBT Văn Lớp 11 Chân trời sáng tạo
  • Soạn văn Lớp 11 Cánh Diều - chi tiết
  • Soạn văn Lớp 11 Cánh Diều - siêu ngắn
  • Soạn văn Lớp 11 Chân trời sáng tạo - chi tiết
  • Soạn văn Lớp 11 Kết nối tri thức siêu ngắn
  • Soạn văn Lớp 11 Cánh diều
  • Soạn văn Lớp 11 Cánh diều siêu ngắn
  • Soạn văn Lớp 11 Chân trời sáng tạo - siêu ngắn
  • Soạn văn Lớp 11 Chân trời sáng tạo siêu ngắn
  • Soạn văn Lớp 11 Kết nối tri thức - chi tiết
  • Soạn văn Lớp 11 Kết nối tri thức - siêu ngắn
  • Soạn văn Lớp 11 Chân trời sáng tạo
  • Soạn văn Lớp 11 Kết nối tri thức
  • Tác giả tác phẩm lớp 11
  • Tóm tắt, bố cục Văn Lớp 11 Kết nối tri thức
  • Tóm tắt, bố cục Văn Lớp 11 Chân trời sáng tạo
  • Tóm tắt, bố cục Văn Lớp 11 Cánh diều
  • Văn mẫu Lớp 11 Cánh diều
  • Văn mẫu Lớp 11 Kết nối tri thức
  • Văn mẫu Lớp 11 Chân trời sáng tạo
  • Môn Vật lí Lớp 11

    Môn Tiếng Anh Lớp 11

  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 iLearn Smart World
  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 iLearn Smart World
  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 Friends Global
  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 Global Success
  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 Friends Global
  • Bài tập trắc nghiệm Tiếng Anh Lớp 11 Global Success
  • Đề thi, đề kiểm tra Tiếng Anh Lớp 11 iLearn Smart World
  • Đề thi, đề kiểm tra Tiếng Anh Lớp 11 friends Global
  • Đề thi, đề kiểm tra Tiếng Anh Lớp 11 Global Success
  • Đề thi, đề kiểm tra Tiếng Anh Lớp 11 Bright
  • Đề thi, đề kiểm tra Tiếng Anh Lớp 11 English Discovery
  • Lý Thuyết Tiếng Anh Lớp 11
  • SBT Tiếng Anh Lớp 11 Friends Global - Chân trời sáng tạo
  • SBT Tiếng anh Lớp 11 Bright
  • SBT Tiếng anh Lớp 11 Friends Global
  • SBT Tiếng Anh Lớp 11 iLearn Smart World
  • SBT Tiếng anh Lớp 11 iLearn Smart World
  • SBT Tiếng Anh Lớp 11 Bright
  • SBT Tiếng anh Lớp 11 English Discovery
  • SBT Tiếng Anh Lớp 11 English Discovery - Cánh buồm
  • SBT Tiếng anh Lớp 11 Global Success
  • SBT Tiếng Anh 11 Lớp 11 Global Success - Kết nối tri thức
  • SGK Tiếng Anh Lớp 11 Global Success
  • SGK Tiếng Anh 11 Lớp 11 Friends Global
  • SGK Tiếng Anh 11 Lớp 11 Bright
  • SGK Tiếng Anh 11 Lớp 11 English Discovery
  • SGK Tiếng Anh 11 Lớp 11 iLearn Smart World
  • Tiếng Anh Lớp 11 Global Success
  • Tiếng Anh Lớp 11 iLearn Smart Wolrd
  • Tiếng Anh Lớp 11 Friends Global
  • Tiếng Anh Lớp 11 English Discovery
  • Tiếng Anh Lớp 11 Bright
  • Môn Hóa học Lớp 11

    Môn Sinh học Lớp 11

    Tài liệu tin học

    Tài liệu Lớp 1

    Tài liệu Lớp 2

    Tài liệu Lớp 3

    Tài liệu Lớp 4

    Tài liệu Lớp 5

    Trò chơi Powerpoint

    Sáng kiến kinh nghiệm