Chuyển tới nội dung chính

Mảng nhiều chiều

Bạn sẽ học được gì

Khi dữ liệu có dạng bảng/lưới (ảnh, bàn cờ, bảng điểm), ta dùng mảng nhiều chiều. Bạn sẽ học cách đánh chỉ số [hàng][cột], duyệt lưới, và tính độ phức tạp khi làm việc với ma trận.

1. Trực quan: bảng có hàng và cột

Mảng 1 chiều là một dãy. Mảng 2 chiều là một bảng — mảng của các mảng. Mỗi phần tử xác định bởi hai chỉ số: hàng i và cột j.

cột 0 cột 1 cột 2
┌──────┬──────┬──────┐
hàng 0 │ 1 │ 2 │ 3 │ grid[0][2] = 3
├──────┼──────┼──────┤
hàng 1 │ 4 │ 5 │ 6 │ grid[1][0] = 4
├──────┼──────┼──────┤
hàng 2 │ 7 │ 8 │ 9 │ grid[2][1] = 8
└──────┴──────┴──────┘

Quy ước phổ biến: grid[i][j] = hàng i, cột j. Nhớ: hàng trước, cột sau.

2. Tạo và truy cập

Đang tải trình chạy code…

Truy cập grid[i][j] vẫn là O(1) (hai phép tính địa chỉ).

3. Chạy debug: duyệt toàn bộ lưới

Duyệt lưới cần hai vòng lặp lồng nhau: vòng ngoài đi qua hàng, vòng trong đi qua cột. Bước qua để thấy thứ tự thăm từng ô:

🐞 Duyệt lưới 2×3 theo hàngBước 1/7
1for i in range(so_hang): # 2 hang
2 for j in range(so_cot): # 3 cot
3 tham(grid[i][j])
Biến tại bước này
i0
👉 Vào hàng 0.

4. Độ phức tạp khi làm việc với ma trận

Với lưới m hàng, n cột (tổng m × n ô):

  • Truy cập một ô: O(1).
  • Duyệt toàn bộ: O(m × n) — phải thăm mọi ô. (Nếu lưới vuông n × n thì là O(n²).)
  • Tìm kiếm trong lưới chưa sắp xếp: O(m × n).

Cẩn thận: với lưới vuông, "duyệt hết" là O(n²) theo cạnh n, không phải O(n). Luôn rõ n là gì.

5. Bẫy thường gặp khi tạo lưới trong Python

Đang tải trình chạy code…

[[0]*3]*3 tạo 3 tham chiếu tới cùng một hàng → sửa một ô là cả cột đổi. Dùng [[0]*n for _ in range(m)] để mỗi hàng độc lập. Lỗi này rất hay gặp.

6. Mẫu nhận diện

  • Dữ liệu dạng bảng/lưới/ma trận (ảnh, bàn cờ, bản đồ) → mảng 2D.
  • Duyệt lưới → hai vòng lồng nhau, độ phức tạp O(m×n).
  • Lưới cũng là cách biểu diễn đồ thị (ma trận kề) — gặp lại ở Chương 2.6.

7. 🎮 Trò chơi: Lưới 2D

🎮 Lưới 2DCâu 1/4· Điểm 0· 🔥 0

grid[i][j] = hàng i, cột j. Duyệt hết lưới m×n tốn O(m×n).

Duyệt toàn bộ lưới n×n tốn?

8. Quiz kiểm tra nhanh

📝 Quiz kiểm tra nhanh
1. grid[i][j] theo quy ước phổ biến nghĩa là?
2. Duyệt hết lưới m hàng n cột tốn?
3. Vì sao [[0]*3]*3 gây lỗi khi sửa một ô?

9. Hoàn thành

☑️ Tiếp theo: 2.1.4 — Chuỗi (string) (mảng của ký tự).