Tôi (thật ngu ngốc hóa ra) tự tin rằng câu trả lời cho câu hỏi này là không. Vậy tại sao tôi hỏi?
Bởi vì Tiến sĩ Aleksandar Prokopec tại EPFL trong khóa học lập trình song song của mình giới thiệu một cấu trúc dữ liệu mà ông khẳng định các thuộc tính khác nhau. Nếu các thuộc tính này giữ thì dường như tôi có thể xây dựng một cây nhị phân cân bằng trong thời gian tốt hơn .
Tôi không tin điều này vì vậy tôi tự hỏi lỗ hổng trong suy nghĩ của tôi ở đâu.
Cấu trúc dữ liệu là danh sách cây conc . Ở dạng chuẩn, nó trông giống như một cây nhị phân bình thường và đi kèm với một concat
thao tác đảm bảo bất biến rằng các nhánh con bên trái và bên phải của bất kỳ nút nào không bao giờ khác nhau về chiều cao nhiều hơn một. Như mong đợi concat
có độ phức tạp .
Nhưng có một biến thể xây dựng của danh sách cây được gọi là Append
danh sách. Biến thể này cho phép chênh lệch chiều cao tạm thời trong các cây con nhiều hơn một. Khấu trừ thời gian bổ sung được yêu cầu cho biến thể này.
Vì vậy, có vẻ như nối thêm phần tử phải có độ phức tạp là .
Tuy nhiên, một đặc điểm của biến thể này là bất cứ khi nào là lũy thừa của hai thì kết thúc bằng một cây nhị phân cân bằng hoàn chỉnh (chứa tất cả các phần tử được chèn cho đến nay). Vì vậy, trong khi sự mất cân bằng tạm thời được cho phép, cây trở nên cân bằng mỗi sức mạnh của 2 lần chèn.
Trong biến thể này, một lớp nút mới, được gọi là Append
các nút, được giới thiệu và đó là các nút có cây con được phép có chiều cao khác nhau nhiều hơn một. Tuy nhiên, cứ sau tất cả các nút tạm thời như vậy sẽ bị loại bỏ.
Các trang Wikipedia trang mô tả các thuật toán khá ngắn gọn (xem mô tả về các cấu trúc dữ liệu cơ bản và các append
phương pháp đặc biệt).
Vậy khi nào là một sức mạnh của hai chi phí của chúng tôi để chèn các yếu tố là và chúng tôi đã xây dựng một cây nhị phân cân bằng. Hoặc có vẻ như vậy.
Trong một câu hỏi riêng tôi đã hỏi một cách hiệu quả "nếu tôi có thể nêu số bước cho một thuật toán cho các giá trị nhất định của, vd , Ở đâu là một số nguyên, điều này có đủ để cho phép tôi nêu độ phức tạp cho tất cả các giá trị của ? "
Tôi có thể thấy từ câu trả lời của Yuval Filmus rằng câu trả lời là không, nhưng đó là "trong nhiều trường hợp chúng ta mong đợi trở nên đơn điệu trong . Trong trường hợp đó, việc khấu trừ không giữ được. "
Vì vậy, dường như trong trường hợp này nếu chèn các yếu tố có độ phức tạp và mọi thứ các phần tử Tôi có một cây nhị phân cân bằng thì chi phí xây dựng cây nhị phân cân bằng với cách tiếp cận biến thể cây này phải là .
Vậy có gì sai ở đây? Thành thật mà nói tôi không thể thấy được khấu haochắp thêm thời gian yêu cầu cho biến thể này. Tôi có thể thấy rằng thường xuyên chèn thêm có chi phínhưng khi nhìn vào những gì đang xảy ra với các Append
nút tạm thời , chi phí chèn tổng thể sẽ bị khấu hao.
Nếu đây là trường hợp sau đó xây dựng cây nhị phân cân bằng của chúng tôi có một không ngạc nhiên Giá cả.
Xin lỗi vì một câu hỏi dài như vậy và xin lỗi vì đã không đi sâu vào chi tiết về thuật toán được đề cập - thay vào đó, khiến bạn phải tìm kiếm trên Wikipedia.
append
hoạt động.