Обновить
256K+

Алгоритмы *

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

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

Машины, которые не умеют считать, но угадывают числа

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

Есть кластер задач, который выглядит скучно, но кормит половину мировой экономики. «Сколько будет стоить эта квартира?» «Сколько дней займёт доставка товара получателю?» «Какое количество посетителей будет в магазине в субботу?» «Какой будет расход электричества дата‑центра за неделю?»

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

Последние полтора десятка лет эти задачи решали инструменты, о которых обычный человек никогда и не слышал. К примеру, XGBoost. Устроены эти инструменты как перечень примерно из двадцати вопросов, на которые необходимо последовательно ответить. «Дорогой ли район?» «Больше трёх комнат?» и так далее. Заданные в определённом порядке, они относительно точно приводят к ответу. Работает быстро, себестоимость копеечная, принцип понятен на всех уровнях руководства.

А потом выяснилась неожиданная вещь. Языковые модели (LLM), которые обычно помогают нам писать письма и придумывать креативы, умеют делать то же самое, а иногда даже точнее.

Давайте разберёмся, почему.

Читать далее

Новости

От object detection к классическому CV: разрабатываем сканер для слабых смартфонов

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

Привет хабр!

Мы разрабатываем приложение для управления линейным персоналом.

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

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

На практике путь от первого прототипа до стабильной работы оказался гораздо сложнее. Мы успели обучить модель для object detection, столкнуться с ограничениями мобильного железа, отказаться от нейросети и почти без опыта в компьютерном зрении построить собственный real-time-пайплайн обработки кадров.

Читать далее

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

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

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

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

Читать далее

Пробирка как процессор или как молекулы ДНК научились решать задачи

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

Есть белок — рестриктаза ЭкоРИ. Она плавает в клетке, натыкается на двойную спираль ДНК и ищет конкретную последовательность из шести нуклеотидов (ГААТТЦ). Нашла — разрезает цепь ровно между первой и второй буквой. В стандартных лабораторных условиях никакой другой последовательности она не трогает. 

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

Форма активного центра белка оптимизирована именно под эти шесть нуклеотидов — точное структурное соответствие обеспечивает во много раз большее сродство, чем к любой другой комбинации. Биохимики называют это специфичностью.

Леонард Эдлман — тот самый, чья буква «А» стоит в конце аббревиатуры RSA. Профессор Университета Южной Калифорнии, в 2002 году получил премию Тьюринга — высшую награду в информатике. В 1993 году, читая учебник Уотсона по молекулярной биологии, он задумался — а если фермент узнаёт последовательность и выполняет действие, это ведь и есть вычисление. Спустя год опубликовал эксперимент.

Читать далее

React Update Lifecycle: что происходит при обновлении компонента

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

В этой статье последовательно разобран полный цикл обновления React: от Virtual DOM до внутреннего устройства Fiber Reconciler.

Разобраться в жизненном цикле React

Невероятно быстрый алгоритм нахождения простых делителей огромных составных чисел

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

хочу представить вам свой очень быстрый алгоритм нахождения простых делителей огромных составных чисел. Однажды на уроке математики мне нужно было найти делители какого-то числа. Раз уж "лень — двигатель прогресса", я решил поручить эту задачу компьютеру. Но простая программа на Python по перебору до корня мне показалась скучной, и тогда я решил найти более интересный способ.

Читать далее

Как LLM вернули мне фичу, которую Google Maps отобрал (скилл для Claude прилагается)

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

В 2018 Google Maps стал показывать рядом с каждым рестораном «Your Match» - процент от 0 до 100% насколько вероятно, что мне тут понравится.

Так как они базировались на прошлых оценках мест, я стал старательно писать ревью на все кафе, где был, чтобы получить максимально точные рекомендации новых. Для меня это работало классно (особенно для матчей больше 90%), намного информативнее среднего рейтинга заведения. Но в 2023 Google фичу тихо убрал.

В недельных лимитах Claude осталось много токенов, которые скоро сгорали. Так что я попробовал вернуть себе фичу своими силами.

Читать далее

Типизация документов без OCR и нейросетей: 99.79% точности за 3 мс

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

Когда пользователь загружает документ в систему, сначала нужно понять, что именно он прислал. Паспорт? Договор? Полис? Заявление? От этого зависит весь дальнейший сценарий обработки: какие поля искать, какие проверки выполнять и какой OCR использовать. Ошибка на этом этапе делает бессмысленной всю дальнейшую обработку. Мы покажем, что тип документа можно определить, вообще не читая его содержимое. Для этого не нужны OCR, нейронные сети или анализ текста – достаточно использовать геометрию документа.

Читать далее

Собирали по частям, теряли по-крупному: почему новый сборщик мусора откатили в Python 3.14.5

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

В Python 3.14.0 (октябрь 2025-го) разработчики заменили классический иерархический сборщик мусора на инкрементальный – обещали более короткие паузы на больших свалках. Но уже в 3.14.5 (май 2026-го) это решение полностью откатили.

Что пошло не так? И почему альтернативный сборщик даже не сделали переключаемой опцией, как в Java или Go?

Разбираемся на бенчмарках, запустив локально обе версии интерпретатора.

Читать далее

Нейросеть, которую почти не учат или что такое резервуарные вычисления

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

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

И это, как ни странно, работает.

Начнем, впрочем, говорить про проблему - иначе непонятно, зачем вообще идти на такой компромисс.

Рекуррентные нейросети придуманы для последовательных данных - временных рядов, речи, текста. В отличие от обычных сетей, у них есть интересное состояние. Выход на шаге t зависит не только от входа на шаге t, но и от всего что было до. Это делает их мощными - и одновременно очень неудобными в обучении.

Обучают РНС через BPTT - метод обратного распространения ошибки по времени. Собственно, алгоритм раскрывает сеть во времени. Берет все T шагов, строит граф вычислений и считает градиент через него. На каждом шаге градиент проходит через матрицу весов W. Если W перемножать саму на себя T раз подряд - при собственных значениях меньше 1 произведение стремится к нулю экспоненциально. При больше 1 - к бесконечности.

Первое называется затуханием градиента, второе - взрывом градиента. И это, кстати, нюанс.

RNN плохо запоминает то, что было давно. Градиент от событий на шаге t=1 до шага t=100 затухает настолько, что сеть его просто не видит. LSTM частично решает это через систему гейтов, которые контролируют поток информации. Но LSTM тяжелее, медленнее, и проблему не убирает - немного смягчает.

Читать далее

Iron Core. Часть 5: Столкновение с птицей в Терминале №2

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

Публикуем перевод пятой части из серии статей (вот первая, вторая, третья и четвёртая), посвящённой информационным технологиям в авиаперевозках. Сегодня поговорим о задержанном стыковочном рейсе, об отстранённом от полётов Boeing 787-8, и о том, что сделала 60-летняя система после того, как в аэропорту Хитроу всё пошло наперекосяк.

Читать далее

99-й перцентиль за 20 мс: T-Digest и магия сжатых распределений

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

Представим, что у вас есть сервер, который обрабатывает и анализирует 100.000 RPS. Вам нужно высчитать и показать на дашборде 99-й перцентиль задержки — значение, выше которого только 1% самых медленных запросов. Если вы сохраните все 100 000 чисел за секунду, через час это 360 миллионов чисел. Через день — 8.6 миллиардов. Каждый раз хранить, сортировать и высчитывать? Нереально долго и ресурсозатратно.

Но для этой задачи существует алгоритм T-Digest. Вместо того, чтобы хранить все числа, он группирует их в кластеры — центроиды. А все дело в том, что кластеры на краях распределения (там, где наши хвосты) он делает маленькими и точными, а в центре — большими и «приблизительными». В результате для 100 000 точек нам нужно всего ~100 центроидов вместо 100 000 чисел. Это в сотни раз меньше памяти. И притом что ошибка при вычислении 95-го перцентиля в среднем составляет всего 0.001–0.06% (в зависимости от параметра сжатия).

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

Читать далее

Стохастический клеточный автомат на системе типов

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

Давайте разберёмся, как алгорифмы Маркова и pattern matching в WL позволяют генерировать лабиринты, реки, падающий песок и другие клеточные автоматы с помощью системы типов

Читать далее

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

Что общего у Таро, Viterbi и LLM: как алгоритм выбирает один смысл из многих

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

Можно ли описать интерпретацию Таро как задачу поиска лучшего смыслового пути? Разбираю учебную вероятностную модель: от локального greedy к точному Viterbi, beam search, фактор-графам, CRF и LLM reranking. На контрпримере показываю, почему лучший локальный выбор проигрывает глобальному, а также где заканчивается поиск структуры и начинается генерация текста.

Читать разбор целиком

Торговля по паттернам с точки зрения алгоритмов

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

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

Читать далее

ИграКОД: Генератор судоку на TypeScript: почему найти решение проще, чем доказать единственность

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

Главная ошибка наивного генератора судоку — проверять, что решение существует, но не проверять, что оно единственное.

Вот почти заполненное поле:

534..8912 672195348 198342567 859..1423 426853791 713924856 961537284 287419635 345286179

solve() быстро заполнит четыре пропуска. Только завершений здесь два: цифры 6 и 7 можно переставить, не нарушив ни строку, ни столбец, ни блок.

countSolutions(puzzle, 2) останавливается после второго решения и возвращает 2.

Это не демонстрационная картинка. Та же строка из 81 символа лежит в solver.spec.ts, тест так и называется: «контрпример из лида действительно имеет два решения».

Я реализовал три стратегии поиска, а MRV и propagation дополнительно сравнил на наборах задач. Ещё измерил две операции: получение первого решения и доказательство того, что второго решения нет. Вторая вызывается после каждой попытки убрать подсказку, поэтому она в основном определяет цену генерации. React, Web Worker и тесты появятся дальше как обвязка этого поиска, а не как отдельные темы.

Это первый выпуск рубрики «ИграКОД» — про алгоритмы через запускаемые мини-игры. Ранее в цикле выходили материалы про useEffect, any, перенос TypeScript на Go, варианты архитектуры React-магазина и мы собирали и разбирали комбайн.

Читать далее

ФНС и «налог по расходам»: что стоит за сообщениями о массовых проверках физлиц

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

30 июля в Telegram-канале «Топор. Экономика» появилась новость о том, что московские налоговые инспекции начали массово рассылать письма неработающим гражданам, приобретающим дорогие автомобили, квартиры и яхты.

В сообщении утверждалось, что инспекторы требуют письменные пояснения и документы, подтверждающие происхождение денежных средств, использованных для покупки имущества. В качестве источника был указан РБК, а это далеко не желтая пресса, а вполне серьезное новостное издание.

В тот же день тему подхватил и Forbes. Материал вышел под заголовком «РБК узнал о запросах налоговиков к неработающим покупателям яхт и квартир». Затем новость стала распространяться и по другим СМИ и Telegram-каналам. И при каждом следующем пересказе формулировки становились все более определенными.

В итоге:

Читать далее

Эволюция поиска вакансий в Авито Работе: ML-оптимизации и инсайты из АБ-тестов

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

Привет! Меня зовут Вадим Вахрушев, я старший DS-инженер в Авито, занимаюсь задачами поиска. В статье расскажу, как устроено ранжирование в Авито Работе: какие ML-модели помогают создавать выдачу вакансий, и какие инсайты мы вынесли из нескольких показательных АБ-тестов.

Думаю, статья будет в первую очередь интересна ML-инженерам, которым важно разобраться, как поисковое ранжирование адаптируется под конкретную бизнес-вертикаль. Если хочется узнать про поиск в Авито в целом, загляните в обзорную статью — «Как работает поисковое ранжирование для миллионов объявлений Авито». В этом материале я сфокусируюсь именно на специфике вакансий.

Читать далее

Как выбрать OCR в 2026-м: тестируем девять моделей на трех движках инференса на рукописном русском

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

Вам нужен OCR. В техобзорах рекомендуют Tesseract, на Хабре все пишут про VLM, идете на Hugging Face — там PaddleOCR-VL, DeepSeek-OCR, Dots.OCR, Qwen2.5-VL, и каждая называет себя SOTA. Прибавим к этому vLLM, SGLang, TGI, Native HF Transformers, и вот вы зависли между десятками комбинаций. Мы протестировали девять моделей на трех движках инференса на рукописном русском и отразили в таблице, какая модель под какую задачу лучше подходит.

Велком под кат за таблицей и историей ее создания

Читать далее

Memorization vs Generalization: что действительно умеет языковая модель (TLM) на 2 160 параметров (v1.1.0)

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

Продолжая тему Крошечной Языковой Модели на Nodejs мы поймем где проходит граница ее возможностей. На примере Крошечной Языковой Модели (TLM) из 2 160 параметров мы проведём воспроизводимый эксперимент и увидим в цифрах: знакомый шаблон - 99,93%, перестановка токенов - 81,69%, неизвестная структура -?%.

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