Tôi cần một cấu trúc dữ liệu để lưu trữ một số phần tử, mỗi phần tử được liên kết với một số thời gian khác nhau . khác nhau và trong khi nó có giới hạn trên lý thuyết, đây là nhiều bậc có độ lớn lớn hơn mức thường được sử dụng.
Thông qua ứng dụng của tôi, tôi có thể đảm bảo rằng:
Các phần tử được chèn luôn mới hơn tất cả các phần tử hiện có, nghĩa là, nếu một phần tử được liên kết với thời gian được chèn, thì . Các yếu tố được chèn từng cái một.
Chỉ các phần tử cũ nhất bị xóa, nghĩa là, nếu phần tử bị xóa, thì . Việc xóa hầu hết xảy ra từng cái một, nhưng không có tác hại trực tiếp nếu việc loại bỏ phần tử bị trì hoãn, miễn là phần nhỏ của các phần tử được lưu trữ giả vẫn nhỏ hơn 1.
Ngoài việc chèn và xóa, điều duy nhất tôi cần làm là tìm hai phần tử lân cận trong một khoảng thời gian nhất định với . Với các từ khác, tôi cần tìm hai phần tử và sao cho và ∄ l ∈ \ {1, Nott, n \}: t_j <t_l <t_k .
Tiêu chí của tôi cho cấu trúc dữ liệu là:
- Tìm các yếu tố như mô tả ở trên nên càng nhanh càng tốt.
- Chèn và loại bỏ nên được nhanh chóng.
- Cấu trúc dữ liệu tương đối đơn giản để thực hiện.
Miễn là chúng ta không nói về một bù thời gian chạy nhỏ, mỗi tiêu chí được ưu tiên hơn tiếp theo.
Nghiên cứu của tôi cho đến nay đã cho thấy câu trả lời có khả năng là một loại cây tìm kiếm tự cân bằng, nhưng tôi đã không tìm thấy bất kỳ thông tin nào trong số đó là tốt nhất cho trường hợp chèn hoặc xóa một phía, và nó có thể sẽ khiến tôi phải trả giá thời gian đáng kể để tìm hiểu bản thân mình. Ngoài ra, tôi chỉ tìm thấy thông tin không đầy đủ về việc cây tự tổ chức tốt như thế nào và nhanh như thế nào (ví dụ, cây AVL tự tổ chức cứng hơn cây đỏ đen), chứ đừng nói đến việc điều này bị ảnh hưởng bởi việc chèn hoặc xóa một phía.