Hợp nhất hai cây tìm kiếm nhị phân


17

Tôi đang tìm kiếm một thuật toán để hợp nhất hai cây tìm kiếm nhị phân có kích thước và phạm vi tùy ý. Cách rõ ràng mà tôi sẽ thực hiện về việc này là tìm toàn bộ các cây con có phạm vi có thể vừa với một nút bên ngoài tùy ý trong cây khác. Tuy nhiên, thời gian chạy tệ nhất cho loại thuật toán này dường như là theo thứ tự O(n+m)vị trí nmkích thước của mỗi cây tương ứng.

Tuy nhiên, tôi đã nói rằng điều này có thể được thực hiện ở O(h)đâu, hchiều cao của cây với chiều cao lớn hơn. Và tôi hoàn toàn lạc lối về cách điều này là có thể. Tôi đã thử trải nghiệm xoay một cây trước, nhưng xoay cây vào cột sống đã là O (h).


Tôi không biết erick tôi cũng có câu hỏi tương tự.

Công bằng mà nói, đây là một câu hỏi được đưa ra trong bài tập về nhà Thuật toán. Hóa ra O (h) quá khắt khe trong thời gian chạy, vì câu hỏi quên cung cấp thêm thông tin cần thiết: Tất cả các khóa từ một cây đều nhỏ hơn tất cả các phím trong cây bên phải.
efritz

Tôi có thiếu thứ gì không, việc hợp nhất cây nhị phân có dễ dàng thực hiện O(log n)với chức năng nút di chuyển đơn giản không?
TẠI

@AT Có, nhưng chúng tôi không biết rằng các khóa từ một BST này loại trừ lẫn nhau.
efritz

1
Đây là một cây màu đỏ-đen, không phải là BST. Một màu đen đỏ (cũng như cây AVL và đống) là những loại cây đặc biệt giữ một tài sản giới hạn chiều cao. BST Vanilla có thể là một cột sống duy nhất. Hãy thử chèn một dãy số không giảm hoặc không tăng vào BST và bạn sẽ thấy chiều cao của những cây này thực sự n. Chỉ các cây nhị phân đầy đủ hoặc hoàn chỉnh mới có logarit chiều cao so với tổng số nút của chúng.
efritz

Câu trả lời:


24

Trong ArXiv: 1002.4248 , John Iacono và zgür zkan mô tả một thuật toán tương đối đơn giản để hợp nhất hai cây tìm kiếm nhị phân trong thời gian khấu hao ; phân tích là phần khó. [ Cập nhật: Như Joe quan sát chính xác trong câu trả lời của mình, thuật toán này là do Brown và Tarjan.] Họ cũng mô tả cấu trúc dữ liệu từ điển phức tạp hơn, dựa trên danh sách bỏ qua sai lệch, hỗ trợ hợp nhất trong thời gian khấu hao .O ( log n )O(log2n) O(logn)

Mặt khác, một trường hợp xấu nhất bị ràng buộc bởi là không thể. Hãy xem xét hai cây tìm kiếm nhị phân có nút, một lưu trữ các số nguyên chẵn giữa và , cây còn lại lưu các số nguyên lẻ trong khoảng từ đến . Hợp nhất hai cây tạo ra một cây tìm kiếm nhị phân mới lưu trữ tất cả các số nguyên trong khoảng từ đến . Trong bất kỳ cây nào như vậy, một phần không đổi của các nút có tính chẵn lẻ khác với bố mẹ của chúng. (Bằng chứng: Cha mẹ của một lá lẻ phải là chẵn.) Vì vậy, việc hợp nhất các cây chẵn và lẻ đòi hỏi phải thay đổi con trỏ .n 2 2 n 1 2 n - 1 1 2 n Ω ( n )O(logn)n22n12n112nΩ(n)


Một lưu ý: nếu tôi đã đọc mô tả trong bài viết này một cách chính xác, những cây này không hỗ trợ chèn và xóa. Hợp nhất chỉ tuân theo quy trình hợp nhất các cây tìm kiếm ngón tay (được mô tả trong câu trả lời của Joe). Tập hợp các thao tác bị hạn chế cho phép phân tích tốt hơn O ( n lg mO(lg2n)một. O(nlgmn)
jbapple

1
Phân tích được cải thiện là do khấu hao, không phải là hạn chế của các hoạt động được phép. Việc chèn và xóa có thể được hỗ trợ bằng các phần tách và hợp nhất (thực sự là "tham gia") trong cùng thời gian khấu hao . O(logn)
Jeffε

Vì tò mò, thời gian có bị ảnh hưởng nếu cây được lưu trữ trong mảng thay vì danh sách liên kết (mà tôi cho là ý của bạn khi nói "thay đổi ... con trỏ ")? Ω(n)
chia sẻ vào

Theo mặc định, "cây tìm kiếm nhị phân" là các cấu trúc dựa trên con trỏ (không phải là "danh sách được liên kết"); mỗi nút chỉ đến hai đứa trẻ của nó và có thể là cha mẹ của nó. Nhưng giới hạn dưới không phụ thuộc vào đại diện chính xác. Có để hợp nhất hai cây tìm kiếm nhị phân -ode, do đó, bất kỳ thuật toán dựa trên so sánh nào cũng cần ít nhất so sánh để chọn đúng. nlog2 ( 2n(2nn)nlog2(2nn)2nO(logn)
Jeffε

1
@ Jɛ E: Tôi đồng ý rằng việc chia tách và tham gia được hỗ trợ, nhưng tôi không nghĩ rằng việc tạo hoặc phá hủy cây là. Vì vậy, ví dụ, nếu tôi muốn xóa "x" khỏi bảng chữ cái, tôi không chỉ nhận "a..wyz", mà còn "x". Kích thước của vũ trụ (là , xem phần 2.1) không thay đổi. Ngoài ra, phần giới thiệu của phần 1 lưu ý rằng các bộ phải phân vùng vũ trụ, mà tôi diễn giải (có lẽ không chính xác) có nghĩa là mỗi phần tử trong vũ trụ nằm trong một số cây. Vì vậy, cách tôi đọc nó, công trình này không hoạt động trên các vũ trụ không bị ràng buộc. Đó là cách tôi nên viết bình luận của tôi ở trên. n
jbapple

9

Bạn có thể thấy tài liệu tham khảo này hữu ích: Brown và Tarjan, Thuật toán hợp nhất nhanh , trong đó các tác giả chỉ ra cách hợp nhất các cây nhị phân (AVL) cân bằng trong là tối ưu (cho thuật toán dựa trên so sánh). và là độ dài của các danh sách được sắp xếp được đại diện bởi các cây tìm kiếm nhị phân và giả định rằng .mnmnO(nlogmn)mnmn

Bạn cũng có thể thấy một cuộc thảo luận về các kỹ thuật khác nhau để hợp nhất các bộ được đặt hàng trong phần 11,5 của bài viết này trên cây tìm kiếm bằng ngón tay


2
Cả giới hạn thời gian và giới hạn dưới phù hợp giả sử rằngmn. O(nlogmn)mn
Jeffε

Tôi nghĩ rằng điều đó được ngụ ý bởi thời gian bị ràng buộc, nhưng tôi đã chỉnh sửa câu hỏi để làm cho nó rõ ràng.
Joe

0

1
Cấu trúc dữ liệu của họ hỗ trợ tham gia thời gian khấu hao O (1), không hợp nhất. Tất cả các yếu tố trong một cây phải nhỏ hơn tất cả các yếu tố trong cây kia.
Jeffε

TiTjTiTjTjTiw(Ti)=w(Tj)TjTTôiTTôiTjTTôi
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.