Mảng nhiều chiều
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
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 ô:
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 × nthì 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õnlà gì.
5. Bẫy thường gặp khi tạo lưới trong Python
[[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
8. Quiz kiểm tra nhanh
9. Hoàn thành
…☑️ Tiếp theo: 2.1.4 — Chuỗi (string) (mảng của ký tự).