2012-10-08 32 views
7

He leído que la operación de inserción en un conjunto solo toma el tiempo de registro (n). ¿Cómo es eso posible?complejidad de set :: inserción

Para insertar, primero tenemos que encontrar la ubicación en la matriz ordenada donde debe estar el nuevo elemento. Usando la búsqueda binaria toma log (n). Luego, para insertar en esa ubicación, todos los elementos que lo suceden deben desplazarse un lugar hacia la derecha. Tarda otro n tiempo.

Mi duda se basa en mi comprensión de que el conjunto se implementa como una matriz y los elementos se almacenan en orden ordenado. Por favor corrígeme si mi entendimiento es incorrecto.

+9

Está asumiendo que 'std :: set' se implementa como una matriz ordenada. ¿Por qué? –

+5

Tomado de cppreference: * Los conjuntos generalmente se implementan como árboles rojo-negro. * – chris

+1

@KonradRudolph: Ahora solo tengo que saber que los conjuntos se implementan utilizando el árbol rojo-negro. Gracias chris – bibbsey

Respuesta

15

std::set se implementa comúnmente como un árbol de búsqueda binario rojo-negro. La inserción en esta estructura de datos tiene el peor caso de complejidad O (log (n)), ya que el árbol se mantiene equilibrado.

+0

No exactamente: la modificación puede implicar reequilibrio, que una vez más es una operación O (log n). –

+0

Con un árbol rojo-negro, la inserción debe tener el peor caso de O (log (n)), incluso considerando el reequilibrio. – cdhowie

+4

Sí, por supuesto, no contesté eso. Pero dijiste que modificar el árbol es O (1). *Eso está mal. –