Где я могу узнать о логарифмах?

Я слышал, что логарифмы довольно часто упоминаются в контексте программирования. Они кажутся решением многих проблем, но я не могу найти реальный способ их использования. Я прочитал Запись в Википедии, и это, честно говоря, не оставляет меня в мудрости.

Итак, где я могу узнать о реальных проблемах программирования, которые решают логарифмы? У кого-нибудь есть примеры проблем, с которыми они столкнулись, которые были решены с помощью логарифмирования?

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он не о программировании.

High Performance Mark 04.03.2016 02:55

Можете ли вы объяснить, почему вы думаете, что это не о программировании? Обратите внимание на предложение, выделенное жирным шрифтом во втором абзаце.

Charles Roper 04.03.2016 04:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
20
2
4 764
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

Единственная проблема, которую я могу вспомнить, - это вычисление произведения столбца в SQL. В SQL Server нет агрегатной функции PRODUCT (), поэтому для этого использовалась сумма логарифмов (с помощью функции LOG10 ()) каждого значения. Основным недостатком было то, что все числа в столбце должны были быть положительными и отличными от нуля (вы не можете вычислить логарифм от отрицательного числа или нуля).

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

nlucaroni 23.09.2008 19:51
Ответ принят как подходящий

Допустим, у вас есть 1000 долларов, и они находятся на сберегательном счете с процентной ставкой 2,4%.

Сколько лет вам придется ждать, пока у вас не будет 2000 долларов, чтобы купить новый ноутбук?

1000 × 1.024x = 2000

1.024x = 2

x = журнал 1.024 2 = 29,23 года

Я думаю, ^ яснее, чем ** для обозначения экспоненты ... мне по крайней мере

Chris Marasti-Georg 23.09.2008 19:57

Это очень интересно, и именно это я имел в виду под «реальным миром». Пытаясь найти этот ответ, я нашел следующее очень полезным: math.about.com/od/formulas/a/compound.htm Чтобы вернуться к 2000 году, я получил следующее: 1000 * (1 + 0,024) ** 29.2263362061568

Charles Roper 23.09.2008 21:56

Исправлена ​​опечатка, спасибо за отзыв. @ Чарльз Ропер, теперь ты понял. Другими словами, журнал сообщает вам, сколько раз вам нужно умножить число само на себя, чтобы перейти к другому числу.

Mendelt 23.09.2008 23:05

Теперь вы используете несовместимые операторы экспоненты ... :)

Charles Roper 24.09.2008 09:53

@Charles Roper: Блин, я не должен редактировать свои посты поздно ночью, когда пью вино :-)

Mendelt 24.09.2008 11:43

Я заметил, что обозначение, используемое для журнала, было неправильным (по крайней мере, по моему опыту ... Поправьте меня, если я ошибается!). Исправлено это, а также небольшая проблема с округлением.

strager 04.02.2009 23:05

@strager: На самом деле я привык к обозначению, в котором основание журнала записывается в верхнем индексе перед журналом, но я не мог найти, как это сделать. Так лучше, спасибо!

Mendelt 05.02.2009 12:45

Применяя эту формулу к реальным сберегательным счетам, помните, что процентные ставки указаны за год, но часто проценты начисляются чаще. Для ежемесячного начисления сложных процентов каждый месяц вы умножаете на (1 + r / 12).

quant_dev 31.05.2009 17:02

@Mendelt: используйте HTML-теги <sup> и </sup>. Они поддерживаются (по крайней мере, мы / я посты).

Yatharth Agarwal 24.04.2012 18:06

Откуда 1.024 взялось?

Shahid Karimi 07.09.2015 13:26

Логарифмы в программировании также часто используются для описания эффективности алгоритма с использованием Обозначение Big O.

Например, алгоритм двоичного поиска будет иметь наихудший сценарий O (log (n)) (на отсортированном наборе), тогда как наихудший случай линейного поиска - O (n)

Да, конечно, это отличный пример. Каждый раз, когда у вас что-то делится пополам после каждой итерации, подумайте о Log!

Ben Hoffstein 23.09.2008 19:55

Я видел логарифмы, используемые для отображения облаков тегов. Эта страница объясняет это:

Алгоритм распределения шрифтов облака тегов

Наиболее очевидное использование в каждом примере программирования - точность. Проще говоря, подумайте о хранении целых чисел без знака. Сколько бит нужно для хранения X? Ну, максимальное значение, которое вы можете сохранить в n битах, равно 2 ^ n - 1, поэтому вам может потребоваться log_2 X + 1 бит для хранения X. Теперь вы можете легко выбрать short, int, word, long и т. д.

Журналы - это разновидность метаарифметики. Это способ думать о каждом числе как о (возможно, фиксированной) базе, возведенной в степень. Операции выполняются только с экспонентами. Это означает, что вы можете выполнять умножение и деление, выполняя сложение и вычитание журналов. Другими словами, вы помещаете свои данные в пространство журнала, выполняете набор арифметических операций и возвращаете их в пространство, отличное от журнала. Если потеря точности с плавающей запятой и накладные расходы на преобразование в пространство журнала или из него невелики, то вы можете получить общую победу во времени.

Один хитрый трюк, который вы можете сделать с журналами, - это вычислить количество символов, которые число займет при печати, взяв логарифмическую базу-2 числа и разделив ее на лог-базу-10 (2), что является постоянным временем. по сравнению с набором умножителей.

Я полагаю, вы слышали о логарифмах с контекстом потребляемого времени.

Конкретный пример - алгоритмы поиска. Учитывая набор упорядоченных данных (представьте себе отсортированный массив int), вы хотите найти индексный ключ для значения в этих данных. Мы можем извлечь выгоду из того факта, что массив отсортирован (например, 1, 2, 6, 192, 404, 9595, 50000). Допустим, мы хотим найти индекс для значения 2. Мы можем минимизировать пространство поиска, отбирая (игнорируя) половину массива на каждом шаге. Мы начинаем этот поиск с проверки значения в середине массива. В массиве 7 значений, затем мы делаем индекс 7/2 = 3,5 = 3 как int. array [3] равен 192. Значение, которое мы ищем, равно 2, поэтому мы хотим продолжить поиск в нижней половине области поиска. Мы полностью игнорируем индексы 4, 5, 6, поскольку все они выше 192 и, в свою очередь, также выше 2. Теперь у нас есть пространство поиска, которое выглядит как (1, 2, 6). Затем мы снова индексируем в середину (повторяем процесс) и сразу же находим 2. Поиск завершен, индекс до 2 равен 1.

Это очень маленький пример, но он показывает, как работает такой алгоритм.

Для 16 значений вам нужно выполнить поиск не более 4 раз. Для 32 значений вы выполняете поиск максимум 5 раз, 64 значения 6 раз и так далее. 1048576 значений ищутся за 20 шагов. Это намного быстрее, чем сравнивать каждый элемент в массиве по отдельности. Конечно, это работает только для отсортированных наборов данных.

Логарифмы довольно часто используются в диаграммах и графиках, когда одна или обе оси покрывают большой диапазон значений.

Некоторые природные явления лучше всего выражаются в логарифмической шкале; некоторые примеры - уровни звукового давления (SPL в дБ) и магнитуды землетрясения (шкала Рихтера).

Один пример из многих: начисление сложных процентов по очень маленькой ставке с большим количеством периодов.

Вы можете сделать это самым простым способом, даже используя быстрое возведение в степень, но точность может пострадать из-за того, как хранятся числа с плавающей запятой, а вычисление s * r power n по-прежнему требует O (ln (n)) операций.

С логарифмами это несколько точнее.

A = ln (s * r мощность n) = ln (s) + n * ln (r)
Два поиска в вашей базе данных логарифмов дают вам ln (s) и ln (r), при этом ln (r) начинается с очень малого, а числа с плавающей запятой работают с максимальной точностью около 0 result = exp (A), здесь обратный поиск.

Это также единственный действительно эффективный способ, если вы работаете с нецелыми показателями, например, для извлечения кубических корней.

Ознакомьтесь с Open Courseware MIT: Введение в алгоритмы. Бесплатное обучение. Потрясающий.

Выглядит действительно очень интересно, но охватывает ли это логарифмы?

Charles Roper 23.09.2008 20:22

Я рекомендую д: История числа как хорошее обоснование важности логарифмов, их открытия и отношения к природным явлениям.

Другой способ взглянуть на это - посмотреть на количество базовых множителей в числе. Я уверен, что вы можете увидеть, как это все соотносится, в следующих примерах.

Десятичный (основание 10):

  • log10 (1) = 0, (10 ^ 0) = 1
  • log10 (10) = 1, (10 ^ 1) = 10
  • log10 (100) = 2, (10 ^ 2) = 100
  • log10 (1000) = 3, (10 ^ 3) = 1000
  • log10 (10000) = 4, (10 ^ 4) = 10000
  • log10 (100000) = 5, (10 ^ 5) = 100000

Двоичный (основание 2):

  • log2 (1) = 0, (2 ^ 0) = 1
  • log2 (2) = 1, (2 ^ 1) = 2
  • log2 (4) = 2, (2 ^ 2) = 4
  • log2 (8) = 3, (2 ^ 3) = 8
  • log2 (16) = 4, (2 ^ 4) = 16
  • log2 (32) = 5, (2 ^ 5) = 32
  • log2 (64) = 6, (2 ^ 6) = 64
  • log2 (128) = 7, (2 ^ 7) = 128

Шестнадцатеричный (основание 16):

  • журнал16 (1) = 0, (16 ^ 0) = 1
  • журнал16 (16) = 1, (16 ^ 1) = 16
  • log16 (256) = 2, (16 ^ 2) = 256
  • журнал16 (4096) = 3, (16 ^ 3) = 4096
  • журнал16 (65536) = 4, (16 ^ 4) = 65536

Если вы хотите мыслить переменными:

  • журнал N (Икс) = Y
  • (N ^ Y) = Икс

Многие (многие!) Отношения в реальном мире логарифмические. Например, меня не удивит, если распределение оценок репутации в Stack Overflow будет журнал нормальный. Подавляющее большинство пользователей будет иметь оценку репутации 1, а у горстки людей будет недостижимо высокая репутация. Если вы примените к этому распределению логарифмическое преобразование, оно, вероятно, будет почти линейным. Быстрое сканирование https://stackoverflow.com/users?page=667 показывает, что это правда.

Возможно, вы более знакомы с концепцией Длинный хвост, которая представляет собой приложение логарифмического распределения.

Одно из самых "крутых" применений логарифмов, которое я нашел, - это Спиральное хранилище. Это хеш-таблица, которая позволяет вам разделять одну корзину за раз по мере роста таблицы, перемещая менее половины записей в этой корзине в ту же новую корзину. В отличие от линейного хеширования, где производительность изменяется циклически и все сегменты имеют тенденцию разделяться примерно в одно и то же время, спиральное хеширование обеспечивает хороший и плавный рост таблицы.

Он был опубликован около 30 лет назад Г. Н. Мартином, о котором мне не удалось узнать много, кроме того факта, что он также изобрел Кодирование диапазона. Похоже на умного парня! Мне не удалось получить копию его оригинальной статьи, но статья Пер-Оке Ларсона «Динамические хеш-таблицы» имеет очень четкое описание.

В качестве примера того, о чем говорит Крис, алгоритм, который изменяет сложность в зависимости от количества бит в значении, (вероятно) будет иметь эффективность, описываемую O (log (n)).

Другой повседневный пример экспонент (и, следовательно, логарифмов) имеет формат Числа с плавающей запятой IEEE.

Логарифмическая функция - это просто функция, обратная экспоненциальной функции, в том же смысле, что вычитание является обратным сложению. Так же, как это уравнение:

a = b + c

утверждает тот же факт, что и это уравнение:

a - c = b

это уравнение:

b ** p = x

(где ** возводится в степень) утверждает тот же факт, что и это уравнение:

log [base b] (x) = p

Хотя b может быть любым числом (например, log [base 10] (10,000) = 4), «естественной» базой для математики является e (2,718281828 ...), о котором глянь сюда.

«Общие» логарифмы, которые чаще используются в технике, используют основу 10. Быстрая и грязная интерпретация общего (с основанием 10) логарифма некоторого числа x заключается в том, что оно на единицу меньше, чем количество десятичные цифры, необходимые для выражения чисел размером x.

В моем собственном исследовании я наткнулся на несколько полезных ресурсов:

Раздел логарифмов Академии Хана

Это потрясающий набор уроков по логарифмам. Этот комментарий шестиклассника хорошо подводит итог:

Thank you so much. This week, my math teacher told me to challenge myself, so I tried logarithms. At first I was like, 'I can't do this, it's too hard'. Then I watched the video, and now they're even fun! I'm in 6th grade, my math teacher is impressed. I can't thank you enough.

Ruby Quiz # 105: Турнирные матчи

Эта статья содержит хороший пример использования журнала по базе 2 для определения количества раундов, необходимых для завершения турнира на выбывание с учетом команд Икс.

Интуитивное руководство по экспоненциальным функциям и др.

Отличное, интуитивно понятное (как и следовало ожидать, учитывая название) руководство по е, основанию натурального логарифма. Множество иллюстраций и примеров делают эту статью жемчужиной.

Демистификация натурального логарифма (ln)

Это продолжение статьи о е и обсуждает натуральный логарифм (ln), который, используя интуитивно понятное объяснение, данное в статье, «дает вам время, необходимое для достижения определенного уровня роста».

На самом деле на сайте Лучшее объяснение есть много хорошего контента. Поистине великолепный ресурс.

Еще один инструмент, с которым я сталкивался раньше, но о котором полностью забыл, - это Instacalc. Судя по всему, это тот же человек - Калид Азад - автор сайта Better Explained. Это действительно полезный инструмент, когда вы занимаетесь математикой.

+1 за упоминание Калид Азад!

Yatharth Agarwal 24.04.2012 18:08

Демистификация натурального логарифма (ln) в BetterExplained - лучшее, что я нашел. Он очищает основы от концепций и помогает понять лежащие в основе концепции. После этого все кажется легкой прогулкой.

Вот несколько сайтов, которые я использовал:

Я использовал логарифмы для расчета годовой оценки стоимости дома, чтобы определить, был ли продавец честен.

Уравнения оценки дома

Вот основное уравнение:

  • Предыдущая цена = p
  • Новая цена = n
  • Коэффициент признания = r
  • Годы признательности = y

p * (1 + r)^y = n

Итак, если 6 лет назад цена составляла 191 000 долларов (проверяя сайт вашего модного аудитора), а запрашиваемая цена - 284 000 долларов, какова будет норма оценки (без учета каких-либо одноразовых затрат на улучшение)?

191,000 * (1 + r)^6 = 284,000

(1 + r)^6 = 284,000 / 191,000 = 1.486

Using a property of exponents and logarithms…

6 ( log (1 + r) ) = log 1.486
log (1 + r) = (log 1.486) / 6 = 0.02866

Using another property of exponents and logarithms…

10 0.02866 = 1 + r
1.068 = 1 + r
r = 1.068 – 1 = 0.068 = 6.8%  (kind of high!)

Чтобы определить, какая будет разумная цена ... используйте 4% и учитывайте любые улучшения, которые они сделали (которые должны быть указаны в веб-идентификаторе, который они были основными ... но это не будет включать ремонт ванной комнаты / кухни и т. д.)

191,000 * (1 + 0.04)^6 = n
n = 241,675 + reasonable cost of improvement 
which of course will depreciate over time 
and should not represent 100% of the 
cost of the improvement

Другие вопросы по теме