Một miền ứng dụng nơi cây nhị phân tốt hơn hoặc dễ điều chỉnh hơn các lựa chọn thay thế nhất định là các cấu trúc dữ liệu liên tục (thường được sử dụng trong lập trình chức năng (hoàn toàn)).
Cấu trúc dữ liệu liên tục là cấu trúc dữ liệu bảo tồn phiên bản trước của chính nó khi nó được sửa đổi. (Cấu trúc dữ liệu không có thuộc tính này được gọi là phù du .) Một lợi ích của loại cấu trúc dữ liệu này là cho phép chia sẻ các phần của cấu trúc dữ liệu - vì cấu trúc được đảm bảo không thay đổi, nên an toàn khi chia sẻ nó. tự do giữa các cấu trúc dữ liệu khác và thậm chí các luồng mà không lo nó thay đổi. Một lợi ích chủ quan khác là các cấu trúc dữ liệu này dễ dàng lý luận hơn.
Về mặt khái niệm, bạn có thể có một loại dữ liệu bất biến là danh sách các số, ví dụ: . Sau đó, bạn có thể giới thiệu một giá trị mới thêm hai số vào trước danh sách này: . Điều gì đã xảy ra với ? Không có gì - , vẫn vậy. Đã sao chép những ba yếu tố và đưa nó vào danh sách riêng của mình, sau đó? Lý tưởng nhất là không - các giá trị trong danh sách thuộc về :L1= { 3 ,4 , 5 }L2= c o n s ( 1 , c o n s ( 2 ,L1) ) = { 1 , 2 , 3 , 4 , 5 }L1L1= { 3 , 4 , 5 }L2L1L2
1 , 2 ,3 , 4 , 5L1L2
Có các cấu trúc dữ liệu phù hợp hơn để thực hiện các danh sách liên tục như ở trên. Trong cùng một hướng, cây nhị phân rất phù hợp để thực hiện các cấu trúc dữ liệu liên tục với các thuộc tính nhất định, hơn các cấu trúc dữ liệu hoặc chiến lược khác. Và chia sẻ cấu trúc được hiển thị trong ví dụ với hai danh sách chuyển sang cây nhị phân - bạn có thể tưởng tượng rằng một số phiên bản của cây có thể chia sẻ các cây con mà chúng có chung.
Giống như tôi đã nói, một số cấu trúc dữ liệu dễ dàng sửa đổi hơn để tồn tại. Bạn đề cập đến bảng băm, thường là (nếu không nhất thiết) một cấu trúc dữ liệu phù du. Dường như ít rõ ràng hơn về cách người ta có thể điều chỉnh một chiến lược thực hiện chung để bảng băm được duy trì. Hãy xem xét rằng một bảng băm thường được triển khai với một mảng (cụ thể là các mảng được triển khai như một phần liên tục của bộ nhớ). Mảng rất hay vì chúng cung cấp quyền truy cập ngẫu nhiên vào các phần tử, đây là một thuộc tính quan trọng vì bạn lý tưởng muốn cóÔi ( 1 )truy cập trung bình vào các yếu tố trong bảng băm. Nhưng mảng không đẹp khi xây dựng cấu trúc dữ liệu liên tục. Ý chính của nó là, trong khi bạn có thể tạo một kiểu dữ liệu mảng bất biến, theo bản chất của mảng, bạn có nguy cơ phải sao chép nhiều - Nếu loại Danh sách nói trên được triển khai bằng mảng, bạn sẽ có nguy cơ phải tạo một mảng toàn bộ mảng mới với năm yếu tố, thay vì chia sẻ một phần của nó. Và nếu bạn muốn sửa đổi một cái gì đó ở giữa mảng thì sao? Câu trả lời rõ ràng nhất - và dường như không thể tránh khỏi - là, một lần nữa, sao chép .
Cấu trúc dữ liệu liên tục không tránh việc phải sao chép, nói chung. Nhưng cấu trúc dữ liệu nhất định làm cho việc sao chép ít thường xuyên hơn. Đây là một tài sản mong muốn khi bạn yêu cầu một cấu trúc dữ liệu phải bất biến.