Entiendo que es constante agregar a una matriz vacía, pero después de agregar el primer elemento, ¿no cambia el tiempo a O (N)?
De manera similar, ¿la eliminación de un solo elemento del medio de la matriz cambia la indexación completa de la matriz solo del lado izquierdo (de n/2 a n )?
Agregar a una matriz a menudo significa asignar una nueva matriz de tamaño n+1 y copiar todo el contenido. Esto toma tiempo O(N), si la matriz está vacía (o de hecho tiene un tamaño fijo, pero prácticamente cualquier tamaño pequeño) puede llamar a esto O(1).
Lo que hacen la mayoría de las bibliotecas de colección es proporcionar una matriz ampliable como una colección que en realidad es una matriz y un contador de tamaño entero adicional. Cuando la matriz subyacente se llena al máximo y queremos agregar otro elemento, no lo aumentamos en 1, sino en algún factor multiplicativo (por ejemplo, 2, duplicando su tamaño). Esto se hace como se indicó anteriormente, asignando una matriz más grande y copiando el contenido, preferiblemente utilizando una copia eficiente a nivel de página para matrices más grandes. Esto le da tiempo O(1) amortizado para agregar un elemento, pero en el peor de los casos O(N). Siendo N el número de elementos de la matriz.
Si elimina un elemento del medio de una matriz, puede referirse a una operación que cambia todos los datos más allá de ese índice en uno, o puede estar refiriéndose a una operación que simplemente establece ese índice en nulo u otro valor vacío. El primero es O(N) el segundo es O(1)