Обновить
128K+

Алгоритмы *

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

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

Хотел выбрать булочную по отзывам, а написал анализатор аномалий с embeddings и графами

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

После переезда я искал булочную на Яндекс Картах и наткнулся на отзыв, начинающийся с фразы «да вот хороший вариант ответа».

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

Расскажу, как устроены embeddings, графы совпадений и взвешенный рейтинг, какие ошибки пришлось исправлять и что показала проверка на 21 тысяче настоящих отзывов.

Читать далее

Новости

FLAC против MP3: что кодировщик выбрасывает из трека и слышно ли это

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

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

MP3 128 кбит/с обрезал всё выше 16,7 кГц, MP3 320 дошёл до 20,1 кГц. После десяти пересохранений MP3 128 потерял больше 10 дБ. FLAC после повторного сжатия совпал с оригиналом до бита. Под катом пять замеров с графиками, слепой тест для своих ушей и таблица, какой формат для чего брать.

Читать далее

Оптимизация генерации ресурсов в Java, три Ryzen и 225 замеров

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

Почему ручное разбиение задач оказалось быстрее parallel().collect() в большинстве наших тестов.

Привет, Хабр!

Меня зовут Юрий, и уже десять лет я разрабатываю The Great Tribes — пошаговую 4X-стратегию, в которой игроку предстоит провести свою цивилизацию от первобытных племён до космической эпохи.

Игра создаётся на Java с использованием LWJGL и собственного игрового движка. Мы не используем Unity или Unreal Engine: за годы разработки у проекта сформировались собственная архитектура, система процедурной генерации мира и довольно специфические требования к обработке больших карт.

Сегодня хочу рассказать об одной небольшой, но интересной оптимизации.

Мы решили ускорить генерацию природных ресурсов, написали три реализации одного алгоритма и протестировали их на трёх компьютерах с процессорами AMD Ryzen.

Результаты оказались любопытными: более компактный вариант с parallel().collect() в большинстве измерений уступил реализации с ручным разбиением массива на части.

Но обо всём по порядку.

Читать далее

Почему O(1) не гарантирует высокую скорость: четыре структуры данных для графа signal – effect

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

Сигнал изменился - как найти связанные эффекты и удалить известную связь? Сравниваю четыре структуры графа signal - effect по стоимости операций и памяти, а затем - в локальных замерах на V8. Почему одинаковая O(1) не означает одинаковое время?

Читать далее

Про симплекс-метод простым языком

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

Математики, инженеры, экономисты – все изучают симплекс-метод. Кто-то тут же забывает, но это нормально. В этой статье попробуем простым языком, опираясь не на формулы, а на здравый смысл, объяснить, как это работает.

Читать далее

Когерентная демодуляция CPFSK на микроконтроллерах семейства ARM Cotex M (STM32F103 — STM32H750)

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

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

В одной из предыдущих статей, уже описывал вычисление sin(x)/cos(x) с применением разложения в ряд Фурье с фиксированной точкой. Вычисление тригонометрических функций, в моем случае занимало порядка 125-130 тактов на пару (sin+cos) на процессорном ядре Cortex M7 (STM32H750). При этом, код компилировался для архитектуры Cortex M3. Точность sin/cos просчитанного таким образом составила менее 1.5LSB. Google посчитал ее как 1.2-1.3LSB, с минимальной дисперсией. Это уже дало динамический диапазон ~183dB. Для сравнения, полный динамический диапазон человеческого уха 120dB от болевого порога до шелеста листвы. А динамически диапазон звука который человек слышит одновременно порядка 40-60dB. Несколько позже поясню для чего приведено сравнение.

В общем и целом такого динамического диапазона и скорости уже достаточно чтобы производить операцию квадратурной свертки сигнала с частотой дискретизации до 450-500KHz. Кстати, на STM32F103C8T6, это заняло бы ~1.8uS на квадратурный отсчет. Т.е. с отключенными прерываниями процессор бы успел выполнить расчет одного бина честного преобразования Фурье в реальном времени. Это эквивалентно квадратурной демодуляцию на одной произвольной поднесущей до частоты 250КГц (хотя лучше брать Fsample/4 ), что позволяет работать с полосой до 125КГц, на простом контроллере в реальном времени.

Однако, этого мало для полноценной обработки сигналов. И тут я задумался. Как можно значительно повысить скорость работы и почти не потерять в точности? Первое что сделал,- разбил преобразование на блоки, фаза которых непрерывна. Это позволило работать с блоками отсчетов, которые, затем можно суммировать скользящим окном со сложностью O(1). Это привело к эффекту квадратурной демодуляции сигнала и без повышения сложности позволяло работать с малыми временными сдвигами. Фактически пришел к поблочной корреляция. Нечто вроде временного Rack-приема.

Читать далее

Проблема ворот

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

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

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

В стратегиях у ботов обычно есть обычно очень простая задача пройти через какие-нибудь ворота-узкое место, обойти стену и оказаться во дворе, и пока у нас один солдат, который идёт по пустой карте, никакой особой проблемы не возникает. А стоит вам добавить на карту десять, пятьдесят, сто, двести солдат и одни ворота, через которые физически способны одновременно протиснуться всего несколько юнитов, как выясняется они этого не делают, хотя алгоритме поиска пути (вроде A*) прекрасно отработал. Отработал, то отработал, а солдатики на месте тупят, и выясняется что мы пытаемся заставить его решать задачу, на которую он не рассчитан.

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

Читать далее

От облака точек к исполнительному чертежу: разработка прототипа на Python»

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

В предыдущей статье «Как я собирал ERP-контур из 5 продуктов для строительной компании» я рассказывал об автоматизации учёта и взаимодействия систем. Однако за любыми данными в ERP стоит физический объект: монолит, конструкции, инженерные сети и выполненные работы. Каким образом связать то, что происходит на стройплощадке, с тем, что мы видим в документах и информационных системах ?

Читать далее

Уроки GEO-продвижения: как за 2 месяца увеличить видимость в нейросетях в 50 раз и обогнать СКОЛКОВО

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

Привет, Хабр! Я руководитель группы экспериментальных клиентов Kokoc Performance (входит в Kokoc Group). Мы в Kokoc Group занимаемся продвижением в генеративных поисковых системах. Хочу поделиться кейсом B2B-клиента из рынка корпоративного обучения. Расскажу подробно о замерах, кластеризации, смысловых профилях бренда, внешних площадках и специфике статей-рейтингов и, конечно, о результатах. Кейс будет полезен тем, кто занимается SEO, контентом, B2B-маркетингом, GEO и AEO. 

Читать далее

Roaring Bitmap: как уместить базу данных в памяти приложения

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

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

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

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

Читать далее

Задача 3SUM решена быстрее, чем за O(N²) — а именно за O(N¹‧⁹⁹⁹²). Без нейронок не обошлось

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

5 октября американские исследователи Вирджиния Василевска-Уильямс, известная своими быстрыми (и безумно сложными) алгоритмами перемножения матриц за O(N^{2.373}) вместо O(N^3) и её бывший аспирант Джош Алман опубликовали препринт на arxiv.org, демонстрирующий алгоритм решения задачи 3SUM за O(N^{1.9992}).

Это знаковое событие в узких кругах. Во-первых, раньше предполагалось, что решить эту задачу быстрее, чем за O(N^2), невозможно. Во-вторых, вместе с ней наконец решилась быстрее, чем за O(N^3), задача нахождения кратчайших путей между любыми парами вершин в графе (All-Pairs Shortest Paths, APSP) — по-настоящему практическая задача вычислительной геометрии. В-третьих, мало того, что корректность работы проверяла закрытая модель Anthropic — авторы также утверждают, что Claude нашёл изначальный алгоритм, после чего учёные осознали и улучшили его.

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

Читать далее

Как я автоматизировала ведение Threads через AI-агента: 188 постов и ответы на комменты за $4–6 в месяц

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

Threads у моего проекта EverStory (семейные фото-книги) долго жил по остаточному принципу. 2–3 поста в неделю, если вспомню, а в неделю релиза тишина. Комментарии я лайкала и забывала. Хотя люди писали там вполне живые вещи: про бабушкины альбомы, коробки с плёнками, про то, кто в семье «хранитель архива». Разбирать это было некому.

Тогда я собрала агента Amy. Она пишет посты и публикует их 5 раз в день, отвечает на комментарии и раз в неделю приносит выжимку того, что говорит аудитория. Управляется кнопками в Telegram, без моего одобрения ничего не публикует. Код открыт, ссылка в конце.

Читать далее

Пересчёт расстояний в KNN-поиске: сокращаем разрыв между колоночным и построчным хранением

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

Почему при стандартных настройках KNN-поиска пересчёт расстояний при колоночном хранении векторов работал медленнее, чем при построчном, и как Manticore почти убрал эту разницу, сохранив скорость поиска по данным, которые не помещаются в память.

Читать далее

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

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

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

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

Читать далее

Как показать 24 соседних листа? Паспарту спешит на помощь

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

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

Читать далее

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

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

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

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

Читать далее

Как мультимодальные модели научились понимать товар, а не картинку

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

Почему для понимания товара недостаточно одной фотографии? Проследим, как модели электронной коммерции эволюционировали от визуального поиска и CLIP к мультимодальным представлениям, объединяющим изображения, текстовые описания и атрибуты товаров. Также рассмотрим e-CLIP, MOON, MOON2.0, AFMRL и MOON3.0.

Читать далее

Консенсус без Raft: ORCHID в Grid (фаза Курамото + quorum)

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

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

В стеке вроде Raft логика такая: узлы голосуют за лидера, пишет только он; у каждого периода лидерства есть порядковый номер (term), чтобы отличать старые голоса от новых; лидер пропал — новые выборы. В Grid допуск записи устроен иначе. Лидер не выбирается голосованием. Вместо этого узлы обмениваются числовым параметром синхронизации (фазой, в смысле модели Курамото) и отдельно подтверждают каждую операцию контрольной суммой её содержимого. Этот протокол называется ORCHID.

Читать далее

Как я перестал верить красивым бэктестам: 10 ловушек с реальными цифрами

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

За последний год я проверил около двадцати торговых идей. Каждая сначала выглядела убедительно: приличная t-статистика, гладкая кривая доходности, понятная история. И каждая умерла на конкретной проверке. В этой статье собраны эти проверки с реальными цифрами «до» и «после».

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

Читать далее

Самый подробный обзор AMD FSR (1-3): он лучше NVIDIA DLSS — и вот почему

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

Привет, постоянные и не очень читатели!

В первой части цикла я разобрал технологию DLSS во всех её версиях — с предпосылками и историей появления, байками и мемами про Хуанга и даже применением в бизнес-приложениях (чиво?). Материал вышел огромным, и, вероятно, самым подробным про DLSS в Рунете. Почитать можно здесь: «Судный день грядёт [часть 1]: глобальный разбор апскейлера DLSS — от игр к работе»

Теперь пора обозреть пролетарскую FSR (FidelityFX Super Resolution) — технологию улучшения изображения от AMD, которая, по моему мнению, превосходит DLSS от NVIDIA. Почему? Расскажу в конце статьи.

Дропдаун
1
23 ...