Tôi cần tìm chỉ mục của phần tử trong std :: set. Chỉ số này có thể được hình dung như là khoảng cách của trình lặp từ đầu. Một cách có thể là:khoảng cách giữa std :: set begin() và std :: set iterator trong O (logn)
for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);
Điều này rõ ràng mất thời gian O (n). Nhưng chúng ta biết rằng khoảng cách từ gốc trong cây tìm kiếm nhị phân như được thực hiện bởi tập hợp nội bộ có thể được tìm thấy trong thời gian O (log n).
Có cách nào để thực hiện tương tự để tìm chỉ mục trong thời gian O (log n) trong C++ không?
Tại sao bạn cần chỉ mục? – paulm
Bạn có chắc chắn rằng có thể tìm khoảng cách trong thời gian 'O (log n)' trong cây tìm kiếm nhị phân không? 'set' thường là một cây màu đỏ-đen, không có nhiều thông tin ở mỗi nút về số lượng phần tử nằm trong các cạnh trái và phải của nó tương ứng. Hãy nhớ rằng bạn không tìm kiếm khoảng cách trực tiếp từ gốc, bạn đang tìm kiếm tổng số lá ở bên trái của lá bạn có. –
@SteveJessop: Ohh, vì vậy họ không phải là cách nào để tính toán chỉ mục trong O (logn) trong cây R-B sau đó? – divanshu