Entfernung zwischen std::set begin() und std::set iterator in O(logn)

Brauche ich, um zu finden, die den index eines Elements in std::set. Dieser index kann dargestellt werden, wie der Abstand der iterator von Anfang an.
Ein Weg kann sein:

for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);

Diese eindeutig in O(n) Zeit. Aber wir wissen, dass der Abstand von der Wurzel, die in einem binären Suchbaum durchgeführt durch die intern festgelegt werden können, finden sich in O(log n) Zeit.

Ist deren irgendeiner Weise zu implementieren, die gleichen zu finden, der index in O(log n) Zeit in C++ festlegen?

  • Warum würden Sie müssen den index?
  • Sind Sie sicher, dass es möglich ist, um den Abstand in O(log n) Zeit in einem binären Suchbaum? set ist in der Regel ein rot-schwarz-Baum, die nicht über eine Menge von Informationen auf den einzelnen Knoten, über wie viele Elemente sind in Ihrer linken und rechten Teilbäume jeweils. Denken Sie daran, dass Sie sind nicht auf der Suche für die Entfernung direkt aus der Wurzel, Sie suchen für die Gesamtzahl der Blätter auf der linken Seite des Blattes, die Sie haben.
  • Ohh, so dass Ihr nicht jede Möglichkeit zur Berechnung der index in O(logn) in der R-B-Baum dann?
InformationsquelleAutor divanshu | 2012-09-21
Schreibe einen Kommentar