Как стать автором
Поиск
Написать публикацию
Обновить
2006.51
Timeweb Cloud
То самое облако

Топ-5 алгоритмов из курса матана, которые реально пригодятся в работе

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров28K

Всем привет. Сегодня хочу затронуть тему матана, чтобы показать как его можно применять на реальных задачах. Думаю каждый, кто учил матан часто задавался вопросами: «Где это вообще пригодится?», «Зачем это нужно?», «Как это может помочь?» и т. д. Так вот, чтобы эти вопросы отпали раз и навсегда предлагаю свой топ-5 алгоритмов из курса матана с конкретными примерами их применения в работе.

❯ 1. Метод Ньютона (касательных)

Представьте, что вам нужно найти корень уравнения x^3 -2x-5=0. Точный ответ неизвестен, а перебирать числа наугад — слишком медленно. Здесь на помощь приходит метод Ньютона — алгоритм, который используют в машинном обучении, рендеринге 3D-игр и даже при расчёте кредитных ставок. 

Суть метода?

  • Геометрическая аналогия: «Метод Ньютона — как навигатор для слепого: он „ощупывает“ кривую касательной и шаг за шагом двигается к корню».

  • Формула: 

Формула Метод Ньютона (касательных)
Формула Метод Ньютона (касательных)

Всё, что нужно — знать функцию и её производную. Алгоритм напоминает градиентный спуск, но работает точнее.

# Поиск квадратного корня из 2 (≈1.4142)

f = lambda x: x**2 - 2

df = lambda x: 2*x

x = 1.0

for _ in range(5):

    x = x - f(x)/df(x)

print(x)  # Результат: 1.41421356237

Как можно заметить мы сделали всего 5 итераций — и ошибка меньше 0.00001!

В чём преимущество этого метода?

  1. Перебор требует 1000 шагов, метод Ньютона — 5, отсюда следует экономия вычислительных ресурсов.

  2. В отличие от градиентного спуска, не нужно подбирать learning rate, что делает его более удобным.

Где может пригодиться?

  • ML: В логистической регрессии метод Ньютона-Рафсона находит оптимальные веса в 3 раза быстрее, чем SGD.

  • Графика: Используется в Unreal Engine для расчёта столкновений частиц.

  • Финтех: Банки вычисляют IRR (внутреннюю норму доходности) за миллисекунды.

С какими «подводными камнями» можно столкнуться?

Метод не идеален: если начать с нуля, он сломается (деление на ноль). А для функции может зациклиться. Но эти проблемы решаются выбором „умного“ стартового приближения.

Вывод:

Метод Ньютона — это как швейцарский нож для расчётов: простой, мощный и незаменимый в арсенале разработчика. Попробуйте реализовать его для своей задачи — и убедитесь сами.

❯ 2. Ряды Фурье

Когда вы слушаете музыку в Spotify, делаете МРТ в больнице или загружаете мем в JPEG, в фоне работает математический инструмент, придуманный ещё в 1807 году. Ряды Фурье — это «математический микроскоп», который раскладывает любые сигналы на частоты. Сегодня эта абстракция из курса матана стала основой цифрового мира.

Суть метода:

Главный принцип: Любую периодическую функцию можно представить как сумму простых синусов и косинусов с разными частотами и амплитудами». 

Формула:

Формула для периода 2π
Формула для периода 2π

Представьте, что вы разобрали аккорд на пианино на отдельные ноты — это и есть преобразование Фурье.

Пример с кодом:

# Генерация сигнала = сумма 2-х синусов (частоты 5 Гц и 20 Гц)

import numpy as np

t = np.linspace(0, 1, 1000)

signal = np.sin(2*np.pi*5*t) + 0.5*np.sin(2*np.pi*20*t)

# Визуализация

import matplotlib.pyplot as plt

plt.plot(t, signal)

plt.title("Сигнал = 5 Гц + 20 Гц")

Ряд Фурье „увидит“ обе частоты (5 и 20 Гц) и их амплитуды (1.0 и 0.5)

Результат работы кода
Результат работы кода

В чём преимущество?

Ряды Фурье (и их цифровые версии — БПФ/DFT) — это не просто абстрактная математика. Их ключевая сила в том, что они переводят сложные данные в форму, которую легко анализировать, обрабатывать и сжимать.

  • Универсальность: Можно разложить что угодно: звук, изображение, биение сердца, курс акций.

    Пример: Запись голоса → спектр частот → можно удалить шум (например, фоновый гул).

  • Эффективное сжатие данных: Отбрасываем «неважное».

    • Человеческое ухо/глаз не воспринимают все частоты.

    • MP3: Удаляются звуки за пределами 20 Гц – 20 кГц.

    • JPEG: Высокие частоты (мелкие детали) сжимаются сильнее.

  • Результат: Файлы в 10–100 раз меньше без заметной потери качества.

  • Быстрота вычислений (БПФ): O(n log n) вместо O(n²)

    • Прямое вычисление ряда Фурье для N точек требует ~N² операций.

    • Быстрое преобразование Фурье (FFT) сокращает это до N log N.
      Пример:

      • Анализ аудио в реальном времени (например, Shazam).

      • Мгновенная обработка МРТ-снимков.

Где может пригодиться? 

  1. Обработка сигналов

    • Шумоподавление в микрофонах (например, в Zoom).

    • Работа радаров и МРТ (анализ радиочастотных сигналов).

  2. Сжатие данных

    • JPEG: Дискретное косинусное преобразование (DCT) — «родственник» Фурье.

    • MP3: Удаление частот, которые не слышит человеческое ухо.

  3. Финансы и наука

    • Предсказание циклов на фондовом рынке (анализ временных рядов).

    • Расшифровка ДНК (периодические паттерны в геноме).

С какими «подводными камнями» можно столкнуться?

Ряды Фурье работают идеально только для периодических сигналов. Для реальных данных (например, аудиозаписи) используют:

  • Дискретное преобразование Фурье (DFT) для цифровых сигналов.

  • Оконные функции (Ханна, Хэмминга), чтобы избежать „утечек“ частот.

Вывод: 

Ряды Фурье — это не просто абстракция из учебника. Каждый раз, когда вы отправляете голосовое сообщение или смотрите стрим, они работают на вас. Попробуйте разложить свой сигнал через numpy.fft — и увидите мир частот!

❯ 3. Градиентный спуск

Каждый раз, когда нейросеть распознаёт ваше лицо в телефоне или сервис доставки прокладывает оптимальный маршрут — в фоне работает алгоритм, придуманный ещё в 1847 году. Градиентный спуск — это „компас“, который помогает компьютерам находить лучшие решения в море данных. 

Суть метода:

Главный принцип: Представьте, что вы спускаетесь с горы в тумане. Самый быстрый путь вниз — идти в направлении наибольшей крутизны. Градиентный спуск делает то же самое с функцией потерь.

Формула:

Формула обновления параметров:
Формула обновления параметров:

Пример с кодом:

# Пример: поиск минимума f(x) = x^2 + 5*sin(x)

def gradient_descent(df, x0, eta=0.1, epochs=100):

    x = x0

    for _ in range(epochs):

        x = x - eta * df(x)

    return x

df = lambda x: 2*x + 5*np.cos(x)  # Производная

x_min = gradient_descent(df, x0=10)

print(f"Найден минимум: x = {x_min:.3f}")

В чём преимущество метода?

  • работает с функциями от миллионов переменных (например, в GPT-4).

  • Вычислительная сложность линейна от числа параметров.

  • Применим почти к любой оптимизационной задаче:

    • Обучение нейросетей (backpropagation — это градиентный спуск),

    • Оптимизация бизнес-процессов (минимизация издержек),

    • Настройка гиперпараметров в науке.

Где применяется?

  • Машинное обучение: Обучение нейросетей (от линейной регрессии до трансформеров).

  • Логистика: Оптимизация маршрутов доставки (например, в Amazon).

  • Финансы: Алгоритмический трейдинг (минимизация риска).

  • Медицина: Подбор дозировки лекарств (минимизация побочных эффектов).

С какими «подводными камнями» можно столкнуться?

Градиентный спуск — не волшебная таблетка. Вот что может пойти не так:

  • Слишком большой шаг (η): алгоритм «перепрыгнет» минимум.

  • Локальные минимумы: остановка в субоптимальной точке.

  • „Плато“: медленное обучение на пологих участках.

Вывод:

Градиентный спуск — это „кирпичик“ современного ИИ.

❯ 4. Метод наименьших квадратов (МНК)

Когда врач прогнозирует действие лекарства, Netflix советует вам фильм, а биржа пытается угадать курс акций — все они используют метод, придуманный... для расчёта орбит комет. Метод наименьших квадратов (МНК) — это математический „детектор трендов“, который находит закономерности даже в хаотичных данных.

Суть метода:

Главный принцип: Найти линию (или кривую), которая минимизирует сумму квадратов отклонений всех точек данных.

Формула:

Формула метода наименьших квадратов (МНК)
Формула метода наименьших квадратов (МНК)

Представьте, что вы натягиваете резинку между гвоздиками (точками данных) так, чтобы она была ближе всего ко всем сразу.

Пример с кодом:

# Подгонка прямой к данным (y = ax + b)

import numpy as np

from sklearn.linear_model import LinearRegression

X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # Данные

y = np.array([2, 3, 5, 7, 8])  # Цели

model = LinearRegression().fit(X, y)  # МНК под капотом!

print(f"Уравнение: y = {model.coef_[0]:.2f}x + {model.intercept_:.2f}")

Вывод: «Уравнение: y = 1.60x + 0.20

В чём преимущество метода?

  • Даёт точные результаты даже при 20-30% ошибках в данных (например, в экономике).

  • Решается аналитически — быстрее многих альтернатив.

  • Коэффициенты a и b имеют понятный смысл (например: «цена растёт на $1.6 за каждый новый признак»)

Где применяется?

  • Машинное обучение: Линейная регрессия (предсказание цен, спроса).

  • Геодезия: Калибровка GPS/ГЛОНАСС по контрольным точкам.

  • Медицина: Анализ «доза-эффект» (подбор безопасной дозы).

  • Финансы: Прогноз биржевых трендов (скользящие средние).

С какими «подводными камнями» можно столкнуться?

МНК как и все методы не идеален. Вот где он даёт сбой:

  • Выбросы: Один аномальный пункт может исказить всю модель (решение: использовать М-оценки).

  • Не линейность: Если данные похожи на синусоиду — нужна полиномиальная регрессия.

  • Мультиколлинеарность: Когда предикторы коррелируют (например, «вес» и «калорийность»).

Вывод: 

МНК — это „швейцарский нож“ аналитика. Отлично может найти закономерности даже в хаотичных данных. Можете убедиться сами на своих данных.

❯ 5. Цепи Маркова

Когда вы читаете предложение, дополненное смартфоном, или получаете персональную рекламу — возможно, в этот момент работает модель, созданная русским математиком ещё в 1906 году. Цепи Маркова — это «машина вероятностных переходов», которая легла в основу PageRank, ChatGPT и даже ИИ для игр. Сегодня эта абстракция из теории вероятностей управляет цифровым миром.

Суть метода:

Главный принцип: Следующее состояние системы зависит только от текущего — никакой памяти о прошлом»(свойство марковости).

Представьте пьяного человека, который шагает в случайном направлении, но его следующий шаг зависит только от того, где он стоит сейчас. Так и работают цепи Маркова. 

Пример с кодом (генератор текста):

import random

# Правильная структура цепи Маркова:

# Каждое состояние ведёт к словарю {следующее_состояние: вероятность}

transitions = {

    'start': {'I': 0.6, 'You': 0.4},

    'I': {'love': 0.7, 'hate': 0.3},

    'You': {'win': 0.5, 'lose': 0.5},

    'love': {'Python.': 1.0},  # Конечные состояния должны быть словарями

    'hate': {'homework.': 1.0},

    'win': {'!': 1.0},

    'lose': {'.': 1.0}

}

def generate():

    # Выбираем первое слово на основе 'start'

    current_word = random.choices(

        list(transitions['start'].keys()),

        weights=transitions['start'].values()

    )[0]

    sentence = [current_word]

    

    # Продолжаем, пока не достигнем конечного состояния (точка, воскл. знак)

    while current_word not in ['.', '!', '...']:

        next_words = transitions[current_word]

        current_word = random.choices(

            list(next_words.keys()),

            weights=next_words.values()

        )[0]

        sentence.append(current_word)

    

    return ' '.join(sentence)

print(generate())  # Пример: "You win !" или "I love Python."

Вывод: You win !

Диаграмма для демонстрации работы цепей Маркова
Диаграмма для демонстрации работы цепей Маркова

В чём преимущество метода?

  • Нужны только текущее состояние и матрица переходов (обычная таблица вероятностей).

  • Сравните с нейросетями, где требуются тысячи параметров.

  • Перемножение матриц — операция, которую GPU выполняет молниеносно.

  • Цепь из 1000 состояний хранится как матрица 1000×1000 чисел (вместо гигабайтов весов нейросети).

Где применяется?

  • Поиск: Ранжирование в Google/Yandex.

  • NLP: Автодополнение в Gmail/iPhone.

  • Геймдев: Поведение NPC в Civilization.

  • Биология: Моделирование мутаций ДНК.

С какими «подводными камнями» можно столкнуться?

Цепи Маркова — не волшебство. Главные ограничения:

  • Нет долгой памяти: Не помнит состояния 2 шага назад

  • Стационарность: Вероятности должны быть постоянными

  • Проклятие размерности: Для сложных систем нужны огромные матрицы

Вывод:

Цепи Маркова окружают нас — от ленты соцсетей до умных колонок. Они очень практичны и легки в понимании.


В заключение этой статьи хочу напомнить вам, что хороший программист = хороший математик. Можно было рассмотреть ещё тысячи, десятки тысяч очень полезных алгоритмов, но уже на этом этапе можно понять важность матана и в целом всей высшей математики в нашей современной жизни.


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале 

📚 Читайте также:

Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.

Теги:
Хабы:
+66
Комментарии49

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud