Давайте быстро изменим обозначения. Вместо использования T(n) назовем его T(k). Это дает нам отношение
T(k) = 3T(k / 4) + ck2.
Идея здесь в том, что T(k) означает общий объем работы, проделанной при оценке рекурсивного вызова на входе размера k. Если вы изначально запускаете рекурсию, вызывая рекурсивную функцию для входных данных размера n, вам будет интересно вычислить T(n).
Причина, по которой я считаю полезным изменить имя переменной на k, состоит в том, чтобы прояснить, что происходит. T(k) – это общая формула для определения объема работы, необходимой для оценки повторяемости входных данных размера k. Здесь k — переменная-заполнитель. Вы можете спросить, что такое T(137), чтобы увидеть, сколько работы выполняется на входе размера 137, или вы можете спросить, что такое T(2m), если вам интересно, как масштабируется работа. когда вход представляет собой совершенную степень двойки.
Теперь давайте проанализируем, что говорит формула. Формула T(k) = 3T(k / 4) + ck2 говорит, что работа, необходимая для вычисления функции на входе размера k, определяется следующим образом:
- Некоторый базовый объем работы, выполняемый рекурсивным вызовом верхнего уровня. Эта сумма составляет ck2.
- Некоторый объем работы требуется рекурсивными вызовами. В частности, есть три рекурсивных вызова, каждый из которых относится к входным данным, размер которых составляет четверть размера оригинала.
Давайте попробуем это на примере. Что такое Т(16)? Что ж, это будет c(162) = 256c плюс 3T(16/4) = 3T(4). То есть:
T(16) = 256c + 3T(4).
Теперь, что такое T(4)? Итак, c(42) = 16c плюс 3T(4/4) = 3T(1). Таким образом, у нас есть
T(4) = 16c + 3T(1),
и объединение этого с тем, что у нас есть выше, дает
T(16) = 256c + 3(16c + 3T(1)) = 256c + 48c + 9T(1) = 304c + 9T(1).
Вы видите, как, прорабатывая каждый шаг, мы передаем меньшее значение k? Вот что происходит, когда мы оцениваем повторение. Каждое отдельное значение T(k) всегда добавляет некоторую функцию от k, а значение k, которое оно наследует, определяется рекуррентностью.
Надеюсь, это поможет — дайте мне знать в комментариях, если есть что-то еще, что я могу прояснить!
person
templatetypedef
schedule
12.09.2020