Запоминание и табулирование
Давайте рассмотрим оба метода, поставив каждый из них перед одной и той же проблемой: как найти конкретное число Фибоначчи?
Мемоизация
Во-первых, давайте воспользуемся рекурсией для решения этого вопроса.
Ex :
Для каждой итерации
Функция fib( ){
Пример: fib 4
===> Найдите два предыдущих тома.
Fib 3 fib 2
Результат возвращается в fib(0) или fib(1)
//0 или 1
}
Время выполнения этой рекурсии будет экспоненциальным, с O (2 ^ n)
Это возможность представить концепцию мемоизации.
Он заключается в хранении результатов, возвращаемых функцией, для ускорения будущих операций.
Ведь в разных случаях это позволит нам избежать выполнения затратных функций, собирая нужные значения за постоянное время.
В этом случае: белый вычисляет результат fib (3) один раз, нам не нужно будет пересчитывать его снова во время следующих итераций.
Это позволяет резко сократить время поиска.
Действительно, без мемоизации O(2^n)
С запоминанием: O(n)
На самом деле дерево просматривается только один раз, а не для каждой операции.
Мемоизация следует «нисходящему подходу». Действительно , мы начинаем с вершины дерева, к каждому дочернему узлу, чтобы добраться до конечного узла.
Метод табуляции
Теперь давайте проверим метод табулирования :
Этот метод использует итерацию вместо рекурсии.
Действительно, нам просто нужно начать с добавления 0 к индексу 0 и 1 к индексу 1.
Затем, используя индекс, в каждом блоке памяти просто вычислить добавление двух последних блоков. Это позволяет прийти к значению n.
В отличие от мемоизации, смысл в том, чтобы следовать восходящему подходу.
Действительно, мы начинаем с 0 или 1, чтобы прийти к значению n.
Для решения такой проблемы доступны как рекурсивный, так и итеративный подходы.