В этой статье обсуждается роль математики в жизни программиста. Мы не изучаем такие профессии, как искусственный интеллект, создание компьютерных моделей или компьютерная графика, но делаем упор на базовую математику.
Этот контент создан в большей степени для новичков в ИТ-индустрии. Однако в их исследованиях основной упор делался на языкаи создания программ и опыту, чем принципам.
Как выучить математику?
Большинству математика является непонятной наукой. Многие из этих идей исходят из неправильных образовательных принципов. В сущности, следование этим рекомендациям может облегчить вам жизнь.
При изучении математики существует два уровня осознания. Первый уровень - идеология. Знание конкретного объекта. Какое решение проблемы? Где это используют? Вторым уровенем понимание является глубинное. Это основательное исследование задачи и его решения. Возможно, вам потребуется подробно разобраться в проблеме. Но по большей части это неплохая идеология.
Математика не любит слов. Допустим, вы читаете статью, вы находите непонятные слова. Избегать их не стоит. Поскольку в дальнейшем вы поймёте, что с определенного слова вы перестали что-то понимать. Когда вы чего-то не уловили, стоит немедленно остановиться.
Дискретная математика
Раздел математики, занимающийся разделенными на части объектами (допустим, графикой, автоматизацией, логическими инструкциями).
С одной стороны, каждая проблема, решаемая с помощью программирования, связана с математикой. Так что эта информация окажется очень важной для вас.
Логика
Системная наука. Это сердце информатики. Это официальная система, потому что это язык всех языков программирования. Однако не обязательно погружаться в теорию очень глубоко, для того чтобы искать практическое использование данной науки в программировании и решении примеров.
Было бы здорово, если бы вы могли написать решение задачи. Однако вы должны понять, как доказать, что код, который вы написали, выполняет свои функции корректно. Многие программы могут решать некоторые математические задачи. Вы должны суметь объяснить, что проблема решена правильно. В такие моменты приходят спасение методами рассуждения, особенно теоретические расчеты.
На ранних этапах изучения стоит затронуть такие понятия как высказывание, операции и правила вывода. Затем вы можете затронуть более часто используемые области. Попробуйте решать задачи логики. Попробуйте оптимизировать другие элементы управления. Далее мы должны сосредоточиться на логике первого порядка. Это может быть полезно для тестирования программного обеспечения.
Однако раннее решение, которое приходит в сознание, не всегда верное и зачастую не является наиболее красивым. Многие методы преобразования позволяют легко уменьшить размер кода и облегчить чтение.
Комбинаторика
Изучите комбинаторику дискретных наборов, а также отношения их компонентов. Разработчики часто находят ряд элементов, которые необходимо изучить, чтобы найти решение на основе определенных параметров. Это позволяет нам угадать асимметричную сложность алгоритма.
Комбинаторная задача определяется как проблема расчета множества элементов. Полезно обладать базовыми знаниями теории множеств в свойствах операций над множествами. В таком случае, задача переходит к вычислению мощности подмножеств и разбивается на подзадачи. В таком случае вы можете подсчитать элементы, используя правило сложения или умножения, хотя начальное количество комбинаций значительно сложнее. Но начинать нужно с простого.
Теория вероятности
Время от времени интервьюер задаёт вопрос на собеседовании, чтобы убедиться, что кандидат смел. Вопрос следующий. "Вот отрезок, который начинается с буквы А и заканчивается буквой Б. Нарисуйте две точки наугад. Какова будет средняя длина самого длинного отрезка." или "Представьте треугольник, на одной из вершин которого находится муха. Допустим она летает с вершины на вершину в течение трёх секунд, а отдыхает по секунде. Её путь выбирается случайно. Каково среднее время возврата мухи в начальную точку?".
Это вопрос по теории вероятностей. В программировании такие задачи тоже встречаются. Чтобы оценить среднюю скорость вашего алгоритма или установить часто задаваемые параметры для решения реальных проблем, вам необходимо использовать вероятностный подход.
Теория вероятностей разделена на две части. Дискретную и непрерывную. Теоретически дискретная - это подмножество непрерывной. Однако как решить проблему - это совсем другое. Опять же, простейшей отправной точкой является то, что дискретная теория вероятностей часто приводит к смешению проблем. К тому же, теоретическая часть дискретности проще.
Полное понимание теории непрерывной вероятности требует знания принципов математического анализа, особенно концепции интегрирования. Большинство задач требует умения вычислять площадь обычных фигур. В основе математической статистики и машинного обучения лежит теория непрерывной вероятности. Вам следует начать с изучения теории вероятностей в книге Ричарда Хансена "Вероятность и статистика" или "Моделирование".
Теория графов
Вы слышали о проблеме Кенигсберга?
«Можно ли пересечь семь мостов Кенигсберга, не переходя по одному мосту дважды?» Мы знаем, что на этот вызов нет ответа. Теория графов решает эту проблему.
Графы - это очень простые представления нелинейных структур, обычно используемых в реальных задачах. Это отличается от простых линейных структур, таких как массивы или списки. С графами работать сложнее.
Изучите базовые задачи теории графов, потому что у многих задач имеются доказанные оптимальные решения.
Теория чисел и криптография
Вы когда-нибудь задумывались, почему так много интереса к простым числам? Почему работает шифрование RSA? В чем разница между http и https, что такое сертификат безопасности?
Эти проблемы исследуются с помощью криптографии. На самом деле, эта наука немного сложна и трудна, может быть не совсем понятно, как работает тот или иной алгоритм. С другой стороны, одна небольшая ошибка может повредить всю систему шифрования.
Дискретная оптимизация
Чтобы найти максимум или минимум функции, нужно найти производную этой функции и приравнять ее к нулю. Решение уравнений приводит к локальному экстремуму. Но если вы хотите найти максимум в целых числах, вам нужно найти ближайшее число, которое следует выбирать, но именно целое, а не дробное. Когда задача имеет несколько вычислений, приходится постоянно переводить из дробных в целые, что может приводить к ошибкам. Иногда вам нужно выбирать из разрывов, которые увеличиваются с каждым разом. Но есть и худшая ситуация. Порой непрерывной функции не существует. Или если у вас очень много вариантов (если требуется рассчитать варианты самостоятельно).
Кажется, что такие проблемы не всегда удается решить за нормальное время. К таким задачам относят, например, задача Коммивояжера или задачи линейного программирования. Порой можно выбрать неточные решения и воспользоваться некоторыми округлениями. Все это можно найти в курсе Discrete Optimization на Coursera.
Наконец, для тех, кто интересуется дискретной математикой, мы представляем более подробный практический учебник по дискретной математике. Это знаменитая книга «Конкретная математика», написанная в неформальном стиле Кнутом, Грэмом и Паташником, изложение которой дополнено комментариями. Хотя эта книга очень полезна, чтобы развить навыки решения проблем, есть много тем, которые могут быть полезны только для олимпиадной программы.
Что делать далее?
Для хорошего математического фундамента зачастую хватает двух первых курсов, которые изучают в высших учебных заведениях. Дискретная математика расширяется разделами, называемый линейной алгеброй. Общая алгебра, математический анализ, аналитическая геометрия, простые дифференциальные уравнения, оптимизация. Однако, характер решаемых задач может расширять этот список, добавляя дифференциальную геометрию или физику.