Ответ 1
Ваше рекуррентное отношение T(n, m) = mT(n, m-1) + O(n)
, где n
обозначает количество узлов, а m
обозначает количество невидимых узлов (потому что вы вызываете longestPath
m
раз, и существует цикл, который выполняет пройденный тест n
раз). Базовый блок T(n, 0) = O(n)
(только что посетивший тест).
Решите это, и я считаю, что вы получаете T (n, n) O (n * n!).
ИЗМЕНИТЬ
В:
T(n, n) = nT(n, n-1) + O(n)
= n((n-1)T(n, n-2) + O(n)) + O(n) = ...
= n(n-1)...1T(n, 0) + O(n)(1 + n + n(n-1) + ... + n(n-1)...2)
= O(n)(1 + n + n(n-1) + ... + n!)
= O(n)O(n!) (see http://oeis.org/A000522)
= O(n*n!)