Para contenedores C++ STL como vector
y list
, la complejidad de encontrar elementos e insertarlos o eliminarlos se explica por sí misma. Sin embargo, para el contenedor map
, aunque sé por mi lectura que la complejidad/rendimiento de acceso e inserción es O (log (n)), no puedo resolver por qué. Claramente no entiendo los mapas tanto como lo necesito, por lo que sería muy apreciado algún esclarecimiento sobre este tema.¿Por qué la complejidad del contenedor de mapas C++ STL O (log (n))?
Respuesta
Los elementos de un mapa o conjunto están contenidos en una estructura de árbol; cada vez que examina un nodo del árbol, determina si el elemento que está tratando de encontrar/insertar es menor o mayor que el nodo. El número de veces que necesita hacer esto (para un árbol correctamente equilibrado) es log2 (N) porque cada comparación arroja la mitad de las posibilidades.
Gracias, Mark, tu respuesta es justo lo que necesitaba. –
@EdKing, eche un vistazo a [árboles rojo-negro] (http://en.wikipedia.org/wiki/Red_black_tree). Por lo general, se utilizan para implementar std :: map. –
Como slavik262 puntos, los mapas se implementan generalmente con árboles rojo-negro, que son auto-equilibrados. Comprueba la complejidad de un árbol rojo-negro, por ejemplo, en el wikipedia No conozco ninguna implementación de un mapa con un árbol binario; si Mark Ransom conoce uno, me gustaría saber cuál.
Creo que es justo decir que un árbol rojo-negro * es * un árbol binario, solo con algunas invariantes en la forma del árbol y operaciones de reequilibrio para mantener estos durante la inserción y eliminación. –
- 1. ¿Qué significa O (log (log (n)))) - competitivo?
- 2. Big-O complejidad de c^n + n * (log n)^2 + (10 * n)^c
- 3. ¿Por qué está ordenando una cadena O (n log n)?
- 4. ¿Qué es O (log * N)?
- 5. C++ STL: ¿Reconstrucción o reutilización del contenedor después de la limpieza?
- 6. ¿Existe un término abreviado para O (n log n)?
- 7. ¿Es log (n!) = Θ (n · log (n))?
- 8. Explicación intuitiva de por qué QuickSort es n log n?
- 9. Diferencia entre O (n) y O (log (n)) - ¿cuál es mejor y qué es exactamente O (log (n))?
- 10. ¿Por qué se pasa del planificador O (1) al CFS que es O (log N)?
- 11. Cómo calcular n log n = c
- 12. ¿Es O (log n) siempre más rápido que O (n)
- 13. Complejidad de STL deque :: insert()
- 14. ¿Se pueden ordenar n enteros en O (n) complejidad amortizada?
- 15. SPOJ ARRAYSUB: O (n) Complejidad Enfoque
- 16. ¿Podemos hacer una clasificación rápida con n log la peor complejidad de caso?
- 17. C contenedor STL ++ y la construcción en el lugar
- 18. ¿Cómo es la complejidad de Morris Traversal o (n)?
- 19. intersección de dos mapas STL
- 20. Valores devueltos de la función contenedor STL
- 21. ¿Cómo medir el consumo total de memoria del contenedor STL?
- 22. C++ STL: ¿Qué método de iteración sobre un contenedor STL es mejor?
- 23. Combinar dos mapas STL
- 24. ¿Qué contenedor STL debe realizar la eliminación de elementos intermedios?
- 25. 2^n algoritmo de complejidad
- 26. ¿Es posible calcular la mediana de una lista de números mejor que O (n log n)?
- 27. Para STL o! STL, esa es la pregunta
- 28. Tricky Big-O complejidad
- 29. Ejemplo de O (n!)?
- 30. Complejidad de tiempo
has visto esto? http://stackoverflow.com/a/222674/1025391 – moooeeeep