Per contenitori C++ STL come vector
e list
, la complessità della ricerca di elementi e l'inserimento o la rimozione di essi è autoesplicativa. Tuttavia, per il contenitore map
, anche se so dalla mia lettura che la complessità/le prestazioni di accesso e inserimento è O (log (n)), non riesco a calcolare perché. Chiaramente non capisco le mappe tanto quanto ho bisogno, quindi qualche chiarimento su questo argomento sarebbe molto apprezzato.Perché la complessità del contenitore di mappe C++ STL O (log (n))?
risposta
Gli elementi di una mappa o di un set sono contenuti in una struttura ad albero; ogni volta che esamini un nodo dell'albero, determini se l'elemento che stai cercando di trovare/inserire è minore o maggiore del nodo. Il numero di volte che devi fare questo (per un albero correttamente bilanciato) è log2 (N) perché ogni confronto elimina metà delle possibilità.
Grazie, Mark, la tua risposta è proprio ciò di cui avevo bisogno. –
@EdKing, dai un'occhiata a [alberi rosso-neri] (http://en.wikipedia.org/wiki/Red_black_tree). Solitamente sono usati per implementare std :: map. –
Come punti slavik262, le mappe vengono solitamente implementate con alberi rosso-neri, che sono auto-bilanciati. Controllare la complessità di un albero rosso-nero ad esempio nello wikipedia Non conosco alcuna implementazione di una mappa con un albero binario; se Mark Ransom ne sa uno, sarei lieto di sapere quale.
Penso che sia giusto dire che un albero rosso-nero * è * un albero binario, solo con alcuni invarianti sulla forma dell'albero e operazioni di riequilibrio per mantenerle durante l'inserimento e la cancellazione. –
- 1. O-grande complessità del c^n + n * (log n)^2 + (10 * n)^c
- 2. O (N log N) Complessità - Simile al lineare?
- 3. Complessità del STL deque :: insert()
- 4. Cosa significa O (log (log (n)))) - competitivo?
- 5. Intersezioni cerchio di calcolo in O ((n + s) log n)
- 6. Come si visualizza la differenza tra O (log n) e O (n log n)?
- 7. La complessità del tempo di fun()?
- 8. Che cos'è O (log * N)?
- 9. asintotica complessità della T (n) = T (n-1) + 1/n
- 10. C++ stringa :: trovare la complessità
- 11. Spoj ARRAYSUB: O (n) Complessità Approach
- 12. Quale contenitore STL usare?
- 13. Complessità del tempo Java O (n^2/3)
- 14. La complessità temporale del seguente algoritmo?
- 15. Contenitore STL C++ adatto per trovare l'ennesimo elemento nell'elenco dinamico ordinato?
- 16. Differenza tra O (n) e O (log (n)) - che è migliore e che cosa è esattamente O (log (n))?
- 17. Qual è la migliore complessità del puzzle N-Queens?
- 18. trova mediana in O (log n)
- 19. Tipologie di piastre per contenitore compatibile STL
- 20. Perché la complessità spaziale di questo algoritmo è O (1)
- 21. Perché l'unisci esegue il caso peggiore nel tempo di esecuzione O (n log n)?
- 22. C equivalente di C++ STL
- 23. Complessità del tempo di random.sample
- 24. coseno somiglianza tra vettori, con <O (n^2) complessità
- 25. Contenitore stl riferito a Typedef
- 26. Perché non l'operatore [] const per le mappe STL?
- 27. Contenitore di mappe hash efficiente in Haskell?
- 28. C++ std :: complessità unordered_map
- 29. Qual è la differenza tra '\ n' o "\ n" in C++?
- 30. STL C++: quale metodo di iterazione su un contenitore STL è migliore?
hai visto questo? http://stackoverflow.com/a/222674/1025391 – moooeeeep