Junior
¿Cuál es la complejidad asintótica de las operaciones con elementos en la lista?
sobes.tech AI
Respuesta de la IA
Depende del tipo de lista y de la operación.
Normalmente se consideran los siguientes tipos de listas:
- Lista enlazada simple
- Lista doblemente enlazada
- Array (como caso particular de lista)
Operaciones:
- Acceso por índice
- Inserción
- Eliminación
- Búsqueda de valor
| Operación | Lista enlazada simple | Lista doblemente enlazada | Array |
|---|---|---|---|
| Acceso por índice | O(n) | O(n) | O(1) |
| Inserción | O(1) (al principio) | O(1) (al principio/fin) | O(n) |
| Eliminación | O(n) | O(n) | O(n) |
| Búsqueda de valor | O(n) | O(n) | O(n) |
Explicaciones:
- O(1) (Tiempo constante): La operación toma un tiempo fijo, independientemente del tamaño de la lista. Por ejemplo, acceder a un elemento por índice en un array.
- O(n) (Tiempo lineal): El tiempo de ejecución de la operación es proporcional al tamaño de la lista. Por ejemplo, buscar un elemento en una lista no ordenada.
- O(log n) (Tiempo logarítmico): El tiempo de ejecución aumenta logarítmicamente con el tamaño de la lista. Se encuentra a menudo en operaciones con datos ordenados (por ejemplo, búsqueda binaria).
Detalles:
- En una lista enlazada simple: Inserción al principio - O(1). Inserción al final o inserción/eliminación por índice requiere recorrer la lista hasta el elemento deseado, lo que da O(n).
- En una lista doblemente enlazada: Inserción al principio y al final - O(1). Inserción/eliminación en una posición dada - O(1), pero buscar ese nodo por valor o índice - O(n).
- En un array: Acceso por índice - O(1). Inserción o eliminación en medio del array requiere desplazar elementos, lo que da O(n). Inserción/eliminación al final, si hay capacidad reservada (por ejemplo, en
std::vectorcon cierta capacidad), puede ser O(1) en promedio, pero O(n) en el peor caso (reallocación).