tiempo resueltos programas programación programa más hechos ejercicios ejemplos ejecucion con codigos algoritmos algoritmo python complexity-theory

python - resueltos - tiempo de ejecucion de un algoritmo en java



¿Cuál es la complejidad del tiempo de ejecución de las funciones de la lista de Python? (5)

La respuesta es "indefinida". El lenguaje Python no define la implementación subyacente. Aquí hay algunos enlaces a un hilo de la lista de correo que podría interesarle.

Además, la manera más pitonica de escribir tu ciclo sería esta:

def foo(some_list): for item in some_list: bar(item)

Estaba escribiendo una función de pitón que se parecía a esto

def foo(some_list): for i in range(0, len(some_list)): bar(some_list[i], i)

para que se llamara con

x = [0, 1, 2, 3, ... ] foo(x)

Había asumido que el acceso al índice de las listas era O(1) , pero me sorprendí al encontrar que para las listas grandes esto fue significativamente más lento de lo que esperaba.

Mi pregunta, entonces, es cómo se implementan las listas de Python, y cuál es la complejidad del tiempo de ejecución de los siguientes

  • Indexación: list[x]
  • Apareciendo desde el final: list.pop()
  • Apareciendo desde el principio: list.pop(0)
  • Extendiendo la lista: list.append(x)

Para crédito adicional, empalme o pop arbitrario.


Las listas son de hecho O (1) para indexar: se implementan como un vector con sobreasignación proporcional, por lo que se debe realizar de la manera esperada. La razón probable por la que encontró este código más lento de lo que esperaba es la llamada a " range(0, len(some_list)) ".

range() crea una nueva lista del tamaño especificado, por lo que si some_list tiene 1,000,000 de elementos, creará una nueva lista de millones de elementos por adelantado. Este comportamiento cambia en python3 (el rango es un iterador), donde el equivalente de xrange es xrange , o incluso mejor para su caso, enumerate


No puedo comentar todavía, entonces

si necesita índice y valor, utilice enumerate:

for idx, item in enumerate(range(10, 100, 10)): print idx, item



hay una tabla muy detallada en python wiki que responde a su pregunta.

Sin embargo, en su ejemplo particular, debe usar enumerate para obtener un índice de un iterable dentro de un bucle. al igual que:

for i, item in enumerate(some_seq): bar(item, i)