Какие некоторые математические формулы, которые вы узнали, помогли вам написать лучшие алгоритмы и стать лучшим программистом?
Пример: я узнал о формуле эклюдского расстояния: sqrt((x1-x2)^2+(y1-y2)^2)
которая помогла мне понять, как найти похожие объекты, сравнив 2 фактора.
learning
math
algorithms
GSto
источник
источник
sqrt
шаг. Для плотного внутреннего цикла это может иметь значение.Ответы:
Знание степеней 2 удобно, особенно когда речь идет о битовых операциях низкого уровня.
источник
setsockopt(...SO_KEEPALIVE..)
гораздо легче читать или писать, чемsetsockopt(...16...)
Булева алгебра уже упоминалась, но я хотел привести несколько практических примеров.
Булева алгебра очень часто пригодится, когда вы работаете со сложными логическими выражениями (например, в
if
выражениях).Пара полезных выражений и законов:
Дистрибутивность
Поэтому в следующий раз вы наткнетесь на такое выражение:
Вы можете легко уменьшить его до:
Отрицание и закон де Моргана
Допустим, у вас есть такое утверждение:
и вам нужно построить противоположность этому. Письмо:
будет работать, но выглядит не так круто, как этот эквивалент:
источник
(P -> Q) <=> (!P | Q)
. Я использую его все время, так как очень немногие среды предлагают оператор логической импликации, это очень удобная эквивалентность для ограничений SQL CHECK.По моему опыту, математические формулы используются для очень конкретных расчетов, которые могут или не могут применяться к вашему проекту.
Если вам нужно что-то вычислить, обычно в библиотеке или примере исходного кода есть функция, которая может рассчитать это для вас. Например, функция Excel PMT (), которая вычисляет платежи, необходимые для погашения долга, по X% за периоды Y. Вы действительно хотите знать, как он это вычисляет, или достаточно просто вызвать встроенный?
В последние 10 лет я не думаю, что мне нужно было использовать что-либо из библиотеки Math, кроме Ceil (), Min () и Max (), что показывает, что хотя компьютеры были разработаны для решения математических задач Сегодня общепринятым является принятие решений в отношении потока данных.
Взять, к примеру, Facebook, который имеет огромное количество кода. Возможно, где-то там есть математика, но я подозреваю, что в основном в Crypto API, который, вероятно, является системной библиотекой. Но доступ к базе данных, решения об авторизации, построение страниц и маршрутизация информации, вероятно, не используют много математики.
Да, есть рынки, которые нуждаются в большом количестве математики - финансы, физика, инженерия - но в этих отраслях вашей основной дисциплиной, скорее всего, будет математика / экономика, физика, инженерия и т. Д., Поэтому ваши вопросы будут: «Как я могу написать формула f (x) на языке Y? '
Лучше использовать ваше время, IMO, для изучения алгоритмов (включая обозначение Big O) и шаблонов проектирования.
источник
Нет формулы, которая может сделать вас лучшим программистом.
Навыки, связанные с математикой, могут сделать вас лучшим программистом:
источник
Основные статистические формулы хорошо знать. Я использовал линейную регрессию по крайней мере несколько раз.
источник
Я хотел бы упомянуть ряды Тейлора, которые весьма полезны для быстрого приближения к «более тяжелым» функциям. Например,
sin(x)
около 0 можно приблизить с помощьюx-(x*x*x/6)
.В общем, идея о том, что есть умные способы быстрого приближения вещей вместо вычисления их до последней значащей цифры (хотя для элементарных функций большинство современных процессоров содержат быстрые аппаратные реализации, поэтому использование Тейлора для приближения к греху может быть не столь значительным) увеличение скорости).
источник
Законы де Моргана о преобразовании логических «и» и «или» относительно отрицаний, и несколько связанных более элементарных лакомых слов о булевой логике (таких как двойное отрицание).
источник
Правило трех (тип перекрестного умножения)
+1 для основных статистических формул.
Я видел много ребят с трудом применять это простое правило на базовом коде.
источник
Последовательность и серия математики.
Я видел слишком много школ, которые учат «написать цикл для суммирования всех чисел от x до y» вместо «алгоритмы УДИВИТЕЛЬНЫЕ»
Также ... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
источник
Закон косинусов , очень важный для многих геометрических задач,
особенно определение угла.
источник
a^2 + b^2 = c^2
Программирование - очень широкая область. Математическая формула зависит от того, в какой области программирования вы находитесь. Если вы увлекаетесь графикой, программированием игр, вам необходимо знать больше тригонометрии, геометрии. Программирование игр может быть далее разделено на такие области, как физика, рендеринг, шейдер ... и этот список можно продолжить. Так что если вы эксперт по моделированию физики, то вы должны знать вещи, связанные с физикой.
Если вы в безопасности, вы должны быть экспертом по теории чисел.
В общем, вы можете пойти на комбинацию из них, и когда-либо ваш интерес. Обучение никогда не повредит.
источник
Методы доказательства
В частности, те, которые я использовал с относительной частотой:
Их больше, и я использовал многие из них в тот или иной момент, но я могу вспомнить те 3, которые я использовал с первого взгляда. Они также очень полезны, если вы помните их намерения при написании модульных или интеграционных тестов.
источник
T (n) = aT (n / b) + f (n), a> = 1, b> 1
Основная теорема полезна для программирования. Это позволяет вам решать рекуррентные отношения, которые могут помочь вам найти сложность рекурсивных алгоритмов. Это особенно важно при написании алгоритма «разделяй и властвуй». Грубо говоря, вы можете использовать основную теорему, чтобы получить сложность, если вы знаете сложность каждого «шага» и фактор ветвления.
источник
(те, что в скобках, более «прикладные»)
Трудно дать общие указания, так как это сильно зависит от области, в которой вы находитесь. Но вышеизложенное охватывает основы довольно большого количества инженерных степеней. Имейте в виду, эти категории часто пересекаются (тригонометрия + матричные операции, исчисление + матричные операции и т. Д.).
У меня всегда есть математический справочник рядом. Часто кто-то не уверен в чем-то, и это помогает представить его организованно.
источник
Знание булевой алгебры очень помогает. Это мешает вам писать код как
источник
Для задач оптимизации хорошо понимать логарифмическую вероятность. Например, если вы пытаетесь минимизировать сумму квадратов, это то же самое, что максимизировать логарифмическую вероятность, потому что (грубо говоря)
Другими фаворитами в области настройки производительности являются биномиальные и бета-версии. Их очень просто рассчитать.
Если вы берете 10 случайных выборок состояния программы, и она находится в определенном состоянии для F = 40% времени, то это похоже на эксперимент с подбрасыванием недобросовестной монеты. Количество раз, которое вы увидите в этом состоянии, является биномиальным распределением со средним значением 10 * 0,4 = 4 и стандартным отклонением sqrt (10 * 0,4 * 0,6) = sqrt (2,4) = 1,55.
С другой стороны, если вы берете 10 сэмплов и видите его в таком состоянии на 4 сэмплах, что это говорит вам о том, каков большой F? Возможные результаты: 0, 1, 2, 3, 4, ..., 9, 10. Это 11 вариантов, и вероятность, которую вы видели (4), является пятой. Итак, возьмем 11 одинаковых (0,1) случайных чисел и отсортируем их. Распределение 5-го является распределением F, бета-распределением. Его режим 4/10. Его среднее значение 5/11. Его дисперсия составляет 5 * 6 / (11 ^ 2 * 12) = 0,021, а стандартное отклонение = 0,144.
Многие люди думают, что большое количество образцов необходимо для выявления проблем с производительностью программного обеспечения и избегания поиска ложных. Эти распределения показывают, что небольшое количество образцов может многое рассказать об их стоимости.
источник
Это может быть немного просто, но
G=(V,E)
стоит помнить. Другими словами, граф - это множество вершин и ребер. Графики просто полезны для представления многих вещей.источник