Обновить
212.66

Алгоритмы *

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

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

Как «волшебное дерево» помогает нам делать выбор

Время на прочтение5 мин
Количество просмотров2.5K

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

Инструмент постараемся описать просто и доступно, без использования математических формул и академических формулировок, ведь мы хотим продемонстрировать его практическое применение. Речь пойдет об аналитической подсистеме в CRM (далее по тексту просто «система»), которая отвечает за создание стратегии взаимодействия с потенциальным клиентом.

Читать далее

Карты, деньги, два букета. Как мы пришли к собственному сервису доставки

Время на прочтение9 мин
Количество просмотров3.9K

Привет, Хабр. Меня зовут Андрей, я бэкенд-разработчик в команде Flowwow. 

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

Приходит тот день, когда бизнес задает себе философский вопрос «что дальше?», в нашем случае это «куда расти маркетплейсу?». Такой вопрос касается всей команды, включая ИТ. Увидев бэкенд в моей роли, вы наверняка ожидаете техническую мясорубку. Не без этого, но во многом хочу рассказать про сам путь. 

Читать далее

Определение частоты сердечных сокращений методом корреляции с использованием быстрых Фурье преобразований

Время на прочтение4 мин
Количество просмотров4K

При обработке медицинских данных требуется определять частоту сердечных сокращений (ЧСС). Большинство методик расчёта ЧСС использует определение пиков в графике сердечных сокращений и подсчёта длительности интервала между пиками. Альтернативным методом расчёта ЧСС является вычисление корреляции последовательности измерений относительно сдвига графика на заданный интервал времении и выбор в качестве вычисленного интервала того, при котором корреляция максимальная. Недостатком вычисления интервала сердечных сокращений методом рассчёта корреляции является большое число вычислений, однако число этих расчётов можно существенно сократить при использовании быстрых Фурье преобразований (БФП).

Читать далее

Распознаем простые фигуры по массиву точек

Время на прочтение6 мин
Количество просмотров8.8K

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

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

Читать далее

Как собрать кубик Рубика из деталей?

Время на прочтение4 мин
Количество просмотров8.5K

Представьте что перед вами лежат остов и 20 кубиков. Ваши действия?

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

Читать далее

Как я написал алгоритм сортировки, который быстрее std::sort. Часть 1

Время на прочтение14 мин
Количество просмотров22K

Прим. Wunder Fund: ну, вы наверное, и сами догадываетесь, как мы любим быстрые алгоритмы и оптимизации. Если вы тоже такое любите — вы знаете, что делать)

В наши дни сказать, что изобрёл алгоритм сортировки, который на 30% быстрее того, что считают эталонным, это значит — сделать довольно смелое заявление. Я, к сожалению, вынужден сделать ещё более смелое заявление. Дело в том, что я создал алгоритм сортировки, который, для многих вариантов входных данных, вдвое быстрее std::sort. И, за исключением сортировки специально созданных входных последовательностей, на которых алгоритм упирается в свой худший случай, он всегда быстрее std::sort. (А когда появляются данные, приводящие к худшему случаю алгоритма, я эту ситуацию детектирую и автоматически перехожу на std::sort).

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

Учитывая то, о чём я писал в моём прошлом материале, это, конечно, вариант поразрядной сортировки (radix sort). То есть — его временная сложность ниже, чем O(n log n). Вот два основных направления, по которым я усовершенствовал базовый алгоритм:

Читать далее

Три архитектуры эльфам, семь гномам, девять людям… где же искать ту, что объединит их все?

Время на прочтение60 мин
Количество просмотров33K

Проводится сеанс разоблачения магии (CISC, RISC, OoO, VLIW, EPIC, ...).
Без традиционной рубрики “а что, если” тоже не обошлось.

Добро пожаловать под кат, правда, лёгкого чтения ожидать не стоит.

Читать далее

Что такое алгоритм… Часть [05:00] «Искусственный интеллект»

Время на прочтение21 мин
Количество просмотров5.8K

На алгоритмической арене будет дано новое представление. Под куполом "Искусственного интеллекта" покажут потолок своих возможностей "Языки программирования" в столкновении с ограничениями, унаследованными от естественных языков. Будут продемонстрированы особенности использования структуры, контролирующей последовательность исполнения алгоритма. Мы приоткроем секреты фокуса "Китайская комната". Выясним на какой алгоритмический путь вступила технология искусственных нейронных сетей (ИНС). А самое главное подготовим почву для заключительной статьи, призванной зафиксировать единственно возможный способ синтеза информации.


Итак, время пришло. Мы начинаем...


Title


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

Читать дальше →

Я написал более быстрый алгоритм сортировки

Время на прочтение34 мин
Количество просмотров46K

Может показаться откровенной наглостью в наши дни утверждать, что Вы изобрели алгоритм сортировки, который на 30% быстрее, чем лучший существующий. Увы, я должен сделать гораздо более наглое заявление: я написал алгоритм сортировки, который в два раза быстрее, чем std :: sort для многих входных данных. И за исключением случаев, когда я специально конструирую воспроизведение нахудших для него ситуаций, алгоритм никогда не бывает медленнее, чем std :: sort (и даже когда попадаются эти худшие случаи, они обнаруживаются и происходит автоматический возврат к std :: sort).

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

Читать далее

Польская нотация или как легко распарсить алгебраическое выражение

Время на прочтение6 мин
Количество просмотров104K

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

Читать далее

Объяснение фильтра Калмана в картинках

Время на прочтение9 мин
Количество просмотров52K
image

Я обязан рассказать вам о фильтре Калмана, потому что он выполняет просто потрясающую задачу.

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

Собеседования джунов — вся жесть вопроса

Время на прочтение6 мин
Количество просмотров87K

После 2-х лет разработчиком на С# в небольшой английской компании в сфере строительства, я решил выяснить свою стоимость как специалиста на рынке труда Великобритании. Несмотря на то, что большинство вакансий представляют собой примерно одно и то же: «Требуется человек-оркестр с 10+ лет опыта для очень интересной работы», — я специально выбирал позиции исключительно младшего разработчика не содержащих цифр 5+, 10+ и 15+ в описании. Как это было — читайте дальше.

Читать далее

Как с помощью машинного обучения ускорить категоризацию товаров на маркетплейсах и в интернет-магазинах?

Время на прочтение9 мин
Количество просмотров5.8K

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

Хочу узнать

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

Наступление домашних роботов, вооруженных лидарами

Время на прочтение9 мин
Количество просмотров11K

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

Лидары широким фронтом ворвались в робототехнику, автомобилестроение и дистанционное зондирование примерно два десятка лет назад. В 2000 году я впервые взял в руки картинку городского квартала, полученную при сканировании самолетным лидаром. В США с 2003 года ДАРПА (Defense Advanced Research Projects Agency)  начало финансировать соревнования беспилотных автомобилей, которые, как правило, оснащались лидарами. Это привело к быстрой эволюции самоуправляемых автомобилей и роботов, которые со страниц научно-фантастических романов шагнули в обычную жизнь. Лидары дистанционного зондирования делают порядка сто тысяч выстрелов лазерным лучом в секунду и стоят около миллиона долларов, зато, установленные на небольших самолетах или вертолетах, дают четкую трехмерную картину местности с точностью по высоте в несколько сантиметров. Благодаря узкому пучку и высокой чувствительности приемника, которые могут улавливать считанные отраженные фотоны, лучи лидаров достигают поверхности земли даже в самом густом лесу. Поэтому лидарное сканирование полюбили археологи Центральной Америки, которые могут, после обработки лидарных данных, «убрать» джунгли и обнажить «голый рельеф», на котором появляются следы древних городов майя и других исчезнувших цивилизаций.

Читать далее

Простейший вариант поиска пути: объяснение на Python

Время на прочтение8 мин
Количество просмотров32K

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

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

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

Здесь мы рассмотрим практическое применение этого алгоритма. Вам понадобятся базовые знания программирования и языка Python.

Читать далее

Движок VSO: причиняем добро сценаристам

Время на прочтение13 мин
Количество просмотров6.5K

В этой статье мы расскажем о том, как вместе с «движковой» командой разработали наш внутренний редактор ICS и упростили процесс работы с проигрыванием кат-сцен.

Read more

Алгоритм распознавания лиц [Название_Компании] признан лучшим в мире

Время на прочтение14 мин
Количество просмотров11K

Мы хотим познакомить вас с самым авторитетным на сегодняшний день «чемпионатом мира» по распознаванию лиц, NIST Face Recognition Vendor Test (FRVT) — что он из себя представляет, для чего создан, как проходит соревнование и главное, насколько он действительно важен для разработчиков и бизнеса.

Читать далее

Blue (Голубой) Midnight Wish — еще один алгоритм хэширования (для ценителей)

Время на прочтение6 мин
Количество просмотров2.8K

Привет всем хабровчанам и просто заглянувшим!

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

Итак, сегодня я хочу рассказать вам о Blue Midnight Wish (BMW, да-да, может кто-то еще не понял). Сразу хочу предупредить - это моя первая статья, поэтому будьте нежнее, по возможности...

Читать далее

Знакомство с трансформерами. Часть 3

Время на прочтение13 мин
Количество просмотров7.4K

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

Читать далее

Легковесная криптография: близится финал, осталось 10 кандидатов. Шифры АНБ вне конкурса

Время на прочтение5 мин
Количество просмотров8.2K

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

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

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