Обновить
512K+

Алгоритмы *

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

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

AGC или как перестать подстраивать громкость вручную

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

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

Читать далее

Парадокс ансамблей: почему «слабые» модели иногда побеждают «сильные»

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

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

Читать далее

Как попасть в ответы нейросетей: ChatGPT, Google AI, Яндекс.Алиса, Perplexity, Claude, Gemini, DeepSeek

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

Привычная логика уже не такая привычная. SEO разрастается до GEO: SEO + PR + репутационный маркетинг. Сегодня: почему конкретные нейросети ChatGPT, Алиса, Gemini и другие выбирают одни источники и игнорируют другие. Поговорим о факторах присутствия в ответах конкретных ИИ-систем.

Читать далее

Поиск по коду: почему просто проиндексировать все коммиты — плохая идея

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

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

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

Читать далее

Как Pizza Tycoon симулировала дорожное движение на процессоре с частотой 25 МГц

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

Я работал над Pizza Legacy — опенсорсным воссозданием игры 1994 года Pizza Tycoon для DOS. В игре есть вид на улицы города, при скроллинге которого игрок наблюдает постоянный поток машин. Это примерно 20-30 маленьких спрайтов, однако они едут по дорожной сети, создают очереди на перекрёстках и в целом выглядят как оживлённый город. Да, симуляция иногда глючит, машины проезжают друг через друга, но этого достаточно, чтобы придать карте ощущение жизни. И всё это на процессоре 386 с частотой 25 МГц.

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

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

Всё это время мне не давала покоя одна мысль: если оригинальная Pizza Tycoon работала на процессоре с частотой 25 МГц, то почему мои версии всегда оказывались столь сложными?

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

Читать далее

Простая нейронная сеть на чистом C++

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

Ни Python, ни PyTorch, ни NumPy, … всего 260 строк кода на чистом C++ достаточно, чтобы обучить, оценить и протестировать простой двоичный классификатор, различающий рукописные цифры 0 и 1.

Читать далее

Как я выбираю моменты для Shorts: почему LLM + транскрипт почти всегда дают мусор

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

Это третья статья про мой "аниме завод" — систему, которая автоматически превращает длинные эпизоды в Shorts.

Если хотите полный контекст, вот предыдущие части:

Читать далее

Как бы я рассказал про линейную регрессию (если б меня кто-то спросил)

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

Привет, Хабр! Если вам когда‑либо хотелось разобраться в том как работает линейная регрессия, или хочется освежить в памяти основные моменты без необходимости продираться через разрозненные источники, то прошу под кат. Это не статья "от начинающего для начинающих". Экстра лонгрид — писал больше года. Статья концептуальная, а концептов пять: 1) ключевой повествовательный компонент — визуализации (их около сотни), текст — вспомогательный; 2) анимации везде где только можно (их всего 34); 3) простота — достаточно знаний со школьного курса математики чтобы начать читать; 4) воспроизводимость — подавляющее большинство медиаматериалов сгенерированы при помощи Python а исходный код выложен в open‑source и, самый главный, 5) фокус на практике, — например, если упоминается векторная запись метода наименьших квадратов, значит она в нарративе решает возникшую боль читателя

Читать далее

Как мы пересобрали сборку мусора в Vinyl

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

В предыдущей статье о Vinyl я рассказывал об архитектуре LSM-движка Tarantool. Восемь лет, прошедшие с момента с написания статьи, показали, что Vinyl сразу получился идеальным и менять его не нужно :). Если серьёзно, сегодня я расскажу о тех изменениях, которые мы внесли в алгоритм в форке Tarantool от Picodata, и неизбежно коснусь более глубокой проблематики работы LSM-деревьев, а конкретнее – работы планировщика слияний (compaction scheduler).

Читать далее

Укрощаем рыночный хаос: Пишем Liquid Neural Network (LNN) на PyTorch для алготрейдинга

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

Если вы когда-нибудь пытались натравить классическую LSTM на минутные свечи волатильных активов, вы знаете эту боль. Сначала Loss красиво падает на трейне, вы предвкушаете покупку острова, а на тесте модель превращается в тыкву. Она либо предсказывает скользящую среднюю со сдвигом на один шаг, либо упирается в «стену» Loss = 0.693 (то есть −ln(0.5)), сводя всё к подбрасыванию монетки.

Проблема не в вас. Проблема в том, что рекуррентные сети (RNN, LSTM, GRU) живут в дискретном времени. Для них шаг между 10:00 и 10:01 абсолютно идентичен шагу между пятницей и утром понедельника. Они не умеют сжимать и растягивать восприятие времени, когда волатильность взрывается.

В этой статье мы отойдем от мейнстримных архитектур и напишем с нуля Liquid Neural Network (Жидкую Нейронную Сеть). Мы заставим время течь непрерывно, используя численные методы дифференциальных уравнений прямо внутри PyTorch-графа, и посмотрим, как она вытаскивает скрытый макро-тренд из абсолютного рыночного хаоса.

Теория без воды: Что делает сеть «жидкой»?

Концепция Liquid Time-Constant Networks была представлена исследователями из Лаборатории искусственного интеллекта MIT (CSAIL). Их изначальная цель — управление дронами и автопилотами в непредсказуемой среде. Но финансовые рынки — это та же турбулентность, только выраженная в долларах , рублях и других валютах.

В классической RNN скрытое состояние h_t обновляется по дискретным шагам:

h_t = \tanh(W_{in} x_t + W_h h_{t-1} + b)

В Liquid Network мы отказываемся от дискретности. Состояние нейрона h(t) — это непрерывная переменная, описываемая обыкновенным дифференциальным уравнением (ОДУ):

Читать далее

Краткий справочник про внимания (self-attention, cross-attention, multi-head attention)

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

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

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

Читать далее

O(log n) или O(n)? Разбор алгоритмов поиска для собеседований и практики

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

Баг в бинарном поиске Java прожил в стандартной библиотеке почти десять лет — и в 2006 году его разбор опубликовал сам автор кода. Казалось бы, бинарный поиск проходят на первом курсе. Но между «понял идею» и «написал без ошибок» — целая пропасть. В этой статье разберём четыре алгоритма поиска (линейный, бинарный, экспоненциальный и с использованием хеш-таблицам), покажем, когда какой выбирать, и разложим по полочкам пограничные случаи, на которых горят и на собесах, и в проде.

Давайте разбираться

Зная эти паттерны ты решишь 60% задач на собеседовании

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

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

Читать далее

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

Как собрать дашборд для анализа алготрейдинга без программирования: кейс на HTML + LLM

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

400 000 строк в файле Excel, а пропущенный день это дырка в истории и отчёты, которые тормозят даже на мощном ПК — именно с этим столкнулся алготрейдер Дмитрий Овчинников. Но он смог при помощи ИИ ассистента создать дашборд, который упрощает управлением его 100+ стратегиями в алготрейдинге. И это, по его словам, как пересесть с запорожца на вертолёт.

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

Проблемы алготрейдера

Пост-квантовый гибридный алгоритм шифрования для высоко-нагруженных систем с реализацией на TypeScript

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

Новый пост-квантовый гибридный алгоритм шифрования для высоко-нагруженных систем с реализацией на TypeScript. Ring-LWE, работа с ключами с использованием MAC и SHAKE-256, защита от основных видов атак и другие мысли в реализации протокола QuarkDash.

Читать далее

Человек и алгоритм — история возникновения процедурального искусства

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

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

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

Читать далее

Что такое наблюдатель и при чём здесь фильтр Калмана

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

Прочитал на Хабр статью [1], в которой автор простым языком даёт достаточно глубокое представление такого сложного и важного математического объекта как фильтр Калмана и захотел предложить читателям посмотреть на него (фильтр Калмана) несколько с другого ракурса. Сразу хочу предупредить, что перед чтением данной статьи хорошо бы прочесть статью [1], так как даже формулы были специально взяты ровно оттуда, дабы данная статья базировалась на материале упомянутой работы [1].

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

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

А теперь изложенную идею попробуем воплотить в виде математических абстракций.

Читать далее

Стратификационный анализ ECDSA-подписей и дефектных режимов генерации nonce

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

Мы привыкли, что повтор r в ECDSA — это случайный сбой: плохой генератор, ошибка реализации, повтор nonce. Но что, если за одним repeated-r скрывается целое семейство дефектов (defect-family), которое можно не только обнаружить, но и перенести на другие закрытые ключи?

Представляем закрытую исследовательскую систему — стратификационный анализ ECDSA-подписей на secp256k1. Вместо точечных аномалий мы смотрим на фазовые корпуса подписей, используем торическую геометрию, kNN и перестановочные тесты. Результат:

· Во внешнем корпусе из 30 адресных контекстов и 6257 подписей repeated-r найден только в 1 контексте, межадресных коллизий r — 0. · 58 из 58 контролируемых переносов defect-family с реального адреса-донора на панель реальных адресных целей прошли с полной ECDSA-валидацией реконструированных подписей. · Встроенный publication-safety audit заблокировал открытый bundle, обнаружив 498 проблем (30 критических) — от raw (r,s,z) до восстановленных синтетических k и фрагментов закрытых ключей.

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

Читать далее

Глухой телефон для ИИ: мы замерили физику LLM-графов и поняли, почему добавление агентов всё ломает

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

Индустрия ИИ переживает бум мультиагентных систем. Кажется, рецепт AGI найден: просто соедините 10 умных нейросетей в команду, дайте им роли, и они свернут горы.

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

Мы решили, что с нас хватит алхимии. Нам понадобился измерительный прибор - эдакий МРТ-аппарат для мультиагентных сетей, который покажет механику общения LLM изнутри.

Так появился опенсорсный проект llm-coordination-harness - строгий измерительный стенд (measurement rig), который доказывает, что у общения нейросетей есть своя физика, которую можно и нужно измерять.

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

Заглянуть в черный ящик

Интересный способ сгруппировать натуральный ряд

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

Вопрос читателю: Как можно сгруппировать натуральный ряд {1, 2, 3, ..., n} в n / 2 групп, чтобы внутри каждой лежали только взаимно-простые числа?

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

Читать далее