В математике двоичный логарифм ( 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 и другие пакеты математического программного обеспечения.
Силы двойки известны с древности; например, они появляются в «Элементах» Евклида , «Реквизит». IX.32 (о факторизации степеней двойки) и IX.36 (половина теоремы Евклида–Эйлера , о строении четных совершенных чисел ). А двоичный логарифм степени двойки — это всего лишь его позиция в упорядоченной последовательности степеней двойки. На этом основании Майклу Стифелу приписывают публикацию первой известной таблицы двоичных логарифмов в 1544 году. Его книга «Арифметика Интегра» содержит несколько таблиц, в которых показаны целые числа с соответствующими степенями двойки. Перестановка строк этих таблиц позволяет интерпретировать их как таблицы двоичных логарифмов. [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] — обозначение, указанное в Чикагском руководстве по стилю . [13] Дональд Кнут приписывает это обозначение предложению Эдварда Рейнгольда , [14] но его использование как в теории информации, так и в информатике датируется еще до того, как Рейнгольд стал активным. [15] [16] Двоичный логарифм также записывается как log n с предварительным утверждением, что основанием по умолчанию для логарифма является 2 . [17] [18] [19] Другое обозначение, которое часто используется для той же функции (особенно в немецкой научной литературе), — это ld n , [20] [21] [22] от латинского logarithmus Dualis [20] или logarithmus yadis. . [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 требуется примерно log 2 n итераций . [34] Точно так же идеально сбалансированное двоичное дерево поиска, содержащее n элементов, имеет высоту log 2 ( n + 1) − 1 . [35]
Время работы алгоритма обычно выражается в виде большой буквы 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 бита во входных данных. В этом смысле это дополнение к операции поиска первого набора , которая находит индекс младшего 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. Версия этой функции по умолчанию принимает аргументы двойной точности, но ее варианты позволяют аргументу иметь одинарную точность или быть длинным двойным . [59] В вычислительных средах, поддерживающих комплексные числа и неявное преобразование типов, таких как MATLAB, аргумент функции log2
может быть отрицательным числом , возвращающим комплексное число. [60]
IMLOG2
функцию для сложных двоичных логарифмов: см. Bourg, David M. (2006), Excel Scientific and Engineering Cookbook, O'Reilly Media, p. 232, ISBN 978-0-596-55317-3.В дальнейшем, если не указано иное, обозначение log x всегда означает логарифм по основанию 2 от x..
Если не указано иное, все логарифмы будем приводить к основанию 2..
Одним из интересных и порой даже удивительных аспектов анализа структур данных и алгоритмов является повсеместное присутствие логарифмов... По обычаю в компьютерной литературе мы опускаем запись основания
b
логарифма при
b
= 2.
.
в высшей математике и естественных науках единственным важным логарифмом является натуральный логарифм.