10.1 Đặc điểm của mảng động
Mảng động là những cấu trúc dữ liệu có thể thay đổi kích thước trong khi chương trình đang chạy. Chúng cho phép quản lý bộ sưu tập các phần tử một cách hiệu quả, thêm và xóa phần tử mà không cần xác định kích thước mảng từ trước.
Trong Python, mảng động là danh sách (lớp tích hợp list), cho phép bạn thêm, xóa và thay đổi phần tử ở bất kỳ vị trí nào.
Đặc điểm của mảng động:
- Kích thước có thể thay đổi: Mảng động có thể tăng và giảm kích thước khi cần thiết.
- Truy cập nhanh theo chỉ mục: Truy cập vào phần tử được thực hiện trong thời gian cố định
O(1)
. - Quản lý bộ nhớ tự động: Python tự động quản lý việc cấp phát và giải phóng bộ nhớ cho danh sách.
- Phương thức thuận tiện để làm việc với phần tử: Các phương thức tích hợp cho phép dễ dàng thêm, xóa và thay đổi phần tử.
Ví dụ về tạo và sử dụng mảng động trong Python:
# Tạo danh sách
dynamic_array = [1, 2, 3, 4, 5]
# Thêm phần tử
dynamic_array.append(6)
print(dynamic_array) # Xuất: [1, 2, 3, 4, 5, 6]
# Xóa phần tử
dynamic_array.remove(3)
print(dynamic_array) # Xuất: [1, 2, 4, 5, 6]
# Truy cập theo chỉ mục
print(dynamic_array[2]) # Xuất: 4
# Thay đổi phần tử
dynamic_array[2] = 10
print(dynamic_array) # Xuất: [1, 2, 10, 5, 6]
10.2 Ưu điểm và nhược điểm của mảng động
Mảng động có những ưu điểm và nhược điểm riêng. Hãy xem xét chúng chi tiết hơn.
Ưu điểm:
- Linh hoạt: Mảng động có thể thay đổi kích thước theo nhu cầu của chương trình, cho phép quản lý bộ nhớ hiệu quả và xử lý khối lượng dữ liệu khác nhau.
- Truy cập nhanh theo chỉ mục: Cũng như mảng tĩnh, mảng động cho phép truy cập nhanh vào phần tử theo chỉ mục trong thời gian cố định
O(1)
. - Tiện lợi trong sử dụng: Các phương thức tích hợp của Python để làm việc với danh sách (như append, remove, insert) đơn giản hóa việc thao tác với phần tử và làm cho mã dễ đọc và bảo trì hơn.
- Quản lý bộ nhớ tự động: Python tự động quản lý bộ nhớ cho mảng động, giúp lập trình viên không cần phải tự tay cấp phát và giải phóng bộ nhớ.
Nhược điểm:
- Tái phân bổ bộ nhớ: Khi tăng kích thước của mảng động, có thể cần tái phân bổ bộ nhớ, điều này đi kèm với việc sao chép phần tử vào vùng bộ nhớ mới. Điều này có thể tạm thời làm chậm việc thực hiện chương trình.
- Chi phí cho việc chèn và xóa phần tử: Việc chèn và xóa phần tử ở giữa mảng yêu cầu dịch chuyển phần tử, điều này chiếm
O(n)
thời gian. - Một số chi phí quản lý cao hơn: So với các ngôn ngữ cấp thấp như C, mảng động trong Python có thêm chi phí liên quan đến quản lý bộ nhớ tự động và xử lý ngoại lệ.
10.3 Ví dụ sử dụng và ứng dụng
Hãy xem xét một vài ví dụ sử dụng mảng động trong Python.
1. Thực hiện danh sách công việc động:
tasks = []
# Thêm công việc
tasks.append("Task 1")
tasks.append("Task 2")
tasks.append("Task 3")
# Hoàn thành công việc và xóa nó ra khỏi danh sách
completed_task = tasks.pop(0)
print(f"Completed: {completed_task}")
print(f"Remaining tasks: {tasks}") # Xuất: Remaining tasks: ['Task 2', 'Task 3']
2. Thực hiện danh sách đối tượng động:
students = []
# Thêm sinh viên
students.append("Alice")
students.append("Bob")
students.append("Charlie")
# Xóa sinh viên
students.remove("Bob")
print(f"Students after removal: {students}") # Xuất: Students after removal: ['Alice', 'Charlie']
# Thêm sinh viên vào vị trí cụ thể
students.insert(1, "David")
print(f"Students after insertion: {students}") # Xuất: Students after insertion: ['Alice', 'David', 'Charlie']
GO TO FULL VERSION