Tôi đang tìm cấu trúc dữ liệu (hoặc cấu trúc) cho phép tôi giữ cho tôi danh sách thứ tự các số nguyên, không trùng lặp, với chỉ mục và giá trị trong cùng một phạm vi.Cấu trúc dữ liệu hiệu quả để truy cập ngẫu nhiên nhanh, tìm kiếm, chèn và xóa
tôi cần bốn hoạt động chính là hiệu quả, để thô quan trọng:
- lấy giá trị từ một chỉ số cho trước
- tìm chỉ số của một giá trị nhất định
- chèn một giá trị tại một đưa chỉ số
- xóa một giá trị tại một chỉ số cho trước
Sử dụng một mảng tôi có 1 tại O (1), nhưng 2 là O (N) và chèn và xóa là tốn kém (O (N) là tốt, tôi tin).
Danh sách liên kết có O (1) chèn và xóa (khi bạn có nút), nhưng 1 và 2 là O (N) do đó phủ nhận lợi ích.
Tôi đã cố giữ hai mảng [index] = value và b [value] = index, biến 1 và 2 thành O (1) nhưng chuyển 3 và 4 thành hoạt động tốn kém hơn.
Có cấu trúc dữ liệu nào phù hợp hơn cho điều này không?
Bạn đang sử dụng ngôn ngữ nào? –
Không nên thực sự quan trọng, nhưng đó là C++ – Leonel
Nó không quan trọng; không phải tất cả các ngôn ngữ đều cung cấp cùng cấu trúc dữ liệu. Ví dụ, vấn đề cụ thể này có thể được giải quyết rất hiệu quả bởi một mảng C Judy hoặc C# CPTrie. (Hoặc, tất nhiên, một số loại cây nhị phân cân bằng như Ayman đề xuất.) – Qwertie