Tôi muốn bạn cho tôi một gợi ý để chứng minh bài tập này từ sách Cormen: "Chứng minh rằng bất kể nút nào chúng ta bắt đầu ở cây tìm kiếm nhị phân chiều cao h, k gọi liên tiếp đến TREE-SUCCESSOR mất thời gian O (k + h). "Làm cách nào để chứng minh hoạt động này trên cây tìm kiếm nhị phân?
5
A
Trả lời
6
- Hãy
x
là nút khởi động vàz
là nút kết thúc sauk
cuộc gọi liên tiếp để TREE-NGƯỜI KẾ. - Hãy để
p
là đường dẫn đơn giản giữax
vàz
bao gồm. - Hãy để
y
là tổ tiên chung củax
vàz
rằng lượt truy cậpp
. - Độ dài
p
tối đa là2h
, làO(h)
. - Cho phép
output
là các phần tử mà giá trị của chúng nằm trong khoảng từx.key
đếnz.key
. - Kích thước của
output
làO(k)
. - Trong việc thực hiện các
k
cuộc gọi liên tiếp để TREE-NGƯỜI KẾ, các nút có trongp
đang truy cập, và bên cạnh các nútx
,y
vàz
, nếu một cây con của một nút trongp
được truy cập sau đó tất cả các phần tử của nó nằm trongoutput
. - Vì vậy, thời gian chạy là
O(h+k)
.
3
Gợi ý: làm việc ra một ví dụ nhỏ, quan sát kết quả, cố gắng ngoại suy lý do.
Để bắt đầu, dưới đây là một số điều cần xem xét.
Bắt đầu tại một nút nhất định, k cuộc gọi thành công đến Tree-Succcesor consititutes đi bộ một phần cây. Có bao nhiêu nút (ít nhất và nhiều nhất) các lượt truy cập đi bộ này? (Gợi ý: Hãy suy nghĩ về khóa (x)). Hãy nhớ rằng một cạnh được truy cập nhiều nhất hai lần (tại sao?).
Gợi ý cuối cùng: Kết quả là O(2h+k)
.
+1
Nút được truy cập nhiều nhất ba lần. –
'Trong việc thực hiện các cuộc gọi liên tiếp tới TREE-SUCCESSOR, các nút trong p được truy cập, và bên cạnh các nút x, y và z' Bạn có thể giải thích' y' ở đây là gì không? –
Tôi đã thêm 'y' vào câu trả lời. –