Прежде всего важно отметить, что, поскольку вопросы задают время выполнения / нет.вызовов , коэффициенты перед рекурсивными вызовами RANDOM
не имеют значения (поскольку ни один из ответов не зависит от фактического возвращаемого значения).
Кроме того, поскольку вопросы задают ожидаемыеколичества, вы можете смешивать соответствующие рекурсивные вызовы вероятностно.
a)
Начиная довольно легко.Вероятностное смешивание функций:
T(u) = [1/2] * [T(u-1) + T(u-2)] +
[1/3] * [T(u) + T(u-1)] +
[1/6] * [T(u) + T(u) ] // + constant amount of work
b)
То же, что и раньше, но не забудьте добавить по одному для каждого вызова:
N(u) = [1/2] * [N(u-1) + N(u-2) + 2] +
[1/3] * [N(u) + N(u-1) + 2] +
[1/6] * [N(u) + N(u) + 2] // no constants here
в)
Это хитрее двух других.Кажется противоречивым, что вопрос требует «[все вызовы RANDOM (u)], рекурсивные или нет», но только те, которые в строке 14 являются рекурсивными ...
В любом случаеигнорируя эту незначительную деталь, важно отметить, что вызов RANDOM(u)
в строке 11 также может производить требуемые рекурсивные вызовы, не влияя на сам общий счет.Адаптируя вышесказанное:
R(u) = [1/3] * [R(u) ] + // don't add 1 here
[1/6] * [R(u) + R(u) + 2] // add 2 as before
Обратите внимание, что этот вопрос, вероятно, предполагает, что вы переставите все термины T(u), N(u), R(u)
в LHS.Я оставлю это вам, поскольку это тривиально.