02.07.073 Логарифмы и их применение - justjune/AiSD2026 GitHub Wiki
Мини-напоминание: показательная функция возрастает в разы быстрее, чем логарифм
Логарифмы и их применение
Рассмотрим ключевые области применения логарифмов в алгоритмах.
Логарифмы и двоичный поиск
Двоичный поиск — классический пример алгоритма с логарифмической временной сложностью $O(log_2 n)$.
Про двоичный поиск можете прочитать в статье 05.01.181 Двоичный поиск
Пример: Представьте, что нужно найти человека по имени в телефонной книге, содержащей миллион имён. Вместо последовательного перебора (который занял бы огромное время), вы открываете книгу посередине. Сравнивая искомое имя с выбранным, вы отбрасываете половину книги. Повторяя этот процесс, количество страниц сокращается вдвое на каждом шаге.
Количество таких делений для книги из n записей равно $log_2 n$. Таким образом, чтобы найти любого человека в телефонной книге на миллион имён, достаточно всего двадцати сравнений. Этот принцип является одним из наиболее плодотворных в разработке алгоритмов.
Логарифмы и деревья
Логарифмы естественным образом возникают при анализе древовидных структур данных.
Рассмотрим дерево, в котором каждый узел имеет d потомков (для двоичных деревьев $d = 2$). Дерево высотой в один уровень может иметь d листьев, высотой в два уровня — $d^2$ листьев. В общем случае, зависимость количества листьев n от высоты дерева h выражается формулой: $n = d^h$ Отсюда следует, что высота дерева находится по формуле: $h = log_d n$
Про двоичные деревья поиска можете прочитать в статье 03.04.108 Двоичные деревья поиска
Логарифмы и биты
Логарифмы тесно связаны с представлением информации в двоичном виде.
Предположим, имеются две однобитовые комбинации (0, 1), четыре двухбитовые (00, 01, 10, 11) и восемь трёхбитовых комбинаций. Сколько битов w потребуется, чтобы представить любую из n различных комбинаций?
Количество различных битовых комбинаций удваивается с добавлением каждого бита. То есть $2^w = n$. Следовательно, необходимое количество битов вычисляется как: $w = log_2 n$
Логарифмы и умножение
Вспомним, что $log_b(xy) = log_b(x) + log_b(y)$, т.е. логарифм произведения равен сумме логарифмов сомножителей. Прямым следствием этого является формула $log_a n^b = b*log_a n$.
Выясним, как вычислить $a^b$ для любых a и b, используя функции $exp(x)$ и $ln(x)$ на карманном калькуляторе, зная, что $exp(x) = e^x$ и $ln(x) = log_e(x)$. Таким образом, вычисление $a^b = exp(ln(a^b)) = exp(b*ln a)$.
То есть задача сводится к одной операции умножения с однократным вызовом каждой из этих функций.
Быстрое возведение в степень
(тут кто-нибудь другой)