Giáo án Tin học 11 · Chung, Khoa học máy tính và Tin học ứng dụng
Tin họcLớp 11Phần 6. KHMT · Chủ đề 6. Kĩ thuật lập trình · Chọn định hướng, không bắt buộc THUD

Giáo án Bài 25 · KHMT. Thực hành xác định độ phức tạp thời gian thuật toán

Kế hoạch bài dạy theo mẫu Công văn 5512/BGDĐT-GDTrH · 1 tiết (45 phút)

I. Mục tiêu

1. Kiến thức

  • Nêu được cách thêm bộ đếm thao tác vào thuật toán có hai vòng lồng nhau và đọc kết quả đếm theo n.
  • Giải thích được vì sao tổng 0+1+…+(n−1) bằng n(n−1)2\dfrac{n(n-1)}{2} và số lượt thực hiện thân vòng lặp có bậc O(n2)O(n^2).
  • Vận dụng được bộ đếm và công thức để xác định độ phức tạp thời gian của thuật toán mẫu, kiểm tra được ca biên n=0 và n=1.
  • Phân biệt được số thao tác đếm với thời gian chạy thực tế và nhận biết vì sao số đo với n nhỏ không đủ để kết luận bậc.

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: HS tự thực hiện thử nghiệm với các giá trị n khác nhau, ghi kết quả và tự kiểm tra đáp án trên học liệu số NeoEdu.
  • Giao tiếp và hợp tác: HS làm việc theo cặp đôi, trình bày và phản biện lập luận về công thức đếm và bậc độ phức tạp.
  • Giải quyết vấn đề và sáng tạo: HS đề xuất cách đặt bộ đếm, lập bảng thử n và tổng hợp thành công thức để giải thích bậc của thuật toán.

b) Năng lực đặc thù

  • Sử dụng và quản lí các phương tiện công nghệ thông tin và truyền thông: HS chạy chương trình Python mẫu, thay đổi giá trị n và đọc kết quả in ra màn hình.
  • Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông: HS dùng bộ đếm trong chương trình để thu thập số liệu thay cho suy đoán, từ đó xây dựng và kiểm tra công thức.
  • Ứng dụng công nghệ thông tin và truyền thông trong học và tự học: HS sử dụng bài tập tương tác trên trang NeoEdu để luyện tập và đối chiếu đáp án.

3. Phẩm chất

  • Chăm chỉ: HS hoàn thành đủ bảng thử n và các bài tập trong thời gian quy định, không bỏ qua ca biên.
  • Trung thực: HS ghi đúng kết quả chạy thực tế, không sửa số liệu để khớp với dự đoán ban đầu.
  • Trách nhiệm: HS tự kiểm tra lại bài làm của mình và của bạn trong nhóm trước khi nộp phiếu.

II. Thiết bị dạy học và học liệu

1. Giáo viên

  • Máy tính kết nối máy chiếu, cài Python 3 để chạy trực tiếp chương trình mẫu.
  • Bảng phụ hoặc phần mềm trình chiếu ghi đoạn chương trình mẫu và bảng thử n.
  • Phiếu học tập số 1 (in hoặc chiếu).
  • Học liệu số NeoEdu: trang bài học có bài giảng, ví dụ và bài tập tương tác tại neoedu.vn/learn/11/informatics/bai-25-khmt-thuc-hanh-xac-dinh-do-phuc-tap-thoi-gian-thuat-toan.

2. Học sinh

  • Máy tính có Python 3 (hoặc sử dụng trình chạy Python trên trình duyệt).
  • Vở ghi, bút, máy tính bỏ túi để tính các phép nhân và chia.
  • Phiếu học tập số 1 (nếu được phát in).

III. Tiến trình dạy học

Hoạt động 1: Mở đầu · 5 phút

Dự đoán số lần thực hiện thân vòng lặp

a) Mục tiêu

Huy động kinh nghiệm về vòng lặp lồng nhau và đặt vấn đề: làm thế nào đếm được số lần thực hiện thân vòng lặp khi số lần phụ thuộc vào i.

b) Nội dung

GV chiếu đoạn chương trình mẫu với n=6, gồm biến d=0, vòng for i trong range(n), vòng for j trong range(i) và lệnh d+=1 ở thân vòng trong. HS dự đoán giá trị d in ra và giải thích cách dự đoán trong 1 phút.
Câu hỏi GV đặt ra: Với i=0, vòng trong có chạy lần nào không? Với i=3, vòng trong chạy mấy lần? Vậy tổng số lần cộng 1 khi n=6 là bao nhiêu?

c) Sản phẩm

Dự đoán ban đầu của HS và đáp số đúng d=15, vì 0+1+2+3+4+5=15. HS nhận ra số lần chạy thân vòng trong phụ thuộc vào i nên phải cộng dồn theo từng giá trị i, không nhân đơn giản n với một số cố định.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV chiếu đoạn mã mẫu và nêu nhiệm vụ: dự đoán giá trị in ra khi n=6, ghi dự đoán vào giấy nháp trong 1 phút.

    Học sinh

    HS đọc đoạn mã, ghi dự đoán và một câu giải thích ngắn.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV gợi ý bằng câu hỏi: Khi i bằng 0 thì vòng trong chạy mấy lần? Khi i bằng 5 thì sao?

    Học sinh

    HS tính số lần vòng trong chạy với từng giá trị i từ 0 đến 5 và cộng lại. Dự kiến HS trả lời: i=0 chạy 0 lần, i=1 chạy 1 lần, ..., i=5 chạy 5 lần, tổng 15.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 HS nêu dự đoán và cách tính, sau đó chạy chương trình trên máy chiếu để kiểm tra.

    Học sinh

    HS so sánh kết quả dự đoán với kết quả in ra là 15. Dự kiến HS nói: 'Em tưởng là 36 vì 6 nhân 6, nhưng vòng trong không chạy đủ 6 lần mỗi lần.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: số lượt thực hiện thân vòng lặp lồng nhau phụ thuộc vào giới hạn của vòng trong; phải cộng số lượt theo từng giá trị i, không suy ra từ cảm tính.

    Học sinh

    HS ghi vào vở: với n=6, thân vòng trong được thực hiện 15 lần.

Hoạt động 2.1: Hình thành kiến thức mới · 12 phút

Thêm bộ đếm thao tác và thử nhiều giá trị n

a) Mục tiêu

HS biết cách thêm bộ đếm vào đúng vị trí của thuật toán, thu thập số liệu với nhiều giá trị n và nhận ra quy luật của dãy số đếm.

b) Nội dung

HS làm việc theo cặp đôi với Phiếu học tập số 1. Nhiệm vụ gồm ba bước: (1) đặt lệnh d=0 trước vòng lặp và lệnh d+=1 đúng ở thân vòng trong; (2) thay n bằng 1, 2, 3, 4, 5, 6 rồi ghi giá trị d vào bảng; (3) nhận xét quy luật giữa n và d.
Câu hỏi GV đặt ra: Vì sao phải đặt d+=1 ở thân vòng trong mà không đặt ở thân vòng ngoài? Các giá trị d thu được có quan hệ gì với tổng 0+1+…+(n−1)?

c) Sản phẩm

Bảng kết quả HS điền đầy đủ: n=1 thì d=0; n=2 thì d=1; n=3 thì d=3; n=4 thì d=6; n=5 thì d=10; n=6 thì d=15. HS nhận xét: d(n) bằng tổng 0+1+…+(n−1) và bằng n(n−1)2\dfrac{n(n-1)}{2}; mỗi lần n tăng thêm 1 thì d tăng thêm đúng n−1 lượt.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV phát Phiếu học tập số 1, hướng dẫn HS đặt bộ đếm đúng vị trí và chạy thử với n=1 trước khi làm các giá trị còn lại.

    Học sinh

    HS đọc phiếu, chia việc trong cặp: một bạn gõ mã, một bạn ghi bảng kết quả.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV đi quanh lớp, kiểm tra HS đặt d+=1 đúng thân vòng trong; nhắc các cặp nếu đặt d=0 bên trong vòng lặp thì d sẽ bị đặt lại mỗi lần.

    Học sinh

    HS chạy chương trình với lần lượt n=1,...,6, ghi kết quả. Dự kiến HS trả lời: 'Khi n=4 thì d=6, bằng 0+1+2+3.'

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời một cặp đọc bảng kết quả và một cặp nêu quy luật, sau đó yêu cầu cả lớp so sánh với công thức n(n−1)2\dfrac{n(n-1)}{2}.

    Học sinh

    HS đọc bảng, nêu quy luật. Dự kiến HS trả lời: 'Với n=5 thì 5×4/2=10, đúng với số đã chạy được.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: bộ đếm đặt đúng thân vòng trong cho ra số lượt chính xác; thử nhiều n để tìm quy luật, sau đó mới tổng hợp thành công thức.

    Học sinh

    HS ghi vào vở bảng số liệu và công thức n(n−1)2\dfrac{n(n-1)}{2} kèm ví dụ n=6.

Hoạt động 2.2: Hình thành kiến thức mới · 8 phút

Từ công thức đến bậc độ phức tạp

a) Mục tiêu

HS giải thích được vì sao n(n−1)2\dfrac{n(n-1)}{2} có bậc O(n2)O(n^2), phân biệt thao tác đếm với thời gian chạy thật và không coi số đo nhỏ là chứng minh bậc.

b) Nội dung

GV tổ chức thảo luận lớp với ba câu hỏi:
(1) Trong n(n−1)2\dfrac{n(n-1)}{2}, hạng nào chi phối khi n lớn? Vì sao?
(2) Chạy n=6 được 15 có đủ để kết luận bậc hai không? Vì sao?
(3) Thời gian chạy thật bằng giây có phải là số thao tác đếm không? Vì sao?

c) Sản phẩm

Kiến thức HS rút ra: khi n lớn, hạng n2n^2 chi phối nên bậc là O(n2)O(n^2); số đo với một vài giá trị n nhỏ chỉ là dữ liệu minh hoạ, không phải chứng minh; số thao tác đếm khác với thời gian chạy thật vì thời gian còn phụ thuộc máy tính, ngôn ngữ và điều kiện chạy.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV nêu ba câu hỏi trên trình chiếu và cho HS suy nghĩ cá nhân 1 phút trước khi thảo luận.

    Học sinh

    HS đọc câu hỏi và ghi ý kiến ngắn vào vở.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV gợi ý: thử thay n=1000 vào n(n−1)2\dfrac{n(n-1)}{2} và so sánh hai hạng.

    Học sinh

    HS tính: với n=1000 thì số lượt là 499500, gần bằng 12n2\dfrac{1}{2}n^2. Dự kiến HS nói: 'Hạng −n/2 nhỏ so với n² nên không ảnh hưởng bậc.'

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 HS trình bày ý kiến về câu (2) và câu (3), các HS khác bổ sung.

    Học sinh

    Dự kiến HS trả lời: 'Chỉ có n=6 thì chưa thấy được xu hướng khi n lớn, nên phải có công thức.' và 'Thời gian chạy phụ thuộc máy, còn số thao tác đếm thì không đổi với cùng thuật toán và n.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: bậc độ phức tạp được suy ra từ công thức đếm thao tác khi n lớn; số thời gian chạy thật chỉ là thông tin tham khảo, không thay thế lập luận bậc.

    Học sinh

    HS ghi nhận: O(n2)O(n^2) là bậc của n(n−1)2\dfrac{n(n-1)}{2}, còn thời gian giây không dùng để xác định bậc.

Hoạt động 3: Luyện tập · 10 phút

Luyện tập đếm và chọn đáp án đúng

a) Mục tiêu

HS vận dụng công thức n(n−1)2\dfrac{n(n-1)}{2} để tính số lượt và nhận biết các lỗi thường gặp khi xác định độ phức tạp.

b) Nội dung

HS làm bài tập 1 đến 6 trong bài học, ưu tiên dùng bài tập tương tác trên NeoEdu để tự kiểm tra ngay.
Bài 1: n=3, in n*(n-1)//2.
Bài 2: n=5, in n*(n-1)//2.
Bài 3: n=8, in n*(n-1)//2.
Bài 4: n(n−1)2\dfrac{n(n-1)}{2} có bậc tăng trưởng nào? A. O(n2)O(n^2); B. O(n)O(n); C. O(1)O(1); D. O(log⁡n)O(\log n).
Bài 5: Có một vòng for trong hàm con không tính vào độ phức tạp. Đúng hay sai?
Bài 6: Sắp xếp các bước theo phương pháp giải: thử n nhỏ và ghi kết quả; tổng hợp thành công thức; giải thích bậc chứ không chỉ suy từ giây; thêm bộ đếm đúng vị trí.

c) Sản phẩm

Đáp án: bài 1 là 3; bài 2 là 10; bài 3 là 28; bài 4 là A (O(n2)O(n^2)); bài 5 là Sai, vì vòng lặp trong hàm con vẫn phải tính theo số lần hàm được gọi; bài 6 là: thêm bộ đếm đúng vị trí → thử n nhỏ và ghi kết quả → tổng hợp thành công thức → giải thích bậc chứ không chỉ suy từ giây.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV nêu yêu cầu: làm nhanh bài 1 đến 6, ghi đáp án, sau đó mở NeoEdu để đối chiếu.

    Học sinh

    HS nhận bài tập và mở trang bài học trên máy tính hoặc vở.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV quan sát, hỗ trợ HS gặp khó khăn ở bài 5 và bài 6, nhắc HS đối chiếu với nội dung đã học trong phần khám phá.

    Học sinh

    HS tính bài 1 đến 3 bằng công thức, đọc đáp án bài 4, suy luận bài 5 và sắp xếp bài 6. Dự kiến HS trả lời bài 5: 'Sai, vì hàm con được gọi nhiều lần nên phải tính chi phí theo số lần gọi.'

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 3 HS đọc đáp án bài 1 đến 6 và mời HS khác nhận xét nếu có khác biệt.

    Học sinh

    HS đọc đáp án: 3, 10, 28, A, Sai, thứ tự bốn bước. Các HS khác đối chiếu và sửa lỗi nếu có.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt lỗi thường gặp: quên tính hàm con khi được gọi nhiều lần; nhầm công thức với số thao tác của một lượt; kết luận bậc chỉ từ một vài giá trị nhỏ.

    Học sinh

    HS sửa lại bài làm của mình nếu sai và ghi chú lỗi vào vở.

Hoạt động 4: Vận dụng · 10 phút

Viết chương trình đếm và ước lượng khi n tăng

a) Mục tiêu

HS viết chương trình hoàn chỉnh đếm thao tác, kiểm tra theo dữ liệu mẫu và các ca biên, đồng thời giải thích sự thay đổi số lượt khi n tăng trong bối cảnh thực tế.

b) Nội dung

Tình huống thực tế: trong một lớp có n học sinh, mỗi cặp học sinh cần được kiểm tra một lần để so sánh bài làm. HS làm hai nhiệm vụ.
(a) Đếm thân vòng tam giác cho n=6, giải thích công thức, viết chương trình Python hoàn chỉnh có bộ đếm, chạy kiểm tra với dữ liệu mẫu và xét thêm n=0.
(b) Nếu n tăng từ 10 lên 20, số đếm theo công thức thay đổi bao nhiêu lần? Giải thích vì sao tỉ số này không đúng bằng 4 khi còn hạng thấp.
Nhiệm vụ (a) làm trên lớp trong phần thời gian còn lại; phần chạy kiểm tra đầy đủ và viết lập luận hoàn chỉnh giao về nhà.

c) Sản phẩm

Chương trình HS viết có bộ đếm d khởi tạo bằng 0, hai vòng lồng nhau đúng thứ tự, in ra kết quả 15 khi n=6 và 0 khi n=0. Lập luận: tổng số lượt bằng 0+1+…+(n−1)=n(n−1)2\dfrac{n(n-1)}{2}, với n=6 cho 15; bậc là O(n2)O(n^2) vì đây là bậc hai. Với (b): 10×9/2=45; 20×19/2=190; tỉ lệ 190/45≈4,22190/45 \approx 4{,}22; không đúng bằng 4 vì còn hạng thấp trong số thao tác thực tế.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV nêu tình huống lớp học và hai nhiệm vụ (a), (b); nhắc HS ghi lập luận ngắn kèm mã chương trình.

    Học sinh

    HS đọc tình huống, xác định biến và vòng lặp cần dùng.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV đi quanh lớp, hướng dẫn HS xét ca biên n=0 và kiểm tra lại kết quả với n=6.

    Học sinh

    HS viết chương trình và chạy kiểm tra. Dự kiến HS trả lời: 'Khi n=0 thì range(0) rỗng nên d vẫn bằng 0.' Với (b), HS tính 45 và 190.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 HS trình bày chương trình và lập luận, mời HS khác nhận xét về cách tính tỉ số.

    Học sinh

    HS trình bày mã và kết quả 15, 0. Dự kiến HS nói: '190 chia 45 xấp xỉ 4,22, vì có hạng thấp nên không đúng bằng 4.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: chương trình đếm là cách thu thập số liệu đáng tin cậy; bậc độ phức tạp cần lập luận từ công thức; hoàn thiện mã và lập luận ở nhà.

    Học sinh

    HS ghi nhận yêu cầu hoàn thiện bài làm và nộp đúng hạn.

Phiếu học tập

Phiếu học tập số 1

Nhiệm vụ: Thêm bộ đếm d vào thuật toán mẫu, chạy với các giá trị n và điền kết quả.

Đoạn mã mẫu cần hoàn thiện:

  • Khởi tạo d=0 ở ngoài vòng lặp.
  • Vòng for i trong range(n), vòng for j trong range(i).
  • Đặt lệnh d+=1 ở thân vòng trong.
  • In giá trị d.

Bảng cần điền:

  • n=1: d = ?
  • n=2: d = ?
  • n=3: d = ?
  • n=4: d = ?
  • n=5: d = ?
  • n=6: d = ?

Câu hỏi:

  • Vì sao lệnh d+=1 phải đặt ở thân vòng trong?
  • Các giá trị d vừa điền có quan hệ gì với tổng 0+1+…+(n−1)?
  • Hãy viết công thức tổng quát cho d theo n và cho biết bậc độ phức tạp.

Hướng dẫn về nhà

  • Hoàn thiện chương trình đếm thân vòng tam giác cho n=6, chạy kiểm tra và ghi kết quả 15; xét thêm n=0 và ghi kết quả 0. Viết lập luận ngắn giải thích công thức n(n−1)2\dfrac{n(n-1)}{2} và bậc O(n2)O(n^2).
  • Trả lời câu hỏi (b) của phần vận dụng: khi n tăng từ 10 lên 20, số lượt đếm đổi từ 45 lên 190, tỉ lệ xấp xỉ 4,224{,}22; giải thích vì sao tỉ lệ này không đúng bằng 4.
  • Làm lại bài tập tương tác bài 1 đến bài 6 trên trang NeoEdu, ghi lại câu sai và giải thích lỗi đã mắc phải.
  • Ôn lại khái niệm bộ đếm thao tác và phân biệt với thời gian chạy thực tế để chuẩn bị cho bài học tiếp theo.

Giáo án do NeoEdu soạn với sự hỗ trợ của AI, dựa trên nội dung bài học trên Học liệu. Thầy cô nên đọc lại và điều chỉnh cho phù hợp với học sinh của mình; bản Word để sửa trực tiếp.