Gần đây tôi đã đọc rằng có thể có các mảng không cần khởi tạo, nghĩa là có thể sử dụng chúng mà không phải mất thời gian cố gắng đặt từng thành viên về giá trị mặc định. tức là bạn có thể bắt đầu sử dụng mảng như thể nó đã được khởi tạo bởi giá trị mặc định mà không phải khởi tạo nó. (Xin lỗi, tôi không nhớ tôi đã đọc nó ở đâu).
Ví dụ như tại sao điều đó có thể gây ngạc nhiên:
Giả sử bạn đang cố gắng mô hình hóa trường hợp xấu nhất hashtable (cho mỗi lần chèn / xóa / tìm kiếm) của các số nguyên trong phạm vi [ 1 , n 2 ] .
Bạn có thể phân bổ một mảng có kích thước bit và sử dụng các bit riêng lẻ để thể hiện sự tồn tại của một số nguyên trong hàm băm. Lưu ý: phân bổ bộ nhớ được coi là O ( 1 ) thời gian.
Bây giờ, nếu bạn hoàn toàn không phải khởi tạo mảng này, bất kỳ chuỗi thao tác nói trên hàm băm này bây giờ là trường hợp xấu nhất O ( n ) .
Vì vậy, trong thực tế, bạn có một triển khai băm "hoàn hảo", cho một chuỗi hoạt động sử dụng không gian Θ ( n 2 ) , nhưng chạy trong thời gian O ( n ) !
Thông thường người ta sẽ mong đợi thời gian chạy của bạn ít nhất là tồi tệ như việc sử dụng không gian của bạn!
Lưu ý: Ví dụ trên có thể được sử dụng để triển khai một tập hợp thưa hoặc ma trận thưa thớt, vì vậy nó không chỉ là lợi ích lý thuyết, tôi cho rằng.
Vì vậy, câu hỏi là:
Làm thế nào có thể có một mảng như cấu trúc dữ liệu cho phép chúng ta bỏ qua bước khởi tạo?