Евклид и классические алгоритмы на числах
Зачем отдельная статья
В введении алгоритм Евклида уже связан с ритмами и НОД. Здесь — чуть больше практики: сложность, применения в коде и соседние «карманные» алгоритмы, которые не требуют графов и сортировок.
Алгоритм Евклида
НОД(a, b) — наибольшее число, делящее оба аргумента без остатка.
АЛГОРИТМ НОД(a, b)
пока b ≠ 0
(a, b) := (b, остаток a от деления на b)
конец пока
вернуть |a|
КОНЕЦ
| Свойство | Значение |
|---|---|
| Время | O(log min(a, b)) — число шагов ограничено логарифмом меньшего аргумента |
| Память | O(1) в итеративной версии |
| История | «Начала» Евклида, ~300 г. до н. э. |
Расширенный алгоритм Евклида дополнительно находит коэффициенты x, y в тождестве Безу: a·x + b·y = НОД(a, b). Это нужно в криптографии (обратимые элементы по модулю).
Где применяется
- Сокращение дробей
p/q— делить числитель и знаменатель наНОД(p, q). - Периодичность событий с циклами разной длины — НОК через
НОК(a,b) = |a·b| / НОД(a,b). - Криптография (RSA и др.) — см. информационная безопасность.
Жадный выбор на каждом шаге
Евклид жадный: на каждом шаге заменяет пару на «меньшую» пару (b, a mod b), не откатываясь назад. Для НОД это даёт оптимум.
Жадный алгоритм в общем случае берёт локально лучший шаг. Локальный оптимум не всегда глобальный — контрпример задача коммивояжёра в тренировке мышления. Для кратчайших путей с неотрицательными весами жадность работает в алгоритме Дейкстры.
Другие классические приёмы (кратко)
| Алгоритм | Задача | Сложность |
|---|---|---|
| Двоичное возведение в степень | aⁿ mod m для больших n | O(log n) умножений |
| Решето Эратосфена | Все простые до N | O(N log log N) |
| Проверка простоты (наивная) | Делители до √n | O(√n) |
Эти алгоритмы часто встречаются в олимпиадной и прикладной математике; в промышленном коде чаще вызывают готовые библиотеки, но понимание шагов помогает отлаживать граничные случаи.
Связь с музыкой и ритмом
Равномерное размещение ударов между паузами — та же схема «вычитания остатка», что и НОД. Один алгоритмический каркас объединяет:
- древнегреческую теорию чисел;
- африканские и балканские ритмы;
- современный анализ данных, где периодичность ищут через делимость длин циклов.
Подробнее контекст — в статье «Алгоритмы» (раздел про алгоритм Евклида).
Связанные материалы
- Нотация Большое O
- Графы — когда задача уже не про одно число, а про сеть
- Базовая информатика, глава 4
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Последовательности действий для решения задач. Введение в алгоритмы. Примеры из реальной жизни для понимания, как на самом деле выглядят алгоритмы в программировании. Регулярные выражения — шаблон для поиска и проверки текста. Введение, лаборатория и маршрут обучения для новичков. Как читать шаблон слева направо — литералы, точка, классы символов, квантификаторы, якоря. Разбор логина, даты, пути и времени по частям. Круглые скобки, захват частей строки, обратные ссылки, альтернатива, поиск и замена в редакторе и коде. Опережающие и ретроспективные проверки (lookahead, lookbehind), несколько условий для пароля, цена после знака доллара. Флаги i, m, g, s и аналоги в .NET; жадные, ленивые и жадные квантификаторы; почему .* захватывает слишком много. Готовые шаблоны для логов, email, URL, IP; grep, ripgrep, sed; типичные ошибки и различия движков. Универсальный алгоритм обработки - инициализация, загрузка, реакция, логика. Если вы начнёте какой-нибудь курс изучать, вероятнее всего как раз затронете в одной из первых тем алгоритмы сортировки и поиска. Оценка времени и памяти. Алгоритмическая сложность и анализ эффективности программ. Нотация Большое O — язык оценки масштабируемости: O(1)…O(n!), примеры на структурах данных, сортировке, поиске и типичных ловушках в коде.Алгоритмы
Тренировка алгоритмического мышления
Регулярные выражения
Регулярные выражения — синтаксис с нуля
Регулярные выражения — группы и замена
Регулярные выражения — проверки вокруг совпадения
Регулярные выражения — флаги и жадность
Регулярные выражения — рецепты и командная строка
Алгоритм обработки
Алгоритмы сортировки и поиска
Анализ эффективности алгоритмов
Нотация Большое O