9.1 Đặc điểm của mảng kích thước cố định
Mảng kích thước cố định — là mảng có kích thước được xác định khi tạo ra và không thể thay đổi trong quá trình chạy chương trình. Trong Python, mảng kích thước cố định có thể được tạo bằng thư viện array
hoặc sử dụng danh sách, mặc dù danh sách trong Python có thể thay đổi kích thước, nhưng chúng được sử dụng tương tự như mảng trong các ngôn ngữ khác.
Đặc điểm của mảng kích thước cố định:
- Kích thước cố định: Kích thước của mảng được đặt khi tạo ra và không thể thay đổi.
- Đồng nhất: Tất cả các phần tử của mảng phải có cùng kiểu.
- Truy cập nhanh theo chỉ số: Truy cập các phần tử của mảng chiếm thời gian không đổi
O(1)
. - Kích thước không thể thay đổi: Số lượng phần tử của mảng là không đổi, và không thể thêm phần tử mới.
Ví dụ về tạo mảng kích thước cố định trong Python:
Sử dụng thư viện array
:
import array
# Tạo mảng từ các số nguyên (kiểu 'i' cho int)
arr = array.array('i', [1, 2, 3, 4, 5])
# Truy cập phần tử
print(arr[2]) # Kết quả: 3
# Thay đổi giá trị của phần tử
arr[2] = 10
print(arr) # Kết quả: array('i', [1, 2, 10, 4, 5])
Sử dụng danh sách (giả lập mảng kích thước cố định):
# Tạo danh sách kích thước cố định
arr = [0] * 5
# Khởi tạo các phần tử
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
# Truy cập phần tử
print(arr[2]) # Kết quả: 3
# Thay đổi giá trị của phần tử
arr[2] = 10
print(arr) # Kết quả: [1, 2, 10, 4, 5]
9.2 Ưu điểm và nhược điểm của mảng kích thước cố định
Mọi thứ đều có mặt mạnh và yếu, và các mảng kích thước cố định cũng không ngoại lệ.
Ưu điểm:
- Truy cập nhanh theo chỉ số: Truy cập bất kỳ phần tử nào của mảng chiếm thời gian không đổi
O(1)
, làm cho mảng rất hiệu quả trong việc đọc dữ liệu. - Dễ dàng thực hiện: Mảng đơn giản để hiểu và sử dụng, chúng dễ dàng để thực hiện và áp dụng trong các bài toán khác nhau.
- Sử dụng bộ nhớ hiệu quả: Do kích thước mảng cố định, bộ nhớ được cấp phát ngay khi tạo mảng, điều này giúp tránh tốn kém trong việc phân bổ lại bộ nhớ.
- Tiên đoán: Kích thước cố định của mảng làm đơn giản việc quản lý bộ nhớ và tiên đoán sử dụng tài nguyên.
Nhược điểm:
- Kích thước không thể thay đổi: Kích thước mảng được đặt khi tạo ra và không thể thay đổi. Điều này có nghĩa là cần biết trước kích thước cần thiết của mảng hoặc mạo hiểm trong việc cấp phát bộ nhớ dư thừa.
- Chi phí cho chèn và xoá: Chèn và xoá phần tử có thể tốn kém thời gian, do cần phải dịch chuyển các phần tử. Trong trường hợp xấu nhất, việc chèn hoặc xoá phần tử giữa mảng chiếm thời gian
O(n)
. - Sử dụng bộ nhớ không hiệu quả: Nếu mảng không được sử dụng đầy đủ, các ô nhớ còn lại sẽ không được sử dụng, dẫn đến việc sử dụng bộ nhớ không hiệu quả.
- Hạn chế linh hoạt: Mảng không cho phép thay đổi kích thước động, làm cho chúng kém linh hoạt hơn so với các cấu trúc dữ liệu động như danh sách.
9.3 Ví dụ sử dụng và ứng dụng
Dưới đây là một số ví dụ về sử dụng và ứng dụng mảng kích thước cố định.
Ví dụ 1: Bảng và ma trận
Mảng kích thước cố định thường được sử dụng để biểu diễn bảng và ma trận, nơi kích thước được biết trước.
import numpy as np
# Tạo ma trận 3x3 với kích thước cố định
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Truy cập phần tử của ma trận
print(matrix[1][2]) # Kết quả: 6
# Thay đổi phần tử của ma trận
matrix[1][2] = 10
print(matrix)
# Kết quả:
# [[ 1 2 3]
# [ 4 5 10]
# [ 7 8 9]]
Ví dụ 2: Bộ đệm và bộ nhớ đệm
Mảng kích thước cố định được sử dụng để tạo bộ đệm và bộ nhớ đệm, nơi kích thước bộ đệm được biết trước và không thay đổi.
# Bộ đệm kích thước cố định để đọc dữ liệu
buffer_size = 1024
buffer = bytearray(buffer_size)
# Điền dữ liệu vào bộ đệm
data = b"Hello, World!"
buffer[:len(data)] = data
print(buffer[:len(data)]) # Kết quả: b'Hello, World!'
Ví dụ 3: Lưu trữ dữ liệu về thời gian và ngày tháng
Mảng kích thước cố định có thể được sử dụng để lưu trữ dữ liệu về thời gian và ngày tháng, chẳng hạn như số ngày trong mỗi tháng.
Trong ví dụ này, chúng ta mô phỏng hành vi của mảng cố định thông qua lớp list
:
# Số ngày trong mỗi tháng (không phải năm nhuận)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Truy cập dữ liệu
month = 2 # Tháng hai
print(f"Tháng hai có {days_in_month[month - 1]} ngày") # Kết quả: Tháng hai có 28 ngày
GO TO FULL VERSION