Обновить
273.48

Алгоритмы *

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

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

GPU-вычисления в браузере на скорости нативного приложения: марширующие кубы на WebGPU

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

WebGPU — это мощный GPU-API для веба, поддерживает продвинутые рендеринговые конвейеры и вычислительные конвейеры GPU. WebGPU ключевым образом отличается от WebGL своей поддержкой вычислительных шейдеров и буферов хранения данных. В WebGL такие возможности отсутствуют, а WebGPU, в свою очередь, позволяет целиком выполнять в браузере мощные приложения, требующие вычислений на GPU. Речь может идти о самых разных приложениях, от GPGPU (напр., симуляции, обработка/анализ данных, машинное обучение, т.д.) до конвейеров рендеринга на основе GPU-вычислений — а также о многих других приложениях в этом спектре.

В этой статье мы оценим вычислительную мощность WebGPU, сравнив её с показателями Vulkan. Для этого мы реализуем классический алгоритм «марширующие кубы» (Marching Cubes) для WebGPU. Алгоритм марширующих кубов почти без оговорок относится к чрезвычайно параллельным, в составе этого алгоритма выполняется два глобальных шага редукции, необходимых для синхронизации местоположений рабочих элементов и вывода потоков. Поэтому данное решение — отличный вариант GPU-параллельного алгоритма, который стоит первым делом попробовать на новой платформе. Дело в том, что он достаточно сложен, чтобы API испытал давление сразу по нескольким направлениям сверх элементарных параллельных операций диспетчеризации в ядре. При этом он не столь сложен, чтобы на его реализацию требовалось существенное время, а также он не превращается в узкое место из-за ограничения производительности ЦП.

Читать далее

Новые коллекции в Android

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

В 2018 году в androidx появился новый пакет collection, который содержал несколько специфичных структур данных, переписанных на Kotlin, таких как LongSparseArray, SimpleArrayMap и SparseArrayCompat.

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

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

Читать далее

Алгоритм деления 2W-разрядных чисел с использованием операций с числами разрядностью W

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

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

Читать далее

Равновесное ранжирование со смещением к целевой метрике

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

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

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

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

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

Читать далее

Похоже, я придумал свой алгоритм поиска кратчайшего пути (upd: меня опередили...)

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

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

Почему собственный? Я искал подобное решение, но не нашел, возможно, оно уже было реализовано, просто плохо поискал. Жду Нобелевскую премию =)

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

Читать далее

Как мы в 2 раза ускорили решение MILP-проблем за счет ML

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

Многие задачи, с которыми мы имеем дело при цифровизации производства (неважно какого), – это задачи оптимизации: оптимизация производственного расписания, оптимизация цепочек поставок и размещения объектов, оптимизационное планирование и прочее. Многие из них сводятся к проблемам смешанного линейно-целочисленного типа (MILP – Mixed Integer Linear Problem). Конечно же мы хотим их решать быстрее и эффективнее, поэтому год назад начали разработку ML-модулей для этого. В этой статье мы познакомим вас с концептом одного такого модуля – для упрощения MILP методом обнуления переменных – и расскажем о том, насколько нам удалось с его помощью сократить время работы решателя.

Читать далее

Создаём надёжные API для бэкенда при помощи конечных автоматов: подробное руководство

Время на прочтение7 мин
Охват и читатели12K
Я — бэкенд-разработчик, поэтому мне довелось по достоинству оценить, насколько важны конечные автоматы при построении надёжных систем, которые хорошо масштабируются. Конечные автоматы отлично подходят для моделирования сложной бизнес-логики и автоматизации переходов между состояниями. В этом посте будет разобрано, что представляют собой конечные автоматы, в чём их польза для бэкенд-разработки, и как с их помощью решать распространённые задачи.

Что такое конечные автоматы?


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

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

Решение проблемы дымки на изображениях с использованием .NET: Простой и эффективный подход

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

Простое .NET решение для четких фото: избавьтесь от дымки или тумана на изображениях всего за несколько шагов!

Читать далее

Как увеличить прибыль на 1 миллион рублей или зачем нужен блок CRM в Конструкторе ботов?

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

Представьте большой отель с собственным сайтом. Огромное число клиентов: старых, новых и потенциальных. Менеджеров атакуют с вопросами от «а можно забронировать двухместный номер на 5-е число» до «а когда будет завтрак».

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

Всем известна простая истина бизнеса: теряется клиент = теряются деньги.

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

В чем заключалась проблема?

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

Что мы сделали?

Так как вся система отеля находилась в Битрикс24, и там же была установлена связь с виджетом от ChatApp, нам оставалось только настроить автоматизированные ответы на часто задаваемые вопросы - что мы и сделали!

Читать далее

Как мы сделали визуализатор трехмерных изображений с нуля

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

Современные томографы позволяют получать высокоточные трехмерные изображения внутренней структуры большого размера, предоставляя ценную информацию о геометрии, составе и дефектах исследуемых образцов. Размеры одной реконструкции обычно колеблются от 512 мегабайт до 1 терабайта. Для анализа таких данных используются специализированные инструменты, но традиционная визуализация трёхмерного объема реконструкции до сих пор является важным этапам оценки качества реконструкции и её интерпретации специалистом.

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

Читать далее

Сказ о том, как РП репликацию на Марии из зеркал состряпал…

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


Нежданно ни гадано, затеяли значит высшие "итишные" силы включить новые заморские очереди Кафка в уже выполненный на 4/3 проект и слава богу, что только для внешних взаимодействий и передачи всякой информации туды-сюды. Главный архитектор дал благословение и понеслось, да не туда, так как нести то некому это невиданное заморское чудо. Что делать, в обозримые сроки не впихнуть и перед боярами чин и обязательства не сдержать. Посидел РП, погоревал, да сдул пыль со знаний древних и ранее опробованных и тут понеслось.

Читать далее

Музыкальное время и MIDI

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

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

Читать далее

Миллер, Рабин, вектор

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

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

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

Читать далее

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

Каким может быть алгоритмическое собеседование и как к нему подготовиться

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

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

Мы попросили Самсонова Ивана рассказать о его критериях оценки кандидатов, а также поделиться советами по подготовке. На видео Иван выступал в роли тимлида, а в обычной жизни он разработчик со степенью в Computer Science и наставник курса «Алгоритмы и структуры данных».

Смотреть и читать

Potato Sorvor в $NOTCOIN. История их реверса

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

Приветствую. Речь в статье пойдёт про мой опыт реверсинга и написания ботнета для $NotCoin.

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

Суть игры в одном слове: кликер.

И что же нужно делать?
У тебя есть монетка, на неё нужно кликать, чем больше монет - тем лучше.

Читать далее

Как найти баланс между интересами покупателей и продавцов: опыт разработчиков Яндекс Маркета

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

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

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

Читать далее

Дерево отрезков

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

Всем привет. В этой статье я расскажу про дерево отрезков. Очень мощной структуры данных, которая позволяет делать много разных операций над массивом чисел. Я постараюсь по полочкам разложить эту тему и объяснить возможности дерева отрезков. Также я разберу несколько нетривиальных задач на дерево отрезков. Помимо самого дерева отрезков я расскажу и про связанные темы: дерево Фенвика и разреженные таблицы.

Читать далее

Оцениваем сложность алгоритмов на C# по памяти и времени с примерами

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

Продолжаем говорить о производительности и оптимизации кода. Сегодня поговорим о том, как и зачем оценивать сложность алгоритмов,  а также наглядно покажем, как эта сложность влияет на производительность кода.

Читать далее

Яндекс запустил Нейро. Рассказываем, как он работает

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

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

Меня зовут Андрей Сюткин, и я отвечаю за ML-трек в Нейро. В этой статье покажу, как выглядит архитектура Нейро и как формируются ответы на технологическом уровне. Ну и, конечно же, поговорим о нейросетях, в том числе о YandexGPT 3, без обучения которых новый сервис просто не увидел бы свет.

Читать далее

Библиотеки для реализации алгоритмов сжатия данных в Rust

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

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

Сегодня мы рассмотрим хорошие библиотеки для реализации алгоритмов сжатия данных на ЯП Rust. Сжатие данных позволяет уменьшать объемы данных без потери качества или с минимальными потерями. Различают две основные категории методов сжатия: с потерями и без потерь.

Читать далее

Вклад авторов