Ho bisogno di trovare l'indice di un elemento in std :: set. Questo indice può essere visualizzato come la distanza dell'iteratore dall'inizio. Un modo può essere:distanza tra std :: set begin() e std :: set iterator in O (logn)
for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);
Questo richiede chiaramente O (n). Ma sappiamo che la distanza dalla radice in un albero di ricerca binario implementato dall'insieme internamente può essere trovata nel tempo O (log n).
È il loro modo di implementare lo stesso per trovare l'indice nel tempo O (log n) nel set C++?
Perché si devono l'indice? – paulm
Sei sicuro che sia possibile trovare la distanza in tempo 'O (log n)' in un albero di ricerca binario? 'set' è in genere un albero rosso-nero, che non ha molte informazioni su ciascun nodo su quanti elementi sono rispettivamente nei loro sottogruppi sinistro e destro. Ricorda che non stai cercando la distanza direttamente dalla radice, stai cercando il numero totale di foglie a sinistra della foglia che hai. –
@SteveJessop: Ohh, quindi il loro non è un modo per calcolare l'indice in O (logn) nell'albero R-B, allora? – divanshu