Как стать автором
Обновить
235.31

Алгоритмы *

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

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

Как я впервые столкнулся со связанными списками и не сдался

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров879

Я решил улучшить свои навыки алгоритмов перед собеседованиями и начал с простых задач. Всё шло гладко… пока не наткнулся на “Merge Two Sorted Lists” — нужно объединить два отсортированных связанных списка в один. В статье делюсь тем, как я разобрался в этой структуре данных, решил задачу и что вынес из этого опыта. Для новичков однозначно будет полезно!

Читать далее

Новости

Думает ли искусственный интеллект о коте Шрёдингера? История о том, как я внедрял в алгоритм идею параллельных вселенных

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

Представьте алгоритм, который моделирует параллельные реальности: как изменятся системы, если мы чуть сдвинем входные параметры? Какие последствия окажутся важными, а какие — потеряют значение? Какие метрики перестанут работать?

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

Читать далее

Проверяем написанную LLM библиотеку OAuth на уязвимости

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

Сегодня я решил изучить новую библиотеку Cloudflare OAuth provider, которую, судя по заявлениям, почти полностью написали при помощи LLM Claude компании Anthropic:

Эта библиотека (в том числе и документация по схеме) была по большей мере написана при помощи Claude — ИИ-модели компании Anthropic. Результаты работы Claude были тщательно проверены инженерами Cloudflare, уделившим особое внимание безопасности и соответствию стандартам. В исходный результат было внесено множество улучшений, в основном тоже при помощи промптов Claude (и с проверкой результатов). Промпты модели Claude и созданный ею код можно посмотреть в истории коммитов.

[…]

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

Я и сам в последнее время достаточно много писал подобным образом код при помощи «агентских» LLM. И я тоже специалист по OAuth: я написал API Security in Action, многие годы был членом OAuth Working Group в IETF и ранее работал техлидом, а затем архитектором безопасности в ведущем поставщике решений OAuth. (Также у меня есть степень PhD в сфере ИИ, полученная в группе изучения интеллектуальных агентов, но ещё до возникновения современного ажиотажа вокруг машинного обучения). Поэтому мне было очень любопытно, что же создала эта модель. И сегодня, сидя на паре совещаний, я решил изучить результаты. Дисклеймер: я лишь вкратце просмотрел код и нашёл несколько багов, а не выполнял полный анализ.

Читать далее

Резервуарное сэмплирование и собачки

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

Резервуарное сэмплирование — это методика выбора справедливого случайного образца, когда неизвестен размер множества, из которого выполняется выборка. К концу этой статьи вы будете знать:

Когда может потребоваться резервуарное сэмплирование.

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

Простой способ реализации резервуарного сэмплирования на случай, если вам оно понадобится.

Читать далее

Геометрический смысл комплексного гармонического осциллятора и винты

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

Аннотация: Исследуется связь комплексных решений уравнения гармонического осциллятора с винтовыми движениями. Показано, что суперпозиция решений с противоположной хиральностью описывает синхронизированные линейные и вращательные колебания в системе "груз-пружина".

И что отдельно интересно, это то, что в очередной раз оказалось невероятно удобно работать с нейросетью DeepSeek:

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

2. А следующим днем у меня получилась канва на одну страницу, по которой DeepSeek за 1 минуту создала эту статью.

Читать далее

Детальный обзор полей Галуа

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

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

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

Читать далее

Задача о Выборе Билетов

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

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

Я решил положить этому конец и распетлять задачу при помощи ЭВМ.

Постановка задачи

Надо доехать из города A в город C. При этом надо совершить пересадку в городе B. На сайтах есть множество билетов в направлении A->B и B->C. Надо выбрать два билета так чтобы:

1--минимальное время пересадки

2--минимизировать стоимость поездки

3--минимизировать общее время в пути

Надо написать программу. Буквально загружаешь все доступные в продаже билеты, запускаешь программу и получаешь целеуказание на самый оптимальный комплект билетов.

Читать далее

Не пузырьком единым. Поговорим об алгоритмах сортировки

Время на прочтение10 мин
Количество просмотров2.9K

Если спросить любого, хоть немного знакомого с ИТ человека, какие алгоритмы сортировки он знает, то самым популярным ответом будет, конечно, сортировка методом пузырька. Однако в реальности это, конечно, не единственный способ сортировки. В этой статье мы поговорим о том, какие алгоритмы сортировки бывают и как их можно реализовать на Python.

Читать далее

Цветовая вычислительная фотография. Часть 2: Стандарты CIE 1931

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров1.1K

Всем привет! На связи снова Егор Ершов, руководитель группы «Цветовая вычислительная фотография» в AIRI и заведующий сектором репродукции и синтеза цвета ИППИ РАН. Это вторая статья из длинного цикла, которая, фактически, является конспектом лекций курса по алгоритмам вычислительной фотографии, которые я читаю для студентов МФТИ и ВШЭ.

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

Читать далее

Покерная лаборатория закрывается, ловите исходники

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

Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. Java+Spring.

Принимайте проект «как есть», со всеми ad-hoc костылями, незаконченными исследованиями, TODOs, а также всевозможными KISS, DRY, и, как их… SOLID с GoF.

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

Читать далее

Векторы в RISC-V на практике: вычисление softmax

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

С 10 по 14 апреля 2025 года прошел первый онлайн RISC-V хакатон, организованный Ассоциацией RISC-V. Участникам на выбор давались 2 задачи. Одна задача от Codasip -доработать программу и кастомный процессор для вычисления LLM трансформера. Другая от Andes - улучшить вычисление функции softmax. Для демонстрации работы векторного расширения RISC-V задача с softmax мне показалась более подходящей.

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

Читать далее

Сложный способ писать программы

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

В прошлой публикации История одного провала я рассказал про свои попытки автоматизировать упрощение символьных выражений. Но практически совсем не коснулся вопроса – зачем мне это потребовалось, так что пришлось много объясняться по этому поводу в комментариях. В этой статье я расскажу про почти успешную часть того проекта – программу, которая должна была писать другие программы. За 10 лет до этого вашего ChatGPT.

Читать далее

Многорукие бандиты: когда классическое тестирование не работает

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

Привет, Хабр! Мы команда ЖЦК, занимаемся машинным обучением в ВТБ. Сегодня расскажем про алгоритмическую магию, которая творится прямо у нас под носом. Авторами проекта этой магии в ВТБ стали дата-сайентисты Дмитрий Тимохин, Василий Сизов, Александр Лукашевич и Егор Суравейкин. Речь пойдет не о хитрых нейросетях с их миллионами параметров, а о простом подходе, который помог им и команде сэкономить много времени на решении задач, в которых раньше использовались классические методы тестирования. 

Читать далее

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

Как ускорить сложение и вычитание при помощи 2^51

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

Помните, как долго выполняется сложение на бумаге?

¹¹ ¹
6876
+ 3406
------
10282

Начиная с единиц, мы складываем 6 + 6 = 12, записываем 2 и переносим 1. Затем пошагово двигаемся влево, пока складываемые разряды не закончатся.

При реализации сложения больших чисел (например, от 264 и выше) обычно пишут код, похожий на этот алгоритм. Любопытно здесь то, что существует простой трюк, позволяющий существенно ускорить этот процесс на современных CPU.

Но сначала я задам вопрос: почему сложение столбиком мы начинаем с самого младшего разряда? Почему бы не начать слева?

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

Читать далее

Прогрессивный JSON

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

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

Что, если мы применим тот же принцип к передаче JSON?

Читать далее

Недистрибутивность деления, или Как я считал среднюю величину

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


Казалось бы: сложно отыскать формулу проще, чем нахождение среднего арифметического. Однако код — не формула, вдобавок, если вы пишете на С++, то разного (и в основном неприятного) рода сюрпризы могут ожидать вас где угодно.

Постановка задачи: реализовать функцию uint32_t average(uint32_t a, uint32_t b), не используя типов шире, чем uint32_t, и затем обобщить этот подход на произвольное количество аргументов.
Посмотреть, что из этого вышло

Как мы создали новую технологию маршрутизации для пешеходов и велосипедистов

Время на прочтение12 мин
Количество просмотров4.3K

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

Меня зовут Антон Овчинкин, я руководитель разработки пешеходной и транспортной навигации в Картах. Я расскажу, как мы научили алгоритмы обходить промзоны, создали ML‑модель расчёта времени в пути с учётом светофоров и подъёмов, а ещё — как связана пешеходная маршрутизация и подсчёт калорий.

Читать далее

Архитектурный паттерн для централизованной обработки ошибок в хендлерах на Go

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

В данной статье представлен авторский подход к унификации и централизации механизма обработки ошибок в HTTP-обработчиках веб-сервисов, разработанных на языке Go. Статья подробно рассматривает ограничения традиционных методов обработки ошибок, ведущие к дублированию кода и снижению поддерживаемости. Предлагается новый архитектурный паттерн, включающий использование специализированной сигнатуры функций-обработчиков, кастомного типа ошибки HTTPError для инкапсуляции статуса ответа, сообщения для клиента и внутренней ошибки для логирования, а также Middleware-адаптера для интеграции с фреймворками net/http и Gin. Данный подход демонстрирует повышение читаемости кода, упрощение отладки и обеспечение консистентности ответов API, что представляет собой значимый вклад в практику разработки бэкенд-сервисов на Go.

Читать далее

Работа с семантическими сетями с помощью пакета AabSemantics

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров570

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

Читать далее

Как одной математической формулой определить цвет ячейки на рулетке?

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.3K

Однажды моя девушка проходила курс по основам python. Она показала мне небольшую задачку на использование if-else: "по номеру кармана (ячейки) на рулетке определите его цвет".

Казалось бы, все довольно просто — используем условные операторы и не знаем проблем! Но можно ли вывести математическую формулу которая будет работать для всех ячеек? В этой статье я описал поиски такой формулы!

Читать далее
1
23 ...