---
url: https://docs.nemo12.com/curriculum/tin/design/choose-strategy.md
description: >-
  Module Tin học (Design) 2.2: learner hiểu bài toán có nhiều lời giải đúng và
  chọn cách tiếp cận hợp với hoàn cảnh.
---

# Module 2.2 · Choose a strategy (Chọn cách tiếp cận)

Thuộc [Package 2 · Design an Algorithm](/curriculum/tin/design/).

| | |
| --- | --- |
| **Unit** | 4 |
| **Mastery level** | 5 tới 12 |
| **Lớp (VN)** | 6 tới 12 |
| **Key concept chính** | Development (Phát triển) · Patterns (Quy luật) |

***

## Unit 1 · More than one right answer (Không chỉ một cách đúng)

> **Tôi sẽ làm được** nghĩ ra ít nhất hai cách giải cho cùng một bài, rồi so chúng.

**Mastery level 5-10 · Lớp 6-11 · Development (Phát triển)**

| Bậc | Learner làm được gì |
| --- | --- |
| **Đang hình thành** | Nghĩ ra một cách rồi làm luôn |
| **Đạt** | Nêu được hai cách khác nhau và so ưu nhược |
| **Vững** | Chọn có lý do, và nói rõ **hoàn cảnh nào thì cách kia tốt hơn** |

**Bằng chứng đạt.** Learner trình bày hai cách giải cùng bài và nói rõ mình chọn cái nào, vì sao.

**Hiểu lầm thường gặp.** Bài nào cũng có một lời giải chuẩn. Trong lập trình thật, phần lớn quyết định là đánh đổi giữa các phương án cùng đúng, và học sinh quen với trang chấm tự động dễ tưởng chỉ có một đáp án.

**Knowledge node.** Nhiều lời giải · So sánh phương án · Đánh đổi thiết kế

***

## Unit 2 · Search and sort (Tìm kiếm và sắp xếp)

> **Tôi sẽ làm được** dùng các cách tìm kiếm và sắp xếp cơ bản, và biết cái nào hợp khi nào.

**Mastery level 7-11 · Lớp 8-12 · Patterns (Quy luật)**

| Bậc | Learner làm được gì |
| --- | --- |
| **Đang hình thành** | Chỉ biết duyệt lần lượt từ đầu tới cuối |
| **Đạt** | Dùng được tìm kiếm nhị phân và vài thuật toán sắp xếp |
| **Vững** | Nhận ra tìm kiếm nhị phân **đòi hỏi dữ liệu đã sắp xếp**, và cân được cái giá đó |

**Bằng chứng đạt.** Learner quyết định có nên sắp xếp trước hay không, dựa trên số lần sẽ phải tìm kiếm.

**Hiểu lầm thường gặp.** Thuật toán nhanh hơn thì luôn nên dùng. Nếu chỉ tìm một lần thì duyệt tuần tự rẻ hơn sắp xếp rồi tìm nhị phân. Cái giá chuẩn bị phải được tính vào.

**Knowledge node.** Tìm kiếm tuần tự · Tìm kiếm nhị phân · Sắp xếp · Điều kiện áp dụng

***

## Unit 3 · Divide and conquer (Chia để trị)

> **Tôi sẽ làm được** giải một bài lớn bằng cách chia đôi liên tục cho tới khi phần nhỏ dễ giải.

**Mastery level 9-12 · Lớp 10-12 · Systems (Hệ thống) · Patterns (Quy luật)**

| Bậc | Learner làm được gì |
| --- | --- |
| **Đang hình thành** | Chỉ nghĩ theo hướng duyệt tuần tự |
| **Đạt** | Áp dụng được chia đôi vào tìm kiếm và sắp xếp |
| **Vững** | Nhận ra dạng bài nào **chia được** và dạng nào không |

**Bằng chứng đạt.** Learner áp dụng ý chia đôi vào một bài chưa từng gặp, ngoài phạm vi tìm kiếm và sắp xếp.

**Hiểu lầm thường gặp.** Chia để trị là một thuật toán cụ thể. Nó là một **lối nghĩ**, và learner sẽ gặp lại nó ở [Module 4.2](/curriculum/tin/debug/) khi thu hẹp vùng nghi ngờ để gỡ lỗi.

**Knowledge node.** Chia để trị · Chia đôi · Sắp xếp trộn · Độ sâu chia

***

## Unit 4 · Recursion (Đệ quy)

> **Tôi sẽ làm được** giải một bài bằng cách gọi lại chính cách giải đó trên bài nhỏ hơn.

**Mastery level 9-12 · Lớp 10-12 · Patterns (Quy luật) · Models (Mô hình)**

| Bậc | Learner làm được gì |
| --- | --- |
| **Đang hình thành** | Thấy đệ quy như một vòng luẩn quẩn khó hiểu |
| **Đạt** | Viết được hàm đệ quy có trường hợp cơ sở đúng |
| **Vững** | Nhận ra đệ quy **luôn cần một điều kiện dừng**, và biết khi nào nó tốn kém |

**Bằng chứng đạt.** Learner giải thích được vì sao đệ quy thiếu trường hợp cơ sở sẽ chạy mãi cho tới khi tràn bộ nhớ.

**Hiểu lầm thường gặp.** Đệ quy là cách viết ngắn gọn hơn của vòng lặp. Nó là một cách nghĩ khác: **giả sử bài nhỏ hơn đã giải xong rồi**, ta chỉ cần xử lý một bước. Learner nào chấp nhận được giả định đó thì đệ quy hết khó ngay.

**Knowledge node.** Đệ quy · Trường hợp cơ sở · Ngăn xếp lời gọi · Tràn ngăn xếp

***

## Dạy module này theo kiểu IB

**Concept-based.** Khái niệm dẫn dắt là *Development*: thiết kế là chọn giữa các phương án cùng đúng, dựa trên cái giá của mỗi cái.

**Inquiry.** Khuôn đoán số, dành cho unit 2 và 3:

```text
Giáo viên nghĩ một số từ 1 tới 1000. Learner đoán.
     ↓
Vòng 1: bắt buộc đoán tuần tự 1, 2, 3...  (rất lâu)
     ↓
Vòng 2: được hỏi "lớn hơn hay nhỏ hơn"
     ↓
Đếm số lần đoán ở cả hai vòng. Ghi lên bảng.
     ↓
"Nếu số từ 1 tới 1 TRIỆU thì mỗi cách mất bao nhiêu lần?"
```

Câu cuối là chỗ learner tự chạm vào khác biệt giữa tăng tuyến tính và tăng theo loga: một bên nhân lên nghìn lần, một bên chỉ thêm mười lần đoán. Đó là cửa vào [Module 2.3](/curriculum/tin/design/cost) mà không cần một công thức nào.

[Module 2.3 · Cost of a solution →](/curriculum/tin/design/cost)
