В математике двоичный логарифм ( log 2 n ) — это степень , в которую нужно возвести число 2 , чтобы получить значение n . То есть для любого действительного числа x ,
Например, двоичный логарифм 1 равен 0 , двоичный логарифм 2 равен 1 , двоичный логарифм 4 равен 2 , а двоичный логарифм 32 равен 5 .
Двоичный логарифм — это логарифм по основанию 2 , обратная функция степени двойки . Помимо log 2 , альтернативной записью для двоичного логарифма является lb (запись, предпочитаемая ISO 31-11 и ISO 80000-2 ).
Исторически первым применением двоичных логарифмов было применение в теории музыки Леонардом Эйлером : двоичный логарифм отношения частот двух музыкальных тонов дает число октав , на которое различаются тоны. Двоичные логарифмы могут использоваться для вычисления длины представления числа в двоичной системе счисления или числа бит, необходимых для кодирования сообщения в теории информации . В информатике они подсчитывают число шагов, необходимых для бинарного поиска и связанных с ним алгоритмов. Другие области, в которых часто используется двоичный логарифм, включают комбинаторику , биоинформатику , проектирование спортивных турниров и фотографию .
Двоичные логарифмы включены в стандартные математические функции языка C и другие пакеты математического программного обеспечения.
Степени двойки известны с античности; например, они появляются в «Началах » Евклида , Props. IX.32 (о факторизации степеней двойки) и IX.36 (половина теоремы Евклида–Эйлера , о структуре четных совершенных чисел ). А двоичный логарифм степени двойки — это просто ее положение в упорядоченной последовательности степеней двойки. На этом основании Михаэлю Штифелю приписывают публикацию первой известной таблицы двоичных логарифмов в 1544 году. Его книга Arithmetica Integra содержит несколько таблиц, которые показывают целые числа с соответствующими им степенями двойки. Перестановка строк этих таблиц позволяет интерпретировать их как таблицы двоичных логарифмов. [1] [2]
Ранее, чем Штифель, джайнскому математику VIII века Вирасене приписывают создание двоичного логарифма. Концепция Вирасены об ардхачеде была определена как количество раз, которое данное число может быть разделено на два без остатка. Это определение приводит к функции, которая совпадает с двоичным логарифмом по степеням двойки, [3] но она отличается для других целых чисел, давая 2-адический порядок, а не логарифм. [4]
Современная форма двоичного логарифма, применяемая к любому числу (не только к степеням двойки), была явно рассмотрена Леонардом Эйлером в 1739 году. Эйлер установил применение двоичных логарифмов в теории музыки задолго до того, как стали известны их применения в теории информации и информатике. В рамках своей работы в этой области Эйлер опубликовал таблицу двоичных логарифмов целых чисел от 1 до 8 с точностью до семи десятичных знаков. [5] [6]
Функция двоичного логарифма может быть определена как функция, обратная к функции степени двойки , которая является строго возрастающей функцией над положительными действительными числами и, следовательно, имеет уникальную обратную функцию. [7] В качестве альтернативы, она может быть определена как ln n /ln 2 , где ln — натуральный логарифм , определенный любым из его стандартных способов. Использование комплексного логарифма в этом определении позволяет расширить двоичный логарифм на комплексные числа . [8]
Как и другие логарифмы, двоичный логарифм подчиняется следующим уравнениям, которые можно использовать для упрощения формул, объединяющих двоичные логарифмы с умножением или возведением в степень: [9]
Более подробную информацию см. в списке логарифмических тождеств .
В математике двоичный логарифм числа n часто записывается как log 2 n . [10] Однако для этой функции использовались или предлагались и другие обозначения, особенно в прикладных областях.
Некоторые авторы записывают двоичный логарифм как lg n , [11] [12] обозначение, указанное в The Chicago Manual of Style . [13] Дональд Кнут приписывает это обозначение предложению Эдварда Рейнгольда , [14] но его использование как в теории информации, так и в компьютерных науках датируется еще до того, как Рейнгольд начал свою деятельность. [15] [16] Двоичный логарифм также записывал как log n с предшествующим утверждением, что основанием логарифма по умолчанию является 2 . [17] [18] [19] Другое обозначение, которое часто используется для той же функции (особенно в немецкой научной литературе), — ld n , [20] [21] [22] от латинского logarithmus dualis [20] или logarithmus dyadis . [20] Стандарты DIN 1302 , ISO 31-11 и ISO 80000-2 рекомендуют еще одно обозначение, lb n . Согласно этим стандартам, lg n не следует использовать для двоичного логарифма, поскольку вместо этого он зарезервирован для десятичного логарифма log 10 n . [23] [24] [25]
Число цифр ( бит ) в двоичном представлении положительного целого числа n равно целой части 1 + log 2 n , т.е. [12]
В теории информации определение количества собственной информации и информационной энтропии часто выражается двоичным логарифмом, что соответствует тому, что бит является фундаментальной единицей информации . С этими единицами теорема Шеннона-Хартли выражает информационную емкость канала как двоичный логарифм его отношения сигнал-шум плюс один. Однако натуральный логарифм и nat также используются в альтернативных обозначениях для этих определений. [26]
Хотя натуральный логарифм важнее двоичного во многих областях чистой математики, таких как теория чисел и математический анализ , [27] двоичный логарифм имеет несколько применений в комбинаторике :
Двоичный логарифм также часто появляется в анализе алгоритмов [19] не только из-за частого использования двоичной арифметики чисел в алгоритмах, но и потому, что двоичные логарифмы встречаются в анализе алгоритмов, основанных на двухстороннем ветвлении. [14] Если изначально задача имеет n вариантов решения, и каждая итерация алгоритма уменьшает количество вариантов в два раза, то количество итераций, необходимых для выбора одного варианта, снова является целой частью log 2 n . Эта идея используется в анализе нескольких алгоритмов и структур данных . Например, в бинарном поиске размер решаемой задачи уменьшается вдвое с каждой итерацией, и поэтому для получения решения для задачи размера n требуется примерно log 2 n итераций . [34] Аналогично, идеально сбалансированное двоичное дерево поиска , содержащее n элементов, имеет высоту log 2 ( n + 1) − 1 . [35]
Время выполнения алгоритма обычно выражается в нотации big O , которая используется для упрощения выражений путем опускания их постоянных множителей и членов низшего порядка. Поскольку логарифмы в разных основаниях отличаются друг от друга только постоянным множителем, можно также сказать, что алгоритмы, которые выполняются за время O (log 2 n ) , работают, скажем, за время O (log 13 n ) . Основание логарифма в таких выражениях, как O (log n ) или O ( n log n ) , поэтому не имеет значения и может быть опущено. [11] [36] Однако для логарифмов, которые появляются в показателе степени временного ограничения, основание логарифма не может быть опущено. Например, O (2 log 2 n ) не то же самое, что O (2 ln n ), потому что первое равно O ( n ) , а второе равно O ( n 0.6931... ) .
Алгоритмы со временем выполнения O ( n log n ) иногда называют линейно-арифметическими . [37] Вот некоторые примеры алгоритмов со временем выполнения O (log n ) или O ( n log n ) :
Двоичные логарифмы также встречаются в показателях степеней временных границ для некоторых алгоритмов «разделяй и властвуй» , таких как алгоритм Карацубы для умножения n- битных чисел за время O ( n log 2 3 ) [42] и алгоритм Штрассена для умножения матриц n × n за время O ( n log 2 7 ) [43] . Появление двоичных логарифмов в этих временах выполнения можно объяснить ссылкой на основную теорему для рекуррентных уравнений «разделяй и властвуй» .
В биоинформатике микрочипы используются для измерения того, насколько сильно различные гены экспрессируются в образце биологического материала. Различные скорости экспрессии гена часто сравниваются с использованием двоичного логарифма отношения скоростей экспрессии: логарифм отношения двух скоростей экспрессии определяется как двоичный логарифм отношения двух скоростей. Двоичные логарифмы позволяют удобно сравнивать скорости экспрессии: удвоенная скорость экспрессии может быть описана логарифмическим отношением 1 , уменьшенная вдвое скорость экспрессии может быть описана логарифмическим отношением −1 , а неизмененная скорость экспрессии может быть описана логарифмическим отношением нуля, например. [44]
Полученные таким образом точки данных часто визуализируются в виде диаграммы рассеяния , в которой одна или обе оси координат представляют собой двоичные логарифмы отношений интенсивности, или в виде визуализаций, таких как график MA и график RA, которые вращают и масштабируют эти диаграммы рассеяния логарифмических отношений. [45]
В теории музыки интервал или перцептивная разница между двумя тонами определяется соотношением их частот. Интервалы, происходящие от рациональных числовых соотношений с малыми числителями и знаменателями , воспринимаются как особенно благозвучные. Самый простой и важный из этих интервалов — октава , соотношение частот 2:1 . Количество октав, на которое различаются два тона, является двоичным логарифмом их соотношения частот. [46]
Для изучения систем настройки и других аспектов теории музыки, требующих более тонких различий между тонами, полезно иметь меру размера интервала, которая тоньше октавы и является аддитивной (как логарифмы), а не мультипликативной (как частотные отношения). То есть, если тоны x , y и z образуют восходящую последовательность тонов, то мера интервала от x до y плюс мера интервала от y до z должны равняться мере интервала от x до z . Такая мера задается центом , который делит октаву на 1200 равных интервалов ( 12 полутонов по 100 центов каждый). Математически, если заданы тоны с частотами f 1 и f 2 , число центов в интервале от f 1 до f 2 равно [46]
Миллиоктава определяется таким же образом, но с множителем 1000 вместо 1200. [47 ]
В соревновательных играх и видах спорта, в которых участвуют два игрока или команды в каждой игре или матче, двоичный логарифм указывает количество раундов, необходимых в турнире с выбыванием, требуемом для определения победителя. Например, турнир из 4 игроков требует log 2 4 = 2 раунда для определения победителя, турнир из 32 команд требует log 2 32 = 5 раундов и т. д. В этом случае для n игроков/команд, где n не является степенью 2, log 2 n округляется, поскольку необходимо иметь по крайней мере один раунд, в котором не все оставшиеся участники играют. Например, log 2 6 приблизительно равен 2,585 , что округляется до 3 , указывая, что турнир из 6 команд требует 3 раунда (либо две команды пропускают первый раунд, либо одна команда пропускает второй раунд). Такое же количество раундов также необходимо для определения явного победителя в турнире по швейцарской системе . [48]
В фотографии значения экспозиции измеряются в терминах двоичного логарифма количества света, достигающего пленки или сенсора, в соответствии с законом Вебера-Фехнера, описывающим логарифмическую реакцию зрительной системы человека на свет. Одна ступень экспозиции равна одной единице на логарифмической шкале с основанием 2. [49] [50] Точнее, значение экспозиции фотографии определяется как
где N — число f, измеряющее апертуру объектива во время экспозиции, а t — количество секунд экспозиции. [51]
Двоичные логарифмы (выраженные в виде стопов) также используются в денситометрии для выражения динамического диапазона светочувствительных материалов или цифровых датчиков. [52]
Простой способ вычисления log 2 n на калькуляторах , не имеющих функции log 2 , — это использование функций натурального логарифма ( ln ) или десятичного логарифма ( log или log 10 ), которые есть в большинстве научных калькуляторов . Чтобы изменить основание логарифма с e или 10 на 2, можно использовать формулы : [50] [53]
или приблизительно
Двоичный логарифм можно превратить в функцию от целых чисел и до целых чисел, округлив его вверх или вниз. Эти две формы целочисленного двоичного логарифма связаны следующей формулой:
Определение можно расширить, определив . Расширенная таким образом, эта функция связана с количеством начальных нулей 32-битного беззнакового двоичного представления x , nlz( x ) .
Целочисленный двоичный логарифм можно интерпретировать как индекс старшего бита 1 на входе, отсчитываемый от нуля. В этом смысле он является дополнением к операции find first set , которая находит индекс младшего бита 1. Многие аппаратные платформы поддерживают поиск числа ведущих нулей или эквивалентных операций, которые можно использовать для быстрого поиска двоичного логарифма. Функции fls
и flsl
в ядре Linux [55] и в некоторых версиях библиотеки программного обеспечения libc также вычисляют двоичный логарифм (округленный до целого числа плюс один).
Для общего положительного действительного числа двоичный логарифм может быть вычислен в двух частях. [56] Сначала вычисляется целая часть ( называемая характеристикой логарифма). Это сводит задачу к той, где аргумент логарифма находится в ограниченном диапазоне, интервале [1, 2) , упрощая второй шаг вычисления дробной части (мантиссы логарифма). Для любого x > 0 существует уникальное целое число n такое, что 2 n ≤ x < 2 n +1 или, что эквивалентно, 1 ≤ 2 − n x < 2 . Теперь целая часть логарифма — это просто n , а дробная часть — log 2 (2 − n x ) . [56] Другими словами:
Для нормализованных чисел с плавающей точкой целая часть задается экспонентой с плавающей точкой [57] , а для целых чисел ее можно определить, выполнив операцию подсчета ведущих нулей . [58]
Дробная часть результата равна log 2 y и может быть вычислена итеративно, используя только элементарное умножение и деление. [56] Алгоритм вычисления дробной части можно описать в псевдокоде следующим образом:
Результат этого выражается следующими рекурсивными формулами, в которых — количество возведений в квадрат, требуемых на i -й итерации алгоритма:
В особом случае, когда дробная часть на шаге 1 оказывается равной нулю, это конечная последовательность, заканчивающаяся в некоторой точке. В противном случае это бесконечный ряд , который сходится согласно тесту отношения , поскольку каждый член строго меньше предыдущего (поскольку каждый m i > 0 ). Для практического использования этот бесконечный ряд должен быть усечен, чтобы достичь приблизительного результата. Если ряд усечен после i -го члена, то ошибка в результате меньше 2 −( m 1 + m 2 + ⋯ + m i ) . [56]
Функция log2
включена в стандартные математические функции языка C. Версия этой функции по умолчанию принимает аргументы с двойной точностью , но ее варианты позволяют аргументу иметь одинарную точность или быть длинным double . [59] В вычислительных средах, поддерживающих комплексные числа и неявное преобразование типов, таких как MATLAB, аргумент функции log2
может быть отрицательным числом , возвращающим комплексное число. [60]
IMLOG2
функцию для комплексных двоичных логарифмов: см. Bourg, David M. (2006), Excel Scientific and Engineering Cookbook, O'Reilly Media, стр. 232, ISBN 978-0-596-55317-3.В дальнейшем, если не указано иное, обозначение log x всегда обозначает логарифм по основанию 2 числа x..
Если не указано иное, мы будем брать все логарифмы по основанию 2.
Одним из интересных и порой даже удивительных аспектов анализа структур данных и алгоритмов является повсеместное присутствие логарифмов... Как это принято в компьютерной литературе, мы опускаем написание основания
b
логарифма, когда
b
= 2
.
в высшей математике и науке единственный логарифм, имеющий значение, — это натуральный логарифм.