Đặt cấu trúc dữ liệu để chèn lặp lại hiệu quả


11

Tôi đang tìm kiếm một cấu trúc dữ liệu hiệu quả về không gian chứa các bộ (không lặp lại) các phần tử wordize và hỗ trợ chèn nhanh (khấu hao O (1)). Theo "không gian hiệu quả", ý tôi là, lý tưởng, n+o(n) từ để lưu trữ n phần tử.

Trở thành một tập hợp là một phần quan trọng của câu hỏi: nếu mỗi phần tử được thêm vào logn lần thì không gian được sử dụng không thể là nlogn .

Cấu trúc cũng cần hỗ trợ liệt kê các yếu tố của nó (hợp lý hiệu quả); bất kỳ cấu trúc lành mạnh nên không có rắc rối ở đây. (Truy vấn thành viên nhanh là một lợi thế.)


2
Có một lý do mà một bảng băm sẽ không làm điều đó?
Dave

@Dave: Tôi không nghĩ rằng điều đó đáp ứng yêu cầu về không gian, nhưng tôi cho rằng một lịch trình thay đổi kích thước động đủ nghiêm ngặt có thể làm cho nó hoạt động. Nhưng nói chung tôi muốn xem những gì ngoài đó trước khi thực sự viết mã.
Charles

1
Để được khấu hao O(1) với thay đổi kích thước động, bạn phải tăng kích thước lên một phần không đổi, điều mà tôi không nghĩ là đáp ứng yêu cầu không gian nếu bạn muốn đáp ứng nghiêm ngặt n+o(n) .
Dave

O(1)

@Magnus: Tôi đoán rằng điều đó có nghĩa là các hàm thực tế đằng sau các ký hiệu O và o trong câu hỏi không phụ thuộc vào kích thước từ.
Tsuyoshi Ito

Câu trả lời:


10

Tôi nghĩ rằng "Từ điển và cây năng động" của Raman và Rao đáp ứng các giới hạn mà bạn chỉ định. Từ tóm tắt:

Trước tiên, chúng tôi đưa ra một đại diện của một tập hợp hỗ trợ các truy vấn thành viên trong thời gian trường hợp xấu nhất và chèn vào / xóa từ trong thời gian khấu hao dự kiến. Việc sử dụng đại diện bit, nơi là không gian tối thiểu thông tin lý thuyết để đại diện cho .O ( 1 ) S O ( 1 ) B + o ( B )SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)S


Điều này có vẻ tuyệt vời. (Tuy nhiên, bạn sẽ hiểu nếu tôi đọc bài báo trước khi chấp nhận, phải không?)
Charles

1

Nếu ứng dụng của bạn có thể chịu đựng một số dương tính giả, thì bạn nên xem xét sử dụng bộ lọc Bloom .

Diễn giải của Wikipedia: Bộ lọc Bloom là cấu trúc dữ liệu xác suất hiệu quả về không gian, được sử dụng để kiểm tra xem một phần tử có phải là thành viên của tập hợp hay không. Dương tính giả là có thể, nhưng tiêu cực sai thì không. Các yếu tố có thể được thêm vào tập hợp, nhưng không được loại bỏ. Càng nhiều yếu tố được thêm vào tập hợp, xác suất dương tính giả càng lớn.


Của tôi không thể, nhưng +1 cho một cấu trúc dữ liệu tuyệt vời.
Charles
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.