Обновить
128K+

Алгоритмы *

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

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

Как плеер угадывает тональность трека: 12 чисел и одна корреляция

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

Плеер показывает у трека «ми минор», но как он это узнал? Программа не слушает гармонию, как музыкант: она считает, сколько звучит каждой из 12 нот, и ищет гамму, на которую набор похож сильнее всего. Разбираю алгоритм Крумхансл-Шмуклера на реальных треках, показываю, где он путает квинту и родственную тональность, и что тут меняют нейросети.

Читать далее

Новости

Как я создал СуперЗавуч — программу для генерации расписаний занятий

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

Привет, Хабр! Я бы хотел рассказать о том, как я создал программу для составления расписаний для учебных заведений - СуперЗавуч.

СуперЗавуч - современная программа для составления расписаний уроков для школ, лицеев и колледжей. Программа позволяет создать расписание за несколько минут и имеет много параметров для конфигураций.

Читать далее

Как мы защищаем номера телефонов с помощью Oblivious Pseudorandom Function

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

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

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

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

В этой статье я расскажу Хабру, как мы вместе с другими участниками рынка искали более надёжную конструкцию и пришли к схеме на основе Oblivious Pseudorandom Function (OPRF), предотвращающей отслеживание пользователя по его номеру.

Читать далее

Lock‑free по нарастающей

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

Большинство учебников предложит синхронизировать потоки с помощью мьютекса. Но под реальной high-performance нагрузкой блокировки превращаются в кошмар планировщика ОС: несвоевременное вытеснение потока после захвата критической секции способно парализовать ваш пайплайн обработки данных, провоцируя многочисленные переключения контекста, уходы в спячку и сбрасывания кэшей процессора.

В качестве панацеи предлагают lock-free структуры, но и тут полно ловушек — банальный регулярный вызов ядра SetEvent способен сжечь весь выигрыш от lock-free. Сами алгоритмы lock-free порой тяжеловесны, не всегда предлагают удачный trade-off и даже не всегда уместны. Но что ещё хуже: будучи применёнными без должной тщательности, они могут не только не дать выигрыша, но даже навредить.

В этой статье мы разберём устройство нескольких базовых объектов библиотеки wxl и познакомимся с концепцией «алгоритм дешевеет под нагрузкой». Мы пройдём путь от трёх базовых инструкций процессора до готового канала, разберём, как продление release-последовательности спасает от ABA, как ленивые триггеры arm/disarm позволяют будить поток только тогда, когда он реально спит, и как заставить данные летать между ядрами без обращений к операционной системе.

Готовы? Приступаем...

Пишем трассировщик лучей на Brainfuck

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

В процессе подготовки к соревнованиям по системному программированию на C++ я начал заново изучать CMake, потому что Cargo сильно меня избаловал. При этом я заметил в туториале интересное утверждение:

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

CMake Language Fundamentals

Я раньше писал трассировщик лучей и переписывал его под GPU, поэтому это заявление привлекло моё внимание и заставило задуматься, на каком же ещё языке лучше писать такой трассировщик.

Для последней версии я писал код, почти не связанный с базовыми алгоритмами и в основном зависевший от довольно сложного набора API. Поэтому я выбрал самый простой из известных мне языков — Brainfuck, ведь простота языка очевидным образом приводит к созданию простой кодовой базы. На самом деле, кодовые базы на BF обычно состоят всего из нескольких строк. Кроме того, комментарий Урбана Мюллера в README заставил меня написать контрпример.

Код выложен на Github.

Читать далее

Как работает инференс в больших языковых моделях

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

Привет, Хаброжители! Когда вы вводите промпт в большую языковую модель (LLM), машина преобразует ваш текст в числа, обрабатывает их, а потом возвращает ответ токен за токеном. В этой статье мы разберём, что такое инференс (логический вывод) в LLM и посмотрим, как он работает.

Читать далее

Как кишечная палочка решала задачу коммивояжера

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

У нас есть курьер, у него есть 20 адресов и склад. Задача — объехать всех и вернуться, потратив как можно меньше времени. Количество вариантов объезда будет немногим больше 60 квадриллионов (а если точнее, то 60 822 550 204 416 000). Для сравнения: столько секунд прошло бы за два миллиарда лет. И это так называемая задача коммивояжера. Дальше расскажу про то, как ее пытались решать живыми бактериями, почему это красиво, и на каком месте все рухнуло. 

Читать далее

Можно ли встроить ИИ в торговый цикл на 300 мс? Разбираю Jev

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

Модель выпустила TypeSafe AI. Её основатель - Диого Алмейда, один из исследователей ChatGPT и InstructGPT. Jev не генерирует свободный текст и не объясняет ход рассуждений. Вместо этого она отвечает на заранее сформулированные вопросы в заданном формате: выбирает вариант, возвращает число или выставляет оценку.

По данным TypeSafe, цена составляет $0,042 за миллион входных токенов, а выходные токены не тарифицируются.

В качестве примера я привожу работающего бота для маркет-мейкинга на Monad. Он читает стакан MON/USDC на Kuru, запрашивает решение у Jev на каждом блоке примерно раз в 300 мс и выставляет лимитный ордер на один тик ближе к рыночной цене. По данным репозитория, за три дня он набрал более тысячи звёзд, а некоторые решения приходили за 81 мс.

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

Читать далее

Claude Opus 5.5: подробный обзор новой модели

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

22 сентября 2026 года – обычный вторник, если не считать того, что в этот день одновременно вывалилось сразу несколько релизов больших и крупных LLM:
• Anthropic взяла и выкатила Claude Opus 5.5
• Буквально через полтора часа OpenAI ответила двумя моделями, GPT-6 Sol и Luna

Для тех, кто торопится: Opus 5.5 работает на уровне флагманского Fable 5.1 на большинстве задач, стоит на 40% дешевле Opus 5 на типичной нагрузке, генерирует токены более чем на 30% быстрее – и (внимание, барабанная дробь) говорит по-человечески. Последнее, судя по всему, волнует людей сильнее, чем все таблицы бенчмарков вместе взятые.

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

Читать далее

Чип, спроектированный в Грузии. 4 часа лекций про ASIC, FPGA, TinyTapeout, с вопросами про тайминг и CDC

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

После поездки в Грузию (см. пост Хакерспейсы Батуми и Тбилиси + ASIC чип спроектированный в Грузии) мы доотладили проект Tbilisi CORDIC и засабмиттили его на сайте TinyTapeout для производства на фабрике IHP в Германии, Leibniz-Institut für innovative Mikroelektronik.

Затем мы устроили две ондайн-лекции на Zoom-е - одну на английском, другую на русском. С вопросами и ответами лекции растянулись на два часа каждая, и мы выложили их на YouTube, ВКонтакте и RuTube. Ниже выложенные видео и их содержание на русском и английском.

UPD: В России MPW-сервисами по производству малосерийных чипов для университетов занимается МИЭТ, см. статью про кооперацию МИЭТ и ТУСУР.

Читать далее

Кеш кандидатов: как снизить расход железа в рекомендательной системе без потери качества

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

Привет! Это Николай Анохин из команды AI VK. В этой статье расскажу про кеширование кандидатов — подход, который делает рекомендательную систему заметно менее требовательной к железу и при этом не трогает качество выдачи. Механизм уже работает в рекомендациях VK Видео и VK Клипов.

Как мы реализовали кеширование кандидатов

Проблема булевой выполнимости и ее применение в криптоанализе

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

Алгоритмы решения проблемы булевой выполнимости (SAT — от Satisfiability) и реализующие их средства (SAT‑решатели) позволяют определить выполнимость конкретной булевой формулы — существует ли такой набор определенных булевых значений («ложь»/«истина») переменных формулы, при которых результат формулы становится истинным.

Проблема булевой выполнимости хорошо изучена; существуют различные методы сведения разного рода частных задач к формулировке на их основе конкретной булевой формулы и последующего решения определенного экземпляра задачи с помощью алгоритмов решения проблемы булевой выполнимости. Алгоритмический аппарат также активно развивается; в частности, предложены эффективные алгоритмы, позволяющие автоматизировать поиск значений переменных, приводящих к решению проблемы булевой выполнимости [1]. Алгоритмы, лежащие в основе SAT‑решателей, хорошо распараллеливаются, что позволяет эффективно использовать вычислительные кластеры [2].

В анализе криптографических алгоритмов существует достаточно много задач, которые могут быть сведены к решению проблемы булевой выполнимости, что позволяет использовать хорошо изученный математический и эффективный алгоритмический аппарат решения SAT‑задач для доказательства криптографических свойств (или для получения информации о криптографических свойствах) анализируемого алгоритма. В этой статье мы совместно с моей коллегой — ведущим аналитиком компании «Актив» Мариной Скоробогатовой — подготовили небольшой обзор применений подхода сведения задач криптоанализа к SAT‑задачам, который и предлагаем вам под катом.

Читать далее

Империя терминаторов: как двести агентов построили цивилизацию

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

В 1959 году энтомолог Пьер-Поль Грассе проводил небольшое исследование того, как термиты строят себе жилища — термитники, которые достигают высоты в несколько метров. Каждое из насекомых таскало глину и клало ее в определенное место, которое изначально выбрал предводитель роя. Благодаря общему делу термитники были детально проработаны, там были даже вентиляционные каналы и подвалы. 

Это явление было названо стигмергией — координацией существ через изменение среды. Десятки лет спустя несколько исследователей из MIT воссоздали тот же механизм в цифровом мире. Однако вместо термитов у них были ИИ-агенты, и построили они не гигантский термитник, а технологическую цивилизацию. О результатах эксперимента мини-терминаторов и о том, чему нам, людям, нужно научиться у LLM, рассказываю в статье.

Читать

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

Восстановление данных с нуля со сломанной пополам SD-карты памяти

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

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

В далеком 2017 году мне передали SD-карту памяти с диагнозом «сломана пополам, вдруг получится что-то с нее считать». Я честно пробовал: восстановил все оборванные дорожки, досконально проверил все соединения и на целостность линий, и на отсутствие замыканий. Положительного результата не получил – карта определялась, но с нулевым объемом. По этой причине она отправилась в ящик ждать «лучших времен».

Прошло 9 лет. В результате очередной уборки-инвентаризации, в ящике нашел эту старую карточку. Вот и настали «лучшие времена», подумал я.

В статье расскажу про микросхему памяти, как определял её адресное пространство, снимал полный дамп подручными средствами (STM32), как определял комбинацию блоков для построения образа, а также про поля Галуа, помехоустойчивое кодирование, вычисление синдромов и локаторов ошибок.

Спойлер - всё получилось.

«Long story short…»

Единица, ноль и самообразование: история Джорджа Буля

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

Возможно, вам доводилось видеть, как выглядит программа управления логическим контроллером, например, станка. Две вертикальные линии, как шины питания, между ними горизонтальные «ступеньки», на ступеньках — контакты и катушки, как на схеме из учебника электрики пятидесятых годов. Это называется ladder logic, «лестничная логика», и на ней до сих пор держится заметная часть мировой промышленности. Конвейеры, лифты, насосные станции и даже линии розлива пива.

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

Зовут его Джордж Буль. Если вы хоть раз писали if (a && !b), вы пользовались его математикой. Если использовали фильтры в интернет-магазине — тоже. Если просто читаете этот текст с экрана — ну, вы поняли.

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

Читать далее

Как советский компьютер «Сетунь» опередил время на 30 лет — и почему о нём забыли

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

Ну как сказать опередил, честно говоря, нет, не опередил, скорее опоздал. Но об этом позже, начну с цифры, которая в этой истории главная. «Сетунь» стоила 27 500 рублей — со всей периферией, с телетайпом, с барабаном, с фотовводом. PDP-8, которую в Штатах считали рекордно дешёвой машиной, стоила 20 000 долларов за один процессорный блок. Без ничего. Это сравнение приводит сам Брусенцов в интервью.

Плюс к этому «Сетунь» была троичной. Единственной серийной троичной машиной в истории человечества, и её закрыли.

Обычно после этого идёт текст про Госплан, который задушил гения, опередившего время на тридцать лет. Я такой текст читала раз пять в разных изложениях, и каждый раз спотыкалась об одно и то же место: вот тут, где объясняют, почему тройка экономичнее двойки, всегда написано «примерно в семь раз». А через абзац — что оптимум системы счисления достигается при основании e. Это два утверждения из разных вселенных, и между ними никто никогда не показывал переход.

Ну я и полезла считать сама.

Читать далее

GigaChat 3.5 Reasoning — первая в России открытая модель с рассуждениями

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

Привет, Хабр. Мы выпускаем GigaChat 3.5 Reasoning, первую модель GigaChat с полноценным рассуждением, обученную на технологии online RL.

Главное, что изменилось в обучении: после SFT модель целиком прошла через online RL. Не один домен и не одна финальная стадия, а шесть отдельных экспертов (математика, код, агенты и другие), каждый со своей наградой, которые потом собрали обратно в одну модель.

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

Читать далее

Надпись «Откройте камерой» мешала прочитать QR-код

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

Один SVG: при 640 пикселях QR не читается, при 320 читается. Разбираю, как локатор принял часть подписи за угол кода, почему удаление букв возвращало чтение и как удалось оставить подпись на месте. С контрольными опытами и исходниками.

Читать далее

От «когда-нибудь» к работающему прототипу: как LLM дала идее шанс

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

Привет! Меня зовут Владислав Козлов, я тимлид аналитиков Business Security в Авито. Хочу поделиться с вами интересным опытом взаимодействия с LLM, который позволил мне дёшево и быстро проверить свою идею. А заодно — рассказать об интересном алгоритме кластеризации, который мы с моделью придумали и реализовали в виде библиотеки.

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

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

Читать далее

ИК1303. Трансцендентное

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

Я не вижу себя в качестве писателя. Но так случилось, что я столкнулся с прекрасным.

Занимаясь археологическими изысканиями в микрокоде МК-61, я задался вопросом: а как же деды запихали столько ума в такие ограниченные ресурсы, и даже без умножителей? Сейчас на целочисленном кортексе использование одной плавающей запятой приводит к взрыву прошивки (да, утрирую, но эмоционально оно так).

Если коротко: есть калькулятор МК-61 (1983). Внутри пять микросхем, которые соединены в однобитовую последовательную кольцевую шину: две памяти и три вычислителя со своей специализацией. Фактически они работают параллельно и синхронизируются через этот канал связи. Можно сказать, что это прообраз парадигмы NOC (network on chip) в современном железе применительно к FPGA.

Собственно о красоте. Чип ИК1303 (1980) отвечает за математические расчёты. В нём восемнадцать вычислительных операций: четыре бинарных (+ — * /) и четырнадцать F‑функций (10^x e^x lg ln arcsin arccos arctg sin cos tg sqrt x^2 x^y 1/x). Сверх них — обмен x<→y и служебные, видные только изнутри: нормализация, генератор констант, приведение угла.

Никаких CORDIC, никакой двоичной плавающей запятой! Но как?! Просто и изящно. Одна функция для большей части операций! ОДНА!

Читать о функции
1
23 ...