Là cấu trúc dữ liệu tìm kiếm xác suất hữu ích?


9

SkipList cung cấp giới hạn cho tìm kiếm dưới dạng cây cân bằng với lợi thế là không cần phải cân bằng lại. Vì SkipList được xây dựng bằng cách sử dụng các đồng xu ngẫu nhiên, các giới hạn này chỉ giữ được miễn là cấu trúc của SkipList đủ "cân bằng". Cụ thể, với xác suất đối với một số hằng số , cấu trúc cân bằng có thể bị mất sau khi chèn một phần tử.1 / n c c > 0O(logn)1/ncc>0

Giả sử tôi muốn sử dụng danh sách bỏ qua làm phụ trợ lưu trữ trong ứng dụng web có khả năng chạy mãi mãi. Vì vậy, sau một số hoạt động đa thức, cấu trúc cân bằng của SkipList rất có thể bị mất.

Là lý luận của tôi đúng? Các cấu trúc dữ liệu tìm kiếm / lưu trữ có xác suất như vậy có các ứng dụng thực tế không và nếu có thì vấn đề trên có thể tránh được như thế nào?

Chỉnh sửa: Tôi biết rằng có các biến thể xác định của SkipList, phức tạp hơn nhiều khi thực hiện so với SkipList ngẫu nhiên (cổ điển).


1
Bạn có ứng dụng cụ thể nào trong đầu?
Pratik Deoghare

Câu trả lời:


6

Tôi không nghĩ có một xác suất đa thức cho việc mất 'số dư'. Sau khi bạn chèn một phần tử vào danh sách bỏ qua, bạn xây dựng một tháp các bản sao phía trên nó bằng cách lật một đồng xu cho đến khi nó xuất hiện.

Vì vậy, bạn có các lớp với ngày càng ít các yếu tố khi bạn đạt đến đỉnh. Vì một tháp có chiều cao với xác suất , nên có một yếu tố ở độ cao với xác suất (ràng buộc liên kết) nhỏ hơn . Do đó có một phần tử ở cấp có probalitiy nhỏ hơn . Tháp có chiều cao có xác suất phụ. Đặt là mức tối đa, khi đó ta có2 - k k n / 2 k c log n 1 / n c ω ( log n ) Mk2kkn/2kclogn1/ncω(logn)M

E[M]=k1Pr(Mk)log(n)+klog(n)n/2k=log(n)+2.

Hơn nữa, ở cấp độ có phần tử với xác suất rất cao, vì đây là tổng của biến ngẫu nhiên độc lập và bạn có thể sử dụng ràng buộc của Chernov.n / 2 k nkn/2kn

Vì bạn cũng có thể chỉ ra rằng bạn chỉ thực hiện một số bước không đổi cho mỗi cấp độ (với xác suất rất cao!), Chi phí tìm kiếm là logarit.

Vì vậy, bạn sẽ phải rất xui xẻo khi kết thúc với một danh sách không cân bằng. Lưu ý rằng 'may mắn' ở đây độc lập với dữ liệu của bạn, không giống như trong các cây tìm kiếm không cân bằng. Tiền xu lật trong Danh sách bỏ qua luôn luôn là ngẫu nhiên.

Theo tôi biết, danh sách bỏ qua rất đáng quan tâm, bởi vì việc triển khai chúng dưới dạng cấu trúc tìm kiếm không khóa, tương đối dễ dàng, với những lợi ích rõ ràng. Mặt khác, cây B khá khó thực hiện dưới các truy cập đồng thời.


Độ sâu dự kiến ​​của cây tìm kiếm nhị phân cũng là logarit; Tại sao tình hình ở đây tốt hơn? (Ngoài ra, bạn cho rằng hoán vị ngẫu nhiên, đúng không?)
Raphael

2
Trong cây tìm kiếm, độ sâu phụ thuộc vào dữ liệu. Nếu bạn cho nó ăn các số ngẫu nhiên, nó có độ sâu logarit với xác suất rất cao. Tuy nhiên, trong thực tế, dữ liệu không phải là ngẫu nhiên. Danh sách bỏ qua không sử dụng dữ liệu như một nguồn ngẫu nhiên, vì vậy vấn đề này không tồn tại.
adrianN

1

Danh sách bỏ qua có các thuộc tính khác có thể làm cho chúng hấp dẫn trong các tình huống sử dụng các thao tác khác ngoài việc chèn / tra cứu / xóa.

Ví dụ, danh sách bỏ qua có cập nhật cục bộ thời gian dự kiến ​​khi biết vị trí sửa đổi. Điều này chắc chắn có thể xảy ra trong thời gian trường hợp xấu nhất với các cây tìm kiếm nhị phân cân bằng nhất định, nhưng các cấu trúc đó có xu hướng khá phức tạp để thực hiện.O ( 1 )O(1)O(1)

Ngoài ra, danh sách bỏ qua là một cách phổ biến để triển khai các cấu trúc tìm kiếm dựa trên so sánh đồng thời. Trong lịch sử, cây tìm kiếm cân bằng đã không được thực hiện cũng như dưới sự tranh chấp đồng thời cao.

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.