Я пишу простую программу Python.
Моя программа, похоже, страдает от линейного доступа к словарям,
его время выполнения растет экспоненциально, хотя алгоритм квадратичен.
Я использую словарь для запоминания значений. Это кажется узким местом.
Значения, которые я использую, являются кортежами точек.
Каждая точка: (x, y), 0 <= x, y <= 50
Каждый ключ в словаре: Кортеж из 2-5 точек: ((x1, y1), (x2, y2), (x3, y3), (x4, y4))
Ключи читаются много раз чаще, чем они написаны.
Правильно ли, что python dicts страдает от линейного времени доступа с такими входами?
Насколько я знаю, у наборов есть гарантированное время логарифмического доступа.
Как я могу имитировать dicts с помощью наборов (или чего-то подобного) в Python?
edit В соответствии с запросом здесь (упрощенная версия) функции memoization:
def memoize(fun):
memoized = {}
def memo(*args):
key = args
if not key in memoized:
memoized[key] = fun(*args)
return memoized[key]
return memo