Логарифм числа b по основанию a — это показатель степени c, в которую нужно возвести a, чтобы получить b: если a^c = b, то log_a(b) = c. Проще говоря, логарифм отвечает на вопрос «в какую степень возвести основание, чтобы получить аргумент». Ниже разберем определение с условиями, свойства и формулы, три ходовых основания (2, e, 10), график логарифмической функции и то, откуда в IT берется сложность O(log n).
Содержание
Сразу разведем три близких понятия, которые легко спутать: логарифм — это число (результат); логарифмирование — операция нахождения этого числа; логарифмическая функция y = log_a(x) — это правило, которое каждому x ставит в соответствие его логарифм. Дальше по тексту держим это различие.
Определение и обозначение
Запись log_a(b) читается как «логарифм числа b по основанию a». Здесь b — аргумент, a — основание. Логарифмирование — это одна из двух обратных операций к возведению в степень: если по a^c = b искать основание a, получаем корень; если искать показатель c — получаем логарифм.
Ограничения (без них выражение не определено): аргумент b > 0, основание a > 0 и a ≠ 1. Причина проста: степень положительного основания всегда положительна, поэтому отрицательные числа и ноль логарифмировать нельзя, а единица в любой степени дает единицу, и однозначно «подобрать показатель» для другого аргумента не выйдет.
Быстрая проверка понимания: log_2(8) = 3, потому что 2^3 = 8; log_10(1000) = 3, потому что 10^3 = 1000.
Три основания: 2, e и 10
Основание может быть любым допустимым числом, но на практике встречаются три. У каждого — своя короткая запись, их важно не путать.
| Основание | Название | Запись | Где применяется |
|---|---|---|---|
| 2 | двоичный | log_2(x), lb(x), в CS часто просто log(x) | алгоритмы, структуры данных, оценка сложности |
| e ≈ 2,71828 | натуральный | ln(x) | непрерывный рост, матанализ, производные |
| 10 | десятичный | lg(x), log_10(x) | инженерные шкалы (дБ, pH), «порядки величин» |
Число e — это иррациональная константа (ее нельзя записать конечной или периодической дробью), приблизительно 2,71828. Она возникает как предел непрерывного роста: если сумма растет на 100% в год, но начисление идет непрерывно, а не разом в конце года, за год она умножается не на 2, а на e. Именно поэтому натуральный логарифм удобен для описания процессов вида «скорость роста пропорциональна текущему значению» — радиоактивного распада, остывания, накопления процентов.
Оговорка про запись: обозначение lb для двоичного логарифма стандартизировано (ISO 80000-2), но в текстах по алгоритмам чаще пишут просто log n, подразумевая основание 2. Это не небрежность: при оценке асимптотики основание влияет лишь на постоянный множитель (см. формулу перехода ниже), поэтому в записи O(log n) его опускают.
Свойства и формулы
Все формулы ниже работают только при условии, что аргументы положительны, а основание допустимо (a > 0, a ≠ 1). Это не украшение, а часть правила.
- log_a(1) = 0 — единица получается возведением в нулевую степень.
- log_a(a) = 1 — основание в первой степени дает само себя.
- log_a(x · y) = log_a(x) + log_a(y) при x > 0, y > 0 — логарифм произведения равен сумме логарифмов.
- log_a(x / y) = log_a(x) — log_a(y) при x > 0, y > 0 — логарифм частного равен разности.
- log_a(x^p) = p · log_a(x) при x > 0 — показатель степени выносится множителем.
- Переход к новому основанию: log_a(x) = log_c(x) / log_c(a). Отсюда, например, log_2(x) = ln(x) / ln(2) — именно так двоичный логарифм считают через натуральный.
Проверим свойство произведения и переход основания на числах:
import math
# логарифм произведения = сумма логарифмов
print(math.log2(4 * 8)) # 5.0
print(math.log2(4) + math.log2(8)) # 5.0
# переход к новому основанию: log_3(81) через натуральный
print(math.log(81) / math.log(3)) # 4.0 (3**4 == 81)
# math.log(x, base) делает переход внутри
print(math.log(81, 3)) # 4.0
Фактический вывод: 5.0, 5.0, 4.0, 4.0. Обратите внимание: math.log(x) без второго аргумента — это натуральный логарифм (по основанию e), для основания 10 есть math.log10, для 2 — math.log2.
Логарифмическая функция и ее график
Логарифмическая функция — это y = log_a(x) при a > 0 и a ≠ 1. Она обратна показательной функции y = a^x: их графики симметричны относительно прямой y = x.
Свойства функции и то, как они читаются на графике:
- Область определения D(f) = (0; +∞) — функция существует только для положительных x; слева от нуля графика нет.
- Область значений E(f) = (-∞; +∞) — по вертикали кривая уходит и вниз, и вверх без ограничений.
- График всегда проходит через точку (1; 0), потому что log_a(1) = 0 при любом основании, и через точку (a; 1).
- Ось ординат (прямая x = 0) — вертикальная асимптота: при x, стремящемся к нулю справа, значение уходит к -∞ (при a > 1) или к +∞ (при 0 < a < 1), но саму ось график не пересекает.
- При a > 1 функция строго возрастает на всей области определения; при 0 < a < 1 — строго убывает.
- Функция непрерывна и дифференцируема всюду, где определена; она не четная и не нечетная, не имеет ни наибольшего, ни наименьшего значения.
Проще всего увидеть форму по таблице значений. Для y = log_2(x) (основание больше 1, кривая возрастает):
| x | 1/4 | 1/2 | 1 | 2 | 4 | 8 |
|---|---|---|---|---|---|---|
| log_2(x) | -2 | -1 | 0 | 1 | 2 | 3 |
Для y = log_(1/3)(x) (основание между 0 и 1, кривая убывает):
| x | 1/9 | 1/3 | 1 | 3 | 9 |
|---|---|---|---|---|---|
| log_(1/3)(x) | 2 | 1 | 0 | -1 | -2 |
Видно главное отличие: обе кривые проходят через (1; 0), но при основании больше 1 значения растут вправо, а при основании меньше 1 — убывают. Чем ближе x к нулю, тем круче график прижимается к вертикальной оси.
Откуда в IT берется O(log n)
Ключевая для программирования черта логарифма: он растет очень медленно. Чтобы log_2(n) вырос на единицу, аргумент n нужно удвоить. Обратная сторона того же факта — если на каждом шаге алгоритм вдвое сокращает объем данных, число шагов равно примерно log_2(n). Отсюда и берется сложность O(log n).
Классический пример — двоичный поиск в отсортированном массиве: сравниваем искомое со средним элементом и каждый раз отбрасываем половину. Максимальное число сравнений для массива из n элементов равно floor(log_2(n)) + 1.
import math
def binary_search_steps(data, target):
lo, hi, steps = 0, len(data) - 1, 0
while lo <= hi:
steps += 1
mid = (lo + hi) // 2
if data[mid] == target:
return steps
if data[mid] < target:
lo = mid + 1
else:
hi = mid - 1
return steps # не найдено - вернем число проверенных шагов
n = 1_000_000
data = list(range(n))
worst = max(binary_search_steps(data, t) for t in (0, n - 1, n // 2))
print(worst) # 20
print(math.floor(math.log2(n)) + 1) # 20
Фактический вывод: 20 и 20. Смысл: чтобы найти любой из миллиона элементов, двоичному поиску хватает 20 сравнений. Линейный перебор в худшем случае сделал бы миллион. Тот же логарифмический рост стоит за высотой сбалансированного двоичного дерева поиска, глубиной пирамиды (heap) и разбиением задач в алгоритмах «разделяй и властвуй».
Оговорка: O(log n) описывает поведение при больших n и скрывает постоянные множители и основание логарифма — на практике важны еще и константы, кеш и реальные данные. Асимптотика показывает тенденцию роста, а не точное время.
Выводы
- Логарифм log_a(b) — это показатель степени, в которую надо возвести основание a, чтобы получить аргумент b; выражение определено только при b > 0, a > 0, a ≠ 1.
- Три рабочих основания: 2 (двоичный, алгоритмы), e ≈ 2,71828 (натуральный, непрерывный рост), 10 (десятичный, инженерные шкалы); переход между основаниями — делением логарифмов.
- Свойства (логарифм произведения, частного, степени, переход основания) действуют при положительных аргументах и превращают умножение в сложение.
- График y = log_a(x): область определения (0; +∞), проходит через (1; 0), вертикальная асимптота x = 0; при a > 1 возрастает, при 0 < a < 1 убывает.
- В IT логарифм задает медленный рост: если алгоритм вдвое сокращает данные за шаг, его сложность — O(log n) (двоичный поиск, деревья поиска, кучи).
Где применяется / связь с практикой
Логарифмы — не только школьная тема: без них не оценить сложность алгоритма, не разобрать структуры данных и не понять, почему одни решения масштабируются, а другие нет. Тот же аппарат нужен в аналитике данных и машинном обучении — логарифмические шкалы, кросс-энтропия, логистическая регрессия опираются на свойства логарифма.
Освойте тему на практике
Если хочется собрать математику под задачи разработки и анализа данных в систему, а не учить формулы вразнобой, посмотрите курс Прикладная математика: там логарифмы, функции и оценка сложности разбираются в связке с практическими задачами. Понять формат и уровень до старта помогают бесплатные открытые уроки — это живой разбор темы с преподавателем.
Смежные темы: Логарифмы и их основные свойства.
FAQ
Почему нельзя логарифмировать ноль и отрицательные числа? Логарифм ищет показатель степени, а положительное основание в любой степени дает только положительное число. Поэтому для нуля и отрицательных аргументов такого показателя не существует, и выражение не определено.
Что значит запись log без основания? В математике по контексту: часто lg (основание 10) или ln (основание e). В текстах по алгоритмам log n почти всегда означает основание 2 — при оценке O(…) основание меняет лишь постоянный множитель и его опускают.
Как посчитать логарифм по редкому основанию на калькуляторе или в коде, если есть только ln и lg? Через формулу перехода: log_a(x) = ln(x) / ln(a) (или lg(x) / lg(a)). Например, log_2(10) = ln(10) / ln(2).



