Обновить
268.42

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

Как научиться программированию разрабатывая игры

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели13K

Если вы учились программировать в конце 80x-начале 90х, то наверняка делали это на ZX Spectrum, БК-0010 или MSX. Во всех этих компьютерах был встроенный язык програмирования. Кто-то начинал сразу с машинных кодов Радио-86РК. В любом случае первыми программами скорее всего были игры.

Но любительское программирование началось задолго до 90х. Посмотрим, какие игры предлагались раньше для начинающих программистов и что из этого мы могли бы извлечь для себя сегодня.

Читать далее

simstr — ещё одна строковая библиотека

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели12K

Работа со строками в С++ - зачастую больная боль.

Однако за 25 лет я сумел найти лекарство от этой боли и после 13 лет разработки и испытаний готов поделиться им со всеми страждущими.

simstr — библиотека для использования строк в C++, в которой пишется легко и удобно, а выполняется быстро и оптимально.

Читать далее

APL: математика на стероидах, о которой никто не говорит

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели14K

В 1957 году, когда компьютеры программировались на машинных кодах и ассемблере, канадский учёный Кеннет Айверсон задумался: как сделать описание алгоритмов столь же строгим, как математические формулы, но при этом ещё и сделать интерактивном исполняемым? Да-да, интерактивный язык в 60-х, задолго до пайтона, перла и тикля.

Так родился APL — сначала как академический инструмент для описания алгоритмов в книгах (например, в его работе "A Programming Language" 1962 г.), постепенно эволюционировавший в исполняемый язык.

Но причём здесь 2025-й год спросите вы?

Data Science: APL опередил NumPy/Pandas на 40 лет — матричные операции здесь вшиты в ядро.

Обучение: Лучший способ понять SVD или преобразование Фурье — записать их в APL.

Прототипирование: Проверить идею можно быстрее, чем ChatGPT сгенерирует ответ.

Почему об этом мало говорят? 

Читать далее

Алгоритмическая угадайка от Google: 1 000 000$ как я решил задачу и улучшил свой алгоритм трижды

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели16K

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

Читать далее

Учимся разрабатывать для GPU на примере операции GEMM

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

Привет, Хабр! Сегодня я расскажу про реализацию матричного умножения и особенности разработки для GPU. Познакомлю вас с устройством GPU, объясню, чем отличается программирование от привычного для CPU, какие нюансы нужно учитывать для эффективной реализации операций GEMM. А затем сравним производительность разных подходов к реализации.

Читать далее

Решение задачи коммивояжера (TSP) в реальных приложениях

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.3K

Образовательные программы компьютерных наук и информатики обязательно включают курс алгоритмов, это элегантные решения сложных проблем. Например, одна из самых интересных проблем комбинаторной оптимизации — задача коммивояжёра (TSP, travelling salesman problem). Суть в поиске самого выгодного маршрута, проходящего через указанные точки ровно по одному разу. Сложность задачи при точном решении брутфорсом составляет O(n!). И для неё тоже придумано несколько элегантных алгоритмов. Хотя поиск самого эффективного продолжается до сих пор.

В реальности уже нет коммивояжёров, путешествующих по городам, профессия ушла в прошлое. Но есть курьеры, таксисты, логисты, грузоперевозчики и просто туристы, которые хотят посетить максимальное количество достопримечательностей. То есть задача по-прежнему актуальна. Как же максимально эффективно настоящие бизнесы решают TSP в реальной жизни?

Читать далее

Как я написал алгоритмического бота на Python для торговли по индикаторам на Bybit

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели21K

Полный разбор создания алгоритмического трейдинг-бота с использованием индикатора Bollinger Bands, кластерных сигналов и API Bybit. 1700% прибыли за год использования.

Читать далее

Как мы учимся решать одну из самых сложных задач в метеорологии — прогнозирование количества осадков по часам

Время на прочтение14 мин
Охват и читатели9K

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

Если бы меня попросили назвать слово, которое лучше всего подходит для прогноза осадков, я бы с уверенностью выбрал «сложность». В осадках она подстерегает нас всюду: от способов прогнозирования до оценки качества полученного прогноза. Потому в научных статьях про нейросетевой прогноз погоды (GraphCast, Pangu Weather, Aurora и т. д.) осадки или совсем не участвуют, или прогнозируются раз в 6 часов без упоминания о метриках. Либо же создаётся локальная модель под регион (например, MetNet для США).

В Яндекс Погоде мы используем множество ML‑моделей в рамках наших технологий прогноза Метеум и OmniCast, постоянно их улучшаем и постепенно заменяем на более продвинутые, повышая качество прогноза для наших пользователей. Недавно мы научились прогнозировать грозы, а до этого — улучшили прогноз температуры за счёт использования пользовательских метеостанций.

Меня зовут Стефеев Дмитрий, я разработчик группы ML и качества прогноза в Яндекс Погоде. Сегодня я и моя команда хотим представить новые модели для прогноза осадков и рассказать, почему мы на них перешли и как этот переход повлиял на качество.

Читать далее

Маршрутизация в одноранговых сетях

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели9.1K

С развитием всемирной паутины особую популярность набирают децентрализованные системы, основанные на одноранговых (P2P, пиринговых — эти термины являются синонимичными) сетях. В отличие от традиционных централизованных клиент-серверных моделей, где центральным звеном выступает сервер, обслуживающий клиентов, в одноранговых (децентрализованных) сетях все участники равноправны — здесь отсутствует иерархия и выделенный сервер. Любой участник сети может обмениваться информацией с любым другим, при условии соблюдения правил, или протоколов, используемых в таких сетях.

Стержнем, объединяющим разнородных участников в единую сеть, является возможность обмена информацией между ними. В клиент-серверных системах сетевое взаимодействие организовано достаточно тривиально: все компоненты подключены к центральному узлу — серверу, через который осуществляется передача данных от источников к получателям. В децентрализованных системах ситуация принципиально иная: отсутствует единый коммуникационный центр, и все участники взаимодействуют напрямую друг с другом. Именно поэтому организация сетевого взаимодействия в таких системах представляет собой гораздо более сложную и нетривиальную задачу.

Читать далее

Часть 2. Теория: как работает инерциальная навигация и почему она «плывёт»

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели11K

В основе любой ИНС — инерциальный измерительный модуль (IMU). Типичный IMU включает три взаимно перпендикулярных акселерометра и три гироскопа, иногда ещё три магнитометра (dewesoft.com). Акселерометры измеряют специфическую силу — разницу между истинным ускорением и ускорением свободного падения. Гироскопы измеряют угловую скорость. Магнитометры оценивают вектор магнитного поля Земли и позволяют корректировать курс. Такой 9‑осевой датчик иногда называют «AHRS» — системой ориентации и направления (attitude and heading reference system). В нашем проекте используется MEMS‑IMU с 6 степенями свободы и встроенным термодатчиком.

Читать далее

Теорема о разделяющей оси при обнаружениях столкновений

Время на прочтение11 мин
Охват и читатели9.5K

Для изучения этой статьи вам потребуется базовое понимание методов обнаружения столкновений в узкой фазе, а также знание смежных с данной проблемой геометрических концепций, в частности суммы Минковского.  

Несколько лет назад я посмотрел отличную презентацию от Дирка. В ней он описывал теорему о разделяющей оси, пролегающей между выпуклыми многогранниками (видеослайды). Примерно на 18 минуте (слайд 29) он заводит речь о наложении гауссовых отображений выпуклых многогранников — как они помогают найти грани разности Минковского для этих многогранников.

Читать далее

Оптимальный выбор файловой системы и создание драйвера для OSPI Flash с GitHub Copilot

Время на прочтение5 мин
Охват и читатели9.8K

Файловая система во встраиваемых решениях — критическое звено. От её выбора зависят надёжность, детерминированность и задержки всей системы.

В типичном устройстве она обслуживает запись сигналов, ресурсы для дисплеев и аудиовоспроизведения, логи, файлы веб‑интерфейса, образы прошивок и многое другое.

На практике всплывают одни и те же проблемы: дефрагментация, высокое потребление RAM, плохая детерминированность (плавающие задержки), неустойчивость к сбоям записи/питания и низкая скорость. Нередко корнем оказываются драйверы из SDK производителей чипов: они не оптимизированы для многозадачной среды и часто недоработаны под OSPI.

Я протестировал четыре файловые системы на платформе MC80 с внешней OSPI NOR Flash и разработал специализированный драйвер вместо стандартного из FSP — с полноценной поддержкой OSPI и RTOS.

Читать далее

Кому нужна математика?

Время на прочтение7 мин
Охват и читатели20K

Недавно я прочёл книгу «Кому нужна математика?» Нелли Литвак и Андрея Райгородского — и она меня по-настоящему зацепила. Это короткие, живые рассказы о том, как математика помогает решать важные и неожиданные задачи: от составления расписаний до защиты интернет-трафика. В этом посте я перескажу три истории из книги, которые особенно меня удивили

Читать далее

Ближайшие события

Когда несколько пикселей решают всё: One Pixel атака и способы защиты от неё

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели15K

Удивительно, но факт: несколько изменений в изображении могут полностью поменять вывод нейросети, что ломает заложенную разработчиком логику. В данной статье мы не просто подсветим факт существования One Pixel атаки, но и комплексно разберём архитектурные факторы, которые влияют на устойчивость CV-систем к данному семейству атак.

Читать далее

Часть 1. Как всё началось — страх потеряться в небе и POISK решений

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.4K

Весной 2024 года я — курсант летной школы по классу PPL (частный пилот) с несколькими десятками часов налёта, осознал то, чего старается избегать каждый лётчик: потеряться в пространстве без визуальных ориентиров, например оказался под плотной облачностью без привычного GPS‑сопровождения. Спутниковые сигналы в России с 2022г заблокированы по известным причинам. До этого момента я воспринимал навигатор в телефоне как «дополнительный инструмент». Но когда на панели вдруг погас зелёный индикатор спутников, по спине пробежал холодок: как отработать возврат в аэродромную зону в «белом» небе без визуальных ориентиров?

Известно, что инерциальные навигационные системы (ИНС) могут определять местоположение, ориентацию и скорость объекта без внешних источников. Внутри них наработки десятилетий — набор ускорителей и гироскопов, расположенных ортогонально, и вычислитель, который интегрирует измеренные ускорения и угловые скорости. ИНС — это, говоря простыми словами, «супер‑мертвый пеленг»: она интегрирует собственные ускорения и вращения, чтобы определить, куда и на сколько мы сместились. Достоинство такой системы — полная автономность, независимость от спутников и наземных радиомаяков. Именно это и нужно в эпоху блокировок сигналов, когда GPS может исчезнуть в самый неподходящий момент. К стати — не только в воздухе, но в любой среде — будь‑то тоща воды или космическое пространство.

Однако у классического «мертвого счёта» есть серьёзный недостаток: ошибки интегрирования накапливаются во времени. Даже самые точные акселерометры с погрешностью порядка 10 микрон могут дать ошибку в 100 метров всего за 5 минут полета, если её не корректировать. Таким образом за полетный час рискуем «улететь» на пару километров в сторону и потерять визуальные ориентиры при ВП. Поэтому в авиации инерциальные системы обычно работают в связке с внешними источниками (радиомаяками, GPS и т. п.), которые регулярно сбрасывают накопившийся дрейф. В моем проекте основная задача — обеспечить не менее часа автономной работы с минимальным дрейфом. Предполагается возможность корректировать корректировать свою позицию либо по сигналам VOR DME, либо по триангуляции на вышках СС, либо визуально (подтверждение пилотом прохождения крупных объектов‑маркеров).

Читать далее

Защита от невидимого шума: как ломать и чинить мультимодальные модели

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели4K

Всем привет! Меня зовут Евгений Пищик, и сегодня я хочу поделиться с вами опытом разработки метода переноса нейросетевых атак, над которым я работал в рамках мастерской по сервисам и платформам ИИ в Инженерно‑математической школе НИУ ВШЭ и VK.

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

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

Читать далее

Как мы разработали гибкий пайплайн для прогноза временных рядов любых метрик

Время на прочтение20 мин
Охват и читатели3.5K

Практически каждый ML‑разработчик сталкивался с прогнозированием временных рядов, ведь окружающие нас сущности и метрики зачастую зависят от времени.

Меня зовут Александр Елизаров, я работаю в группе аналитики ключевых показателей в бизнес‑группе Поиска и рекламных технологий. В течение нескольких лет нам приходилось прогнозировать большое количество временных рядов разных доменных областей: от поисковой доли Яндекса до DAU определённых сервисов. Чтобы успешно справляться с этой задачей, мы вместе с коллегами разработали собственный прогнозный фреймворк. В этой статье я расскажу, как создать универсальный и гибкий пайплайн для прогнозирования. Под катом рассмотрим:

— правильно выстроенную иерархию данных;

— методы консистентного предсказания абсолютных и относительных метрик;

— частые проблемы моделей и то, как мы их фиксили;

— а также все важные этапы, о которых нельзя забывать, когда работаешь с временными рядами.

Читать далее

Биомимикрия: как природные структуры вдохновляют инженеров на создание новых технологий. Часть 2

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели1.7K

Привет, Хабр! Природа остаётся величайшим источником инженерных решений, вдохновляя учёных и разработчиков на создание технологий, меняющих мир. От микроскопических слизевиков до крыльев бабочек — биомимикрия открывает новые горизонты, позволяя нам переосмысливать материалы, структуры и механизмы.

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

Часть 1.

Читать далее

Как выбрать оффер? Задача о разборчивой невесте и правило 37%

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели11K

В течение месяца вы проходите собеседования, получаете офферы — и хотите выбрать лучший. Но каждый оффер живёт недолго: если не согласитесь вовремя, к нему уже не вернуться. Как действовать, чтобы выбрать самый лучший?


Это версия классической задачи о разборчивой невесте. У неё есть красивая оптимальная стратегия — правило 37\%. Возможно, вы о нём слышали. Но знаете ли вы, почему оно работает? И как вообще до него додуматься?


Часто алгоритмы — это эвристики, без гарантии оптимальности. Но в этой задаче всё иначе. Мы шаг за шагом переоткроем правило  37 \% и докажем, что он действительно лучший

Недавно я узнал о Теореме о Шансах — более общем подходе, который, неожиданно, работает гораздо проще, чем классическое доказательство. По-русски о ней еще никто не писал

В статье мы разберём эту теорему, выведем правило 37\% и увидим, как в задаче естественно появляется число e — и какой у него смысл на самом деле

Эта задача стоит того, чтобы пройти её до конца. Будет понятно, красиво и интересно

К правилу 37%

Алгоритмы для работы с большими данными в Go: HyperLogLog и Count-Min Sketch

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели3.2K

Алгоритмы для работы с большими данными

Всем привет! Для начала давайте разберем что такое вообще Алгоритмы для работы с большими данными, основная суть алгоритмов для работы с большими данными  — это эффективная обработка огромных объёмов информации при минимальных вычислительных ресурсах (памяти, CPU, диске). Их суть — жертвовать точностью ради скорости и масштабируемости.

Читать далее

Вклад авторов