Tôi nghĩ rằng tôi biết câu trả lời và độ phức tạp tối thiểu là O (nlogn).Chuyển đổi heap thành BST trong thời gian O (n)?
Nhưng có cách nào để tôi có thể tạo cây tìm kiếm nhị phân từ một đống trong O (n) phức tạp không?
Tôi nghĩ rằng tôi biết câu trả lời và độ phức tạp tối thiểu là O (nlogn).Chuyển đổi heap thành BST trong thời gian O (n)?
Nhưng có cách nào để tôi có thể tạo cây tìm kiếm nhị phân từ một đống trong O (n) phức tạp không?
Không có thuật toán để xây dựng BST từ một đống trong thời gian O (n). Lý do cho điều này là các phần tử n đã cho, bạn có thể xây dựng một đống từ chúng trong thời gian O (n). Nếu bạn có BST cho một tập hợp các giá trị, bạn có thể sắp xếp chúng trong thời gian O (n) bằng cách thực hiện quá trình truyền tải theo thứ tự. Nếu bạn có thể xây dựng một BST từ một đống trong thời gian O (n) thời gian, sau đó bạn có thể có một O (n) thuật toán sắp xếp bởi
Do đó, nó không phải là có thể chuyển đổi một đống đến một BST trong thời gian O (n) thời gian (hoặc trong o (n log n) thời gian, nơi o là little-o notation). Tuy nhiên, có thể xây dựng một BST từ một đống trong thời gian O (n log n) bằng cách lặp đi lặp lại giá trị lớn nhất từ BST và chèn nó như là nút ngoài cùng bên phải trong cây. (Bạn sẽ cần phải lưu trữ một con trỏ ở đó để truy cập nhanh, chỉ cần chèn vào gốc lặp lại sẽ có thời gian O (n).)
Hy vọng điều này sẽ hữu ích!
+1; bằng chứng giảm đẹp bởi mâu thuẫn –
Cảm ơn bạn! nó đã giúp tôi rất nhiều! – user1940350
Cảm ơn! Giúp tôi quá :) – cnmesr
làm cho BST từ Heap trong O (n) là hiệu quả hơn sau đó O (nlogn). – user1940350
Ồ, sai lầm của tôi, xin lỗi. – hd1