Как оптимизировать рекурсивный алгоритм, чтобы не повторяться? - PullRequest
3 голосов
/ 10 июля 2010

Считая класс difflib.SequenceMatcher в стандартной библиотеке Python неподходящим для моих нужд, был написан универсальный модуль "diff" -ing для решения проблемного пространства. После нескольких месяцев, чтобы больше думать о том, что он делает, рекурсивный алгоритм, похоже, ищет больше, чем нужно, повторно просматривая те же области в последовательности, которую, возможно, также исследовала отдельная «поисковая цепочка».

Цель модуля diff состоит в том, чтобы вычислить разницу и сходство между парой последовательностей (список, кортеж, строка, байты, bytearray и т. Д.). Первоначальная версия была намного медленнее, чем текущая форма кода, увеличив скорость в десять раз. У кого-нибудь есть предложения по внедрению метода сокращения пространств поиска в рекурсивных алгоритмах для повышения производительности?

Ответы [ 2 ]

6 голосов
/ 10 июля 2010

Техника, которую вы ищете, называется памятка .

0 голосов
/ 10 июля 2010

Если у вас есть дорогой метод, который вы, вероятно, вызовете несколько раз с одними и теми же параметрами, вы можете просто кэшировать результат метода, используя параметры в качестве ключа.

...