Câu hỏi liên quan: Time Complexity of InOrder Tree Traversal of Binary Tree O(N)?, tuy nhiên nó dựa trên một traversal qua đệ quy (do đó trong không gian O (log N)) trong khi vòng lặp cho phép tiêu thụ chỉ O (1) không gian.Độ phức tạp truyền tải trong đơn hàng trong cây tìm kiếm nhị phân (sử dụng trình vòng lặp)?
Trong C++, thường có yêu cầu gia tăng trình lặp của vùng chứa tiêu chuẩn là hoạt động O (1). Với hầu hết các thùng chứa nó được chứng minh một cách trivially, tuy nhiên với map
và như vậy, nó có vẻ khó khăn hơn một chút.
- Nếu một
map
được thực hiện như một bỏ qua danh sách, sau đó kết quả sẽ rõ ràng - Tuy nhiên chúng thường được thực hiện như cây đỏ-đen (hoặc ít nhất là cây tìm kiếm nhị phân)
Vì vậy, trong quá trình truyền tải theo thứ tự có những khoảnh khắc mà giá trị "tiếp theo" không dễ dàng đạt được. Ví dụ bạn nên chỉ vào lá dưới cùng bên phải của cây con trái, sau đó nút tiếp theo để đi ngang là gốc, cách đó depth
bước.
Tôi đã thử "chứng minh" rằng độ phức tạp về thuật toán (về "bước") là được phân bổ O (1), có vẻ như không sao. Tuy nhiên tôi chưa có trình diễn. Đây là một sơ đồ nhỏ tôi truy tìm cho một cây với độ sâu 4, các con số (ở vị trí của các nút) đại diện cho số bước đi từ nút đó đến nút tiếp theo trong quá trình truyền tải trong đơn hàng. :
3
2 2
1 1 1 1
1 2 1 3 1 2 1 4
Lưu ý: lá bên phải có chi phí 4 trong trường hợp đây là cây con của cây lớn hơn.
Tổng là 28, cho tổng số nút là 15: vì vậy chi phí thấp hơn 2 cho mỗi nút, trung bình (nếu nó nắm giữ) sẽ là chi phí phân bổ hợp lý. Vì vậy:
- Trong quá trình truyền tải theo thứ tự, gia tăng vòng lặp thực sự O (1) cho cây tìm kiếm nhị phân cân bằng (và đầy đủ)?
- Có thể mở rộng kết quả để che các cây tìm kiếm nhị phân không đầy đủ không?
Không chắc chắn tôi đang theo dõi, "nút tiếp theo" của lá thứ hai từ trái - tại sao lại là 4? nút tiếp theo sau khi nó là ông bà của nó khi thực hiện việc truyền tải theo thứ tự (vì vậy tôi chỉ mong đợi 2), cùng áp dụng sau này cho các số 4 khác. Nó là một sai lầm hoặc tôi hiểu lầm sơ đồ? : \ – amit
Bạn có nghĩa là bộ nhớ tổng thể hoặc thời gian phân bổ 'O (1)' để tăng bộ lặp không? trong quá trình truyền tải theo thứ tự không thể là tổng thời gian 'O (1)'. – IVlad
@IVlad: Tôi có nghĩa là O (1) cho gia tăng, rõ ràng! Câu hỏi sẽ khá ngớ ngẩn nếu không, hãy để tôi sửa lại điều đó;) –