Estoy escribiendo un programa simple de Python.Complejidad del tiempo para acceder a un dict de Python
Mi programa parece sufrir de acceso lineal a los diccionarios, su tiempo de ejecución crece exponencialmente a pesar de que el algoritmo es cuadrática.
Uso un diccionario para memorizar valores. Eso parece ser un cuello de botella.
Los valores que estoy mezclando son tuplas de puntos. Cada punto es: (x, y), 0 < = x, y < = 50
Cada tecla en el diccionario es: Una tupla de 2-5 puntos: ((x1, y1), (x2, y2), (x3, y3), (x4, y4))
Las teclas se leen muchas más veces de las que se escriben.
¿Es correcto que los dictados python sufran tiempos de acceso lineal con tales entradas?
Por lo que yo sé, los conjuntos tienen tiempos de acceso logarítmicos garantizados.
¿Cómo puedo simular dictados utilizando conjuntos (o algo similar) en Python?
editar Según la petición, he aquí una (simplificado) versión de la función memoization:
def memoize(fun):
memoized = {}
def memo(*args):
key = args
if not key in memoized:
memoized[key] = fun(*args)
return memoized[key]
return memo
¿Qué evidencia tiene para esto? ¿Puede proporcionar sus números de rendimiento real? Resultados del perfil? Es muy probable que esté buscando el lugar equivocado para su problema. Así que por favor documente su problema antes de hacer conjeturas sobre la causa. –
Ejecuto todo a través del generador de perfiles de python. La función de memorización demora exponencialmente más, aunque polinomialmente hay muchas entradas diferentes que puede tomar. Voy a publicar datos de perfil si lo desea. – x10
¿Puede enviarnos algún código de muestra para la función de memorización? ¿También puede intentar escribir una aplicación de prueba rápida, generar una carga de valores hash para sus datos y contar el número de colisiones (no debería tomar mucho tiempo, dependiendo de cómo funciona el hash en Python) – Martin