1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6

# теория · шаг 2 из 6

Логарифм в сумме: гармонический ряд

Коротко

Сумма 1 + 1/2 + 1/3 + ... + 1/n называется гармоническим рядом Hₙ. Она не сходится к числу (в отличие от 1 + 1/2 + 1/4) и не растёт линейно - она растёт как ln n. Отсюда логарифм появляется в оценках, где на шаге i работа пропорциональна 1/i. Основание логарифма в Θ роли не играет: log₂ n и ln n отличаются лишь постоянным множителем.

Если знаешь, что 1 + 1/2 + ... + 1/n = Θ(log n) и почему основание логарифма в оценке неважно, - листай до «Теперь сам».

Как думаешь, к чему сходится

1 + 1/2 + 1/3 + 1/4 + ... + 1/n

Члены тают, как в геометрическом ряду 1 + 1/2 + 1/4, который не переваливал за 2. Значит и этот сходится к какому-то числу? Нет. Разница в скорости, с которой члены тают: там каждый был вдвое меньше прошлого, здесь - лишь чуть меньше (1/3 против 1/2). Такого убывания не хватает, чтобы сумма остановилась: она растёт без предела, но очень медленно - как ln n.

На что это похоже

Представь, что закрашиваешь площадь столбиками ширины 1 и высоты 1/k: первый высотой 1, второй 1/2, третий 1/3. Столбики всё ниже, но никогда не нулевые, поэтому закрашенная площадь всё растёт. Огибающая этих столбиков - кривая 1/x, а площадь под 1/x от 1 до n - это в точности ln n. Вот почему сумма ведёт себя как логарифм: она повторяет площадь под 1/x.

Механизм: почему именно логарифм

Гармонический ряд Hₙ = 1 + 1/2 + ... + 1/n равен ln n с точностью до небольшой добавки: Hₙ = ln n + O(1). Причина - в предыдущей картинке: сумма столбиков высоты 1/k зажата вокруг площади под кривой 1/x, а эта площадь от 1 до n и есть натуральный логарифм ln n - так ln и определяют: как площадь под 1/x. Вот почему в ответе именно логарифм, а не что-то другое. Геометрический ряд 1/2ᵏ сходится, потому что его члены тают в РАЗЫ; гармонический 1/k расходится, потому что его члены тают лишь на доли - медленнее, чем нужно для остановки, но достаточно медленно, чтобы рост был логарифмическим, а не линейным.

Основание логарифма в Θ неважно. log₂ n (по основанию 2) и ln n (по основанию e) отличаются постоянным множителем: ln n = log₂ n · ln 2 ≈ 0,69·log₂ n. Смена основания - это умножение на константу, а константу Θ выбрасывает. Поэтому пишут просто log n, не указывая основание, - в порядке роста оно не меняет ничего. Основание важно лишь в точном счёте с константами.

Правило

1 + 1/2 + ... + 1/n = Hₙ = Θ(log n). Сумма обратных чисел - это логарифм, а не константа и не линия. Основание логарифма в оценке порядка не указывают: любые два отличаются постоянным множителем.

Разбор: откуда берётся n·log n

Пусть на шаге i (от 1 до n) алгоритм просматривает каждый i-й элемент массива, то есть делает n/i работы:

i=1: n    i=2: n/2    i=3: n/3    ...    i=n: 1

Сложим: n/1 + n/2 + ... + n/n = n·(1 + 1/2 + ... + 1/n) = n·Hₙ. Гармоническая сумма это Θ(log n), значит всё вместе - Θ(n·log n). Так n·log n вырастает не только из «делим пополам log n раз», но и из гармонического ряда: n вынесли, скобка дала логарифм.

В числах гармоническая сумма и правда еле растёт. H₁₀ ≈ 2,9, H₁₀₀ ≈ 5,2, H₁₀₀₀ ≈ 7,5: вход вырос в сто раз, а сумма - меньше чем втрое. Именно так ведёт себя логарифм: ln 1000 ≈ 6,9, и добавка O(1) между Hₙ и ln n держится около 0,58 при любом n. Ни константа (сумма всё же растёт), ни линия (росла бы в сто раз) - ровно логарифм.

Разбор: основание меняет константу, но не класс

Один алгоритм делит задачу на 2 части (log₂ n уровней), другой на 10 (log₁₀ n уровней). Уровней у второго меньше - но log₁₀ n = log₂ n / log₂ 10 ≈ log₂ n / 3,32, то есть ровно втрое с небольшим меньше. Это постоянный множитель: оба - Θ(log n). На выбор «какой алгоритм» основание влияет через константу (меньше уровней - быстрее на практике), на класс сложности - нет. Поэтому в O(log n) основание и не пишут.

Что ломается без этого

Две ошибки. Первая - решить, что гармонический ряд сходится, как геометрический: 1/k и 1/2ᵏ тают по-разному, первый уходит в бесконечность (медленно), второй останавливается. Вторая - спорить об основании логарифма в оценке порядка: O(log₂ n) и O(ln n) - одно и то же, разница лишь в невидимой для Θ константе. Указание основания в асимптотике выдаёт непонимание, что константу уже выбросили.

Зачем это в работе

Гармонический ряд - вторая дорога к n·log n помимо «деления пополам». Он всплывает там, где работа на шаге обратно пропорциональна номеру шага: разбор некоторых версий быстрой сортировки, оценки «сколько в среднем сравнений», вероятностные подсчёты. Узнав в сумме 1 + 1/2 + ... + 1/n, сразу пишешь Θ(log n) и не пытаешься свернуть её в константу.

Теперь сам

Какого порядка сумма n/1 + n/2 + n/3 + ... + n/n? А 1 + 1/2 + ... + 1/n отдельно?

Ответ. Вынеси n за скобку: n·(1 + 1/2 + ... + 1/n) = n·Hₙ. Скобка - гармонический ряд, это Θ(log n), поэтому вся сумма - Θ(n·log n). Сам гармонический ряд 1 + 1/2 + ... + 1/n - Θ(log n): он растёт без предела, но логарифмически, повторяя площадь под 1/x.

Главное

Гармонический ряд 1 + 1/2 + ... + 1/n = Hₙ = Θ(log n) - не константа и не линия: члены 1/k тают слишком медленно, чтобы сумма сошлась, но достаточно медленно, чтобы рост был логарифмическим (сумма повторяет площадь под 1/x, а это ln n). Основание логарифма в Θ не пишут: log₂ n и ln n отличаются постоянным множителем. Гармонический ряд - вторая дорога к n·log n: n/1 + n/2 + ... = n·Hₙ.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.