Sobes.tech
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::vector con cierta capacidad), puede ser O(1) en promedio, pero O(n) en el peor caso (reallocación).