Как оптимизировать рекурсивный алгоритм, чтобы он не повторялся?

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

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


person Noctis Skytower    schedule 10.07.2010    source источник


Ответы (2)


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

person Mark Byers    schedule 10.07.2010

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

person James Gaunt    schedule 10.07.2010