Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Kỹ thuật gấp đôi mảng trong cấu trúc dữ liệu


Đôi khi ta tạo mảng bằng cấp phát động. Nếu mảng được cấp phát động, ta có thể gấp đôi kích thước bằng một số thao tác.

Giả sử kích thước ban đầu là 5.

Mảng ban đầu

01234
Phần tử 1Phần tử 2Phần tử 3Phần tử 4Phần tử 5

Sau khi gấp đôi, kích thước là:

0123456789
Phần tử 1Phần tử 2Phần tử 3Phần tử 4Phần tử 5Phần tử 6Phần tử 7Phần tử 8Phần tử 9Phần tử 10

Để gấp đôi mảng arr kích thước n, arr[0…n-1]. Trước tiên tạo mảng mới kích thước m. Sao chép n phần tử từ arr sang mảng mới. Cuối cùng thay đổi arr trỏ đến mảng mới.

Tạo mảng kích thước m mất θ(m) thời gian (khởi tạo giá trị mặc định). Cần thêm θ(n) để sao chép. Tổng cộng θ(m + n). Thường m = 2n, nên θ(3n) ~ θ(n). Tuy nhiên, thao tác này tốn kém. Nhưng nếu摊 phân (amortized) qua n lần chèn tiếp theo, chỉ thêm θ(1) mỗi lần. Do đó, tăng kích thước mảng theo hằng số không ảnh hưởng đến độ phức tạp tiệm cận.