Chức năng tiềm năng của cây Splay: tại sao tổng hợp các bản ghi của các kích thước?


16

Tôi đang dạy một khóa học về cấu trúc dữ liệu và sẽ bao phủ cây splay vào đầu tuần tới. Tôi đã đọc bài báo về cây splay nhiều lần và quen thuộc với phân tích và trực giác đằng sau cấu trúc dữ liệu. Tuy nhiên, tôi dường như không thể tìm thấy một trực giác vững chắc cho chức năng tiềm năng mà Sleator và Tarjan sử dụng trong phân tích của họ.

Phân tích hoạt động bằng cách gán cho mỗi phần tử trong cây một trọng số tùy ý , sau đó đặt kích thước của một nút thành tổng trọng số của các nút trong cây con gốc ở . Sau đó, họ lấy nhật ký của giá trị này để lấy thứ hạng của nút, vì vậy . Cuối cùng, hàm tiềm năng của cây được định nghĩa là tổng các cấp bậc của tất cả các nút. s ( x ) x r ( x ) r ( x ) = log s ( x )wis(x)xr(x)r(x)=logs(x)

Tôi hiểu rằng chức năng tiềm năng này hoạt động chính xác và tôi có thể theo dõi phân tích, nhưng tôi không hiểu tại sao họ lại chọn tiềm năng này. Ý tưởng về việc gán kích thước cho mỗi nút có ý nghĩa với tôi, vì nếu bạn tổng hợp các kích thước, bạn sẽ có được độ dài đường dẫn có trọng số của cây. Tuy nhiên, tôi không thể hiểu tại sao họ quyết định lấy nhật ký của các trọng số và sau đó tổng hợp chúng lại - tôi không thấy bất kỳ thuộc tính tự nhiên nào của cây mà điều này tương ứng.

Liệu chức năng tiềm năng của cây splay có tương ứng với một số tính chất tự nhiên của cây không? Có một lý do cụ thể nào khác, ngoài "nó hoạt động", rằng họ sẽ chọn tiềm năng này? (Tôi đặc biệt tò mò vì bộ khóa học này lưu ý rằng "phân tích là ma thuật đen. [N] o ý tưởng đã được khám phá như thế nào")

Cảm ơn!


Tôi cũng đã nghe lời giải thích "đó là ma thuật đen" trước đây. Bạn đã thử gửi email cho Sleator và Tarjan chưa?
jbapple

@jbapple Tôi chưa gửi email cho họ, vì tôi hy vọng rằng "cộng đồng nói chung" sẽ có thể giúp đỡ. Tôi cũng hình dung rằng việc đưa ai đó về công việc họ đã làm 30 năm trước có thể không nhất thiết phải đưa ra phản hồi. :-)
templatetypedef

Tôi không quen thuộc lắm với nó, nhưng tôi chỉ nhìn vào tờ giấy rất thô sơ, tôi nghĩ lý do duy nhất là họ muốn có một thay đổi nhỏ bởi các chức năng tiềm năng sau khi hoạt động splay, ví dụ: nếu chúng ta thay thế bằng hoặc với dường như mọi thứ vẫn hoạt động tốt (tôi không chứng minh điều đó nhưng dường như chỉ cần một phép toán đơn giản). Nhưng nếu chúng ta để nó dưới dạng , thì phân tích khấu hao trong khi đó là chính xác, nhưng nó không phải là một hướng trên tốt (đại loại như ). Nó hoàn toàn không liên quan đến bất kỳ tài sản nào của cây. log log l o g s ( m + n ) 2loglogloglogs(m+n)2
Saeed

Tôi đã luôn đóng hộp thứ hạng của x là "độ sâu của cây tìm kiếm nhị phân lý tưởng có chứa hậu duệ của x", nhưng đó là một thứ ghi nhớ nhiều hơn là trực giác hữu ích.
Jeffε

Câu trả lời:


13

Làm thế nào để đưa ra tiềm năng tổng hợp

Chúng ta hãy xem xét thuật toán BST mà với mỗi lần truy cập cho phần tử x , nó chỉ sắp xếp lại các phần tử trong đường dẫn tìm kiếm P của x được gọi là đường dẫn trước, vào một số cây được gọi là cây sau. Đối với bất kỳ thành phần một , chúng ta hãy s ( một )s ' ( một ) được kích thước của cây con bén rễ tại một trước và sau khi sắp xếp lại tương ứng. Vì vậy, s ( một )s ' ( một ) có thể khác nhau khi và chỉ khi một P .AxPxmộtS(một)S'(một)mộtS(một)S'(một)mộtP

Hơn nữa, chỉ sắp xếp lại liên tục nhiều yếu tố trong đường dẫn tìm kiếm bất cứ lúc nào. Hãy gọi loại thuật toán này là thuật toán "cục bộ". Ví dụ, cây splay là cục bộ. Nó chỉ sắp xếp lại tối đa 3 yếu tố tại một thời điểm theo zig, zigzig và zigzag.Một

Bây giờ, bất kỳ thuật toán cục bộ nào tạo ra "nhiều" lá trong cây sau, như cây splay, đều có thuộc tính tốt sau đây.

Chúng ta có thể tạo ánh xạ sao chof:PP

  1. Có tuyến tính nhiều , nơi s ' ( f ( một ) ) s ( một ) / 2 .mộtPS'(f(một))S(một)/2
  2. Có liên tục nhiều , nơi s ' ( f ( một ) ) có thể lớn nhưng trivially tại hầu hết các n .mộtPS'(f(một))n
  3. Các phần tử khác , s ( f ( a ) ) s ( a ) .mộtPS'(f(một))S(một)

Chúng ta có thể thấy điều này bằng cách mở ra sự thay đổi của đường dẫn tìm kiếm. Bản đồ thực sự khá tự nhiên. Bài viết này, Một cái nhìn hình học toàn cầu về Splaying , cho thấy chính xác các chi tiết làm thế nào để xem quan sát trên.

Sau khi biết thực tế này, việc chọn tiềm năng tổng hợp là rất tự nhiên. Bởi vì chúng tôi có thể sử dụng thay đổi tiềm năng của các yếu tố loại 1 để thanh toán cho toàn bộ sắp xếp lại. Hơn nữa, đối với các yếu tố loại khác, chúng ta phải trả tiền cho sự thay đổi tiềm năng bằng cách nhiều nhất là logarit. Do đó, chúng ta có thể lấy được logarit chi phí khấu hao.

Tôi nghĩ lý do tại sao mọi người nghĩ rằng đây là "ma thuật đen" là vì phân tích trước đó không "mở ra" sự thay đổi chung của con đường tìm kiếm và xem điều gì thực sự xảy ra trong một bước. Thay vào đó, họ cho thấy sự thay đổi trong tiềm năng của từng "biến đổi cục bộ", và sau đó cho thấy những thay đổi tiềm năng này có thể được kính thiên văn kỳ diệu.

PS Bài báo thậm chí còn cho thấy một số hạn chế của tiềm năng tổng số nhật ký. Đó là, người ta có thể chứng minh sự thỏa mãn của bổ đề truy cập thông qua tiềm năng tổng số nhật ký chỉ với thuật toán cục bộ.

Giải thích tiềm năng tổng hợp của nhật ký

Có một cách khác để xác định tiềm năng của BST trong bài báo của Georgakopoulos và McClurkin , về cơ bản giống như tiềm năng của nhật ký trong bài báo của Sleator Tarjan. Nhưng điều này mang lại trực giác tốt cho tôi.

w(bạn)bạnW(bạn)bạnbạn

Bây giờ, thay vì xác định thứ hạng trên các nút, chúng tôi xác định thứ hạng cho các cạnh, mà chúng được gọi là hệ số tiến trình .

pf(e)= =đăng nhập(W(bạn)/W(v)).

S

Φ(S)= =ΣeSpf(e).

(bạn,v)bạnvW(bạn)/W(v)

Quan sát rằng đây là tiềm năng của Sleator Tarjan gần như bằng nhau và nó là phụ gia trên các đường dẫn.

chỉnh sửa: Hóa ra định nghĩa thay thế này và trực giác đằng sau nó đã được mô tả từ lâu bởi Kurt Mehlhorn. Xem cuốn sách "Cấu trúc dữ liệu và thuật toán" của ông Tập I, Phần III. 6.1.2 Cây Splay, trang 263 - 274.

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.