Computer Science
Алгоритмы и теория «на пальцах»
Фундамент, который отличает кодера от инженера: алгоритмы, структуры данных, оценка сложности и то, как машина исполняет программы. Объясняем интуитивно, а строгость — там, где она помогает.
Статьи рубрики 15
Когда ты вводишь пароль на любимом сайте, он почти наверняка не сохраняет его буквами. Разбираемся, как сервер проверяет твой пароль, по факту его не зная, — и почему «12345» взломают за доли секунды.
O(n), O(n²), O(log n) — за этими значками прячется одна простая идея: как растёт время работы, когда данных становится больше. Объясняем без формул.
Берёшь два кода, которые делают одно и то же, запускаешь — и один летит, а другой ползёт. Разбираемся, почему «одинаковое» на самом деле очень разное и где прячется скорость.
Два потока хотят добавить деньги на один счёт — и в итоге одна из операций просто исчезает. Это не магия и не баг компилятора, а состояние гонки: коварная ошибка, из-за которой параллельные программы ведут себя непредсказуемо.
Почему сайт, на который ты заходишь второй раз, грузится мгновенно? Почему процессор не ждёт память целую вечность? Ответ один и тот же на всех уровнях — кэш. Разбираемся, как маленькая хитрость ускоряет вообще всё.
Курьер развозит десять заказов по городу — и кто-то должен решить, в каком порядке. Этим занимается не диспетчер, а алгоритм, который умеет находить кратчайший путь среди миллионов вариантов за доли секунды.
Архиватор ужимает файл вдвое, но при распаковке возвращает всё до последней буквы. Никакой магии — внутри хитрая идея 25-летнего студента, придуманная в 1952 году. Разбираемся, как коротким буквам достаются короткие коды.
Учитель загружает твоё сочинение в систему, и через пару секунд она выдаёт: «совпадение 14%». Но как машина за это время сравнила твой текст с миллионами чужих? Разбираем магию без магии.
Представь библиотеку, где не нужно искать книгу по полкам — ты просто называешь имя, и она сама падает тебе в руки. Хеш-таблицы делают ровно это с данными: находят нужное почти мгновенно, не перебирая остальное.
Кассир хочет дать сдачу как можно меньшим числом монет — а компьютер хочет того же, но не угадывая. Разменяй монеты грамотно, и ты на самом деле освоишь динамическое программирование — приём, на котором держатся маршруты в навигаторе и проверка орфографии.
Жадный алгоритм всегда хватает то, что прямо сейчас выглядит выгоднее всего. Иногда это гениально просто, а иногда заводит прямо в тупик. Разбираемся, когда жадности можно доверять, а когда она тебя подведёт.
Немецкая шифровальная машина «Энигма» казалась неприступной: число вариантов настроек было астрономическим. Но математик Алан Тьюринг придумал алгоритм, который не перебирал их все, а отбрасывал ложные. Разбираемся, как это работало.
Что будет, если функция позовёт сама себя? Не бесконечная катастрофа, а один из самых элегантных приёмов в программировании. Разбираемся, как рекурсия решает большие задачи, разбивая их на копии самих себя поменьше.
Один алгоритм находит ответ мгновенно, а другой завис бы до конца Вселенной — хотя оба решают одну задачу. Разбираемся, что такое сложность алгоритма и почему загадочное O-большое — главный язык программистов о скорости.
Разложить колоду из 52 карт по порядку легко. А миллион чисел? Если действовать в лоб, компьютер будет молотить часами. Разбираемся, как пара хитрых идей превращает вечность в доли секунды.