Если вы знаете какое-то исчисление, вы часто можете найти порядок роста таких сумм путем интегрирования.
Если f
является положительной монотонной функцией, ∑ f(i)
для 1 <= i <= k
может быть аппроксимированоинтеграл ∫ f(t) dt
(t
в диапазоне от 1 до k
).Поэтому, если вам известна примитивная функция F
из f
(на современном языке антидериватив ), вы можете легко оценить интеграл до F(k) - F(1)
.Для анализа роста постоянный член F(1)
не имеет значения, поэтому вы можете аппроксимировать сумму (а также интеграл) просто на F(k)
.
Инструмент, который часто полезен в таких вычислениях, - частичная интеграция ,
b b
∫ f'(t)*g(t) dt = f(b)*g(b) - f(a)*g(a) - ∫ f(t)*g'(t) dt
a a
, что следует из правила продукта (f*g)' = f' * g + f * g'
.Часто полезно написать f
как 1*f
, чтобы применить частичную интеграцию, например, чтобы найти примитив (натурального) логарифма,
∫ log t dt = ∫ 1*log t dt = t*log t - ∫ t * (log t)' dt = t*log t - ∫ t*(1/t) dt = t*log t - t
В этом случае с f(t) = t*log t
частичная интеграция дает
∫ t*log t dt = 1/2*t^2 * log t - ∫ (1/2*t^2) * (log t)' dt
= 1/2*t^2 * log t - 1/2 ∫ t^2*(1/t) dt
= 1/2*t^2 * log t - 1/4*t^2
Поскольку второй член растет медленнее, чем первый, его можно игнорировать для анализа роста, поэтому вы получаете
k
∑ i*log i ≈ 1/2*k^2*log k
1
, поскольку логарифмы для разных оснований отличаются толькопо постоянному коэффициенту другой выбор логарифма просто меняет постоянный коэффициент, и вы видите, что во всех случаях
k
∑ i*log i ∈ Θ(k^2 * log k)
1
Для вашей конкретной задачи k = log n
, поэтому сумма равна Θ((log n)^2 * log(log n))
, так какдругие ответы были получены по-другому.