Cấu trúc dữ liệu cây đồng thời không khóa, cập nhật liên tục?


20

Gần đây tôi đã đọc một chút tài liệu và đã tìm thấy một số cấu trúc dữ liệu khá thú vị.

Tôi đã nghiên cứu nhiều phương pháp khác nhau để có được thời gian cập nhật xuống đến thời gian cập nhật trường hợp xấu nhất [1-7].O(1)

Gần đây tôi bắt đầu xem xét các cấu trúc dữ liệu không khóa, để hỗ trợ truy cập đồng thời hiệu quả.

Có bất kỳ kỹ thuật thời gian cập nhật trường hợp xấu nhất nào được sử dụng trong việc thực hiện các cấu trúc dữ liệu không khóa?O(1)

Tôi hỏi vì; đối với tôi, chúng có vẻ như là sự mở rộng thực tế rõ ràng của "sự nâng cao lý thuyết" này.


  1. Tarjan, Robert Endre. Cập nhật một cây tìm kiếm cân bằng trong các phép quay O (1). 5 (1983): 253 - 257.

  2. Driscoll, JR, N Sarnak, DD Sleator và RE Tarjan. Cấu trúc dữ liệu tạo ra liên tục. Liên tục trong tiến trình của Hội nghị chuyên đề ACM hàng năm lần thứ mười tám về lý thuyết tính toán, 109 phản 121. STOC '86. New York, NY, Hoa Kỳ: ACM, 1986.

  3. Levcopoulos, C. và Mark H. Overmars. Cây A tìm kiếm cân bằng với O (1) Thời gian cập nhật trường hợp xấu nhất. 26, không 3 (tháng 11 năm 1988): 269 Từ 277.

  4. Hạm đội, Rudolf. Cây tìm kiếm cân bằng đơn giản với thời gian cập nhật trường hợp xấu nhất O (1)

  5. Dietz, Paul F và Rajeev Raman. Căng A Thời gian cập nhật liên tục Cây tìm kiếm ngón tay. Thông tin xử lý thư 52, không. 3 (1994): 147 - 154.

  6. Lagogianni, George, Christos Makris, Yannis Panagis, Spyros Sioutas, và Kostas Tsichlas. Cây mới tìm kiếm cân bằng động với thời gian cập nhật liên tục trong trường hợp xấu nhất. J. J. Autom. Lang. Chải. 8, không 4 (Tháng 7/2003): 607 bóng632.

  7. Brodal, Gerth Stølting, George Lagogianni, Christos Makris, Athanasios Tsakalidis, và Kostas Tsichlas. Cây tìm kiếm tối ưu ngón tay trong máy con trỏ. J. J. Comput. Hệ thống. Khoa học 67, không 2 (Tháng 9/2003): 381 Vang418.


2
Vui lòng xem xét việc thêm liên kết đến các giấy tờ như một phép lịch sự cho những người muốn điều tra vấn đề của bạn.
Raphael

3
Được rồi, thêm vào các liên kết đến các bài viết tương ứng.
TẠI

1
Tôi đề nghị đăng lại tại cstheory.SE (có liên kết quay lại đây) nếu bạn không nhận được phản hồi hữu ích sớm.
JeffE


Tôi đã sử dụng thư viện cấu trúc dữ liệu không khóa thực tế trước đây. Họ có một số hỗ trợ của cấu trúc dữ liệu cây không khóa. Có lẽ có những gì bạn đang tìm kiếm.
Reza

Câu trả lời:


4

không giúp ích gì cho chính nó. Trong cấu trúc dữ liệu không khóa, cần phải có một trường hợp nguyên tử duy nhất khi cấu trúc dữ liệu của bạn thay đổi. Tất cả cácbất biến đại diệncần phải có hiệu lực cả ngay trước và ngay sau nguyên tử đó.Ôi(1)

Điều này có nghĩa là nếu bạn đang thực hiện sửa đổi cấu trúc dữ liệu, đặc điểm quan trọng là bạn có thể thực hiện tất cả các mod trên cấu trúc dữ liệu riêng tư và sau đó trao đổi trong các sửa đổi trong một lệnh nguyên tử.

Khóa tự do thường dễ nhất khi cấu trúc dữ liệu của bạn là bất biến ( hoàn toàn là chức năng ). Bạn chỉ cần giữ một con trỏ chung cho phiên bản hiện tại của cấu trúc dữ liệu. Độc giả không cần phải khóa bất cứ điều gì. Sửa đổi cấu trúc dữ liệu được thực hiện bằng cách hoán đổi con trỏ toàn cầu sang cấu trúc dữ liệu bất biến này sang cấu trúc dữ liệu bất biến khác.

Ví dụ: nếu bạn có một cây cân bằng hoàn toàn chức năng, bạn:

  1. Ghi con trỏ toàn cầu hiện tại vào gốc của cây.
  2. Tạo một cây mới chèn hoặc xóa một nút. (Đây là logarit về thời gian và không gian trong số lượng nút hiện có trong cây và liên quan đến việc tạo các nút mới từ điểm sửa đổi cho đến gốc và chỉ trỏ mọi thứ mới vào các phần cũ của phiên bản trước của cấu trúc dữ liệu. )
  3. Nguyên tử so sánh và trao đổi con trỏ toàn cầu với thư mục gốc. (Lưu ý rằng điều này có thể thất bại nếu một sửa đổi khác đã xảy ra giữa thời điểm bạn ghi lại con trỏ gốc cũ và bây giờ. Nếu điều này xảy ra, bạn quay lại bước 1 và thử lại. Đây được gọi là "điều khiển đồng thời lạc quan.")

Lưu ý rằng phần quan trọng nhất là những gì tôi đã nói ở trên về việc cần duy trì bất biến đại diện. Nó thường không đủ để có một thuật toán mà nguyên tử tạo ra một sự thay đổi ở giữa cây. Tại sao? Ví dụ: bạn có thể có một luồng người đọc đang trong quá trình thực hiện một giao dịch đặt hàng trước của cây. Nếu bạn sửa đổi một nút là tổ tiên của nút mà họ hiện đang đọc thì bạn sẽ vô hiệu hóa các điều kiện tiên quyết mà họ nghĩ rằng họ đã thực thi. Người đọc cần có khả năng làm việc với cấu trúc dữ liệu chính xác như trước khi bạn thực hiện thay đổi hoặc chính xác như sau khi bạn thực hiện thay đổi. Không phải cái gì ở giữa.

Ôi(tôiog(N))Ôi(N)


Tôi nghĩ rằng các kỹ thuật chờ hoạt động, ví dụ như so sánh và trao đổi, thường được gọi là "khóa miễn phí" vì vậy có một số cách, ngay cả trong cài đặt có thể thay đổi.
Raphael

Tôi không quen với thuật ngữ chờ hoạt động (và Google không giúp đỡ). (Nếu bạn đang nói về công việc của Kogan và Petrank, thì đó là cách trình bày để biến các thuật toán không khóa thành chờ đợi.) Tôi đã thêm một chỉnh sửa về cách bạn có thể đối phó với khả năng biến đổi để tự do khóa nói chung.
Logic lang thang

Bằng cách "chờ đợi tích cực" tôi có nghĩa là một cái gì đó giống như while ( !P ) { noOp(); } doWork();nơi noOpcó thể là một sleephoặc tương tự.
Raphael

Trong phần Chỉnh sửa , bạn đã đề cập đến kỹ thuật làm cho cấu trúc dữ liệu có thể thay đổi không bị khóa. Như đã chỉ ra, chúng tôi sao chép toàn bộ cấu trúc dữ liệu, tạo mod cho bản sao và sau đó sử dụng nguyên hàm CAS. Tuy nhiên, làm thế nào để thực hiện các Copybước nguyên tử? Nó có vẻ là một vấn đề khó khăn khác atomic snapshot.
hengxin

@hengxin: nghĩ về nguyên thủy CAS như là một toán tử "xuất bản". Trước khi cấu trúc dữ liệu được công bố, chỉ các luồng thực hiện các sửa đổi có quyền truy cập vào nó. Sau khi cấu trúc dữ liệu được công bố, nó là bất biến. Bước sao chép không cần phải là nguyên tử vì điều duy nhất một luồng có thể sao chép là phiên bản đã xuất bản, không thay đổi. Nếu hai luồng đồng thời cố gắng biến đổi, cả hai đều sao chép cùng một cấu trúc dữ liệu bất biến, sửa đổi các bản sao cục bộ của chúng và sau đó một trong các hoạt động CAS thành công và một hoạt động khác thất bại. Một trong những thất bại cần phải recopy và cập nhật.
Logic lang thang
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.