Все потоки
Поиск
Написать публикацию
Обновить
164.36

Алгоритмы *

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

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

Как мы переучивали алгоритм построения маршрутов 2ГИС ради грузовиков

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

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

Я расскажу, как в 2ГИС устроен алгоритм построения маршрутов в целом и как мы адаптировали его под грузовики — например, учили его строить неоптимальные по времени маршруты.

Читать далее

Фильтрация избыточных вершин в геометриях 3D моделей

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

Всем привет! Меня зовут Евгений, я backend‑разработчик в компании Bimeister. Сегодня я хотел бы продолжить рассказ о нашем 3D движке Spatium. В статье речь пойдет еще об одном из алгоритмов оптимизации - поиске и удалении избыточных вершин из 3D моделей.

Материал может представлять интерес для инженеров, связанных с проектированием и разработкой в области 3D.

Читать далее

Вычислительные модели на языке родных осин

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

В последнее время я часто писал о вычислительной сложности, алгоритмах и моделях (например 1, 2, 3). Вычислительные модели лежат в основе вычислительной науки и не только её, и всё же немногие обладают чётким представлением о том, что такое вычислительная модель на самом деле. Это программное обеспечение? Или алгоритм? Как это связано с математическими моделями? Какие языки или обозначения подходят для описания вычислительной модели? Сделает ли ИИ вычислительные модели устаревшими? В процессе обсуждения с некоторыми товарищами сформулировалось достаточно подробное и, надеюсь, понятное описание, которое я и хотел бы представить в этой статье.

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

Если свести процесс научного исследования к его основам, то он предполагает создание и итеративное совершенствование моделей, описывающих эмпирические наблюдения. Таким образом, модели и наблюдения являются основными понятиями науки. Две давние специализации многих дисциплин — это теоретик, придумывающий и совершенствующий модели, и практик, проектирующий конкретные установки для проведения наблюдений.

Читать далее

Путешествие от шифра Цезаря до RSA. Прикладная теория чисел

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

Путешествие от шифра Цезаря до RSA. Прикладная теория чисел.

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

Читать далее

Разбираемся в «базовых» алгоритмах для проекта

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

Меня зовут Александр Певненко, я Java developer в СберТехе. Вместе с командой развиваю Platform V DataSpace — BaaS-продукт, обеспечивающий базовые сервисы для работы с данными.

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

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

Поэтому здесь я приведу несколько «базовых» алгоритмов, знание которых помогает мне работать с прицелом на эффективность кода, и дополню примерами на Python и Java.

Читать далее

Как правильно дифференцировать дискретные функции (Часть 2. Все-таки, МКЭ?)

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

Публикация является продолжением обсуждения алгоритмов вычисления первой производной дискретной функции (функции, заданной массивом {аргумент: значение}, или массивом узловых значений). В части первой обсуждались функции из библиотеки NumPy, и был предложен альтернативный алгоритм, повышающий точность расчетов на границах области определения функции. В настоящей публикации предложены 2 алгоритма на основе метода конечных элементов (МКЭ, Finite Elements Method), один из которых показал на тестовых функциях лучшие результаты в сравнении с альтернативами.

Читать далее

Kaggle для футболистов. Разбираем подходы призеров соревнований по детекции столкновений (1 и 2 место)

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


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

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

Быстрый двоичный поиск без ветвления

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров18K

Мои читатели — занятые люди, поэтому сразу перейду к делу. Вот она, самая быстрая обобщённая (и простая) реализация двоичного поиска на C++:

template <class ForwardIt, class T, class Compare>
constexpr ForwardIt sb_lower_bound(
      ForwardIt first, ForwardIt last, const T& value, Compare comp) {
   auto length = last - first;
   while (length > 0) {
      auto rem = length % 2;
      length /= 2;
      if (comp(first[length], value)) {
         first += length + rem;
      }
   }
   return first;
}

Тот же интерфейс функции, что и у std::lower_bound, но вдвое быстрее и короче. «Без ветвления», потому что if компилируется в команду условной передачи, а не в ветвление/условный переход. Ближе к концу статьи мы изучим опции компилятора и даже более быстрые версии полностью без ветвления. Для понимания этой статьи не нужны особые знания в C++. Достаточно понимать, что итераторы (first и last) по сути являются указателями на элементы массива, хотя могут указывать на один элемент дальше, чем последний элемент массива. Можете не обращать внимания на template, class, constexpr и &. Вот если бы существовал быстрый и чистый язык, работающий на уровне железа...1 2
Читать дальше →

Биржа и блокчейн как лучшее решение проблемы ваучеров в гражданской авиации

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

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

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

Протокол обмена ключами Диффи-Хеллмана для «самых маленьких»

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

За последние десять лет масса технологий, имеющих хоть какое-либо отношение к информационным, претерпела массу изменений. Более того, многие сферы жизни, изначально не имеющие к IT никакого отношения, также преобразились до неузнаваемости и приобрели некий IT-шный бэкграунд. Немаловажную роль в этих процессах информатизации сыграла концепция Интернета вещей (IoT). С самого появления этой концепции было понятно, что она серьёзно повлияет на все сферы деятельности человека, экономические и социальные процессы, а спустя несколько лет после её появления технология оказалась на карандаше Национального разведывательного совета США и была занесена в список «подрывных инноваций».

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

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

Читать далее

Нейромузыка: может ли робот создавать треки?

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

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

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

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

Читать далее

Книга «Прикладные структуры данных и алгоритмы. Прокачиваем навыки»

Время на прочтение12 мин
Количество просмотров13K
image Привет, Хаброжители!

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

Книга полна реальных прикладных примеров на популярных языках программирования (Python, JavaScript и Ruby), которые помогут освоить структуры данных и алгоритмы и начать применять их в повседневной работе. Вы даже найдете слово, которое может существенно ускорить ваш код. Практикуйте новые навыки, выполняя упражнения и изучая подробные решения, которые приводятся в книге.

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

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

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

В последнее время весьма актуальным является вопрос противодействия БПЛА типа «квадро/гексо/октокоптер», использующих для своего полета бесколлекторные двигатели (БКД). Одним из основных путей противодействия таким БПЛА (кроме, конечно, физического воздействия ракетным или стрелковым оружием) является постановка помех каналам управления и навигации посредством радиоэлектронного излучения сигналов с определенными характеристиками.

Конечно, использование классического метода постановки так называемой «заградительной» помехи является наиболее простым способом радиоэлектронного подавления, когда в заданном частотном диапазоне формируется мощный сигнал, препятствующий нормальному функционированию БПЛА, включая, конечно, подавление сигналов системы глобального позиционирования. Однако у этого метода есть и недостатки, основной из которых – необходимость значительных энергозатрат и связанные с ними повышенные риски обнаружения источника помех средствами радиомониторинга противника и вероятного последующего огневого поражения. Следовательно, в интересах сохранения эффективности радиоэлектронного воздействия при снижении уровня излучаемой мощности помеховых сигналов необходимо формировать такой сигнал не в виде сплошного спектра в заданной полосе частот, а в виде какой-то «оптимальной» структуры, обеспечивающей наибольшую степень влияния на оригинальный сигнал в системе управления. Общеизвестно, что оптимальная помеха по своей структуре должна быть близка к структуре подавляемого сигнала. Однако есть много нюансов такого соответствия. В данной статье как раз рассматриваются особенности воздействия помехового сигнала на управляющий для частного случая в области борьбы с БПЛА – воздействия непосредственно на контроллер управления вращением бесколлекторного двигателя, что может расширить возможности противодействия этим БПЛА, фактически нарушая управление даже при сохранении командной связи при использовании вероятным противником специальных мер защиты.

Читать далее

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

Муравьиный алгоритм | Задача коммивояжёра

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


Всем привет! Меня зовут Нурислам aka tonitaga, данная статья является продолжением статьи Базовые алгоритмы на графах.

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

  • Задача коммивояжера является NP-полной, то есть нет известного эффективного алгоритма для ее решения, который работал бы для всех вариантов. Вместо этого применяются различные приближенные алгоритмы. В данной статье мы рассмотрим Муравьиный алгоритм и его реализацию на С++
Читать дальше →

Работа с матрицами в python

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

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

Читать далее

Простые радости вертикального масштабирования

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

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

Как подтвердит любой, кому когда-либо доводилось проходить собеседование по программированию, при наличии арифметической и геометрической прогрессии геометрическая всегда возобладает. При горизонтальном масштабировании расходы растут линейно (арифметически). Но по закону Мура вычислительные мощности со временем растут экспоненциально (геометрически). Это означает, что можно несколько лет ничего не делать, а затем масштабировать систему вертикально и получать улучшение на порядки. За двадцать лет плотность транзисторов возросла в  1000 раз. Это значит, что такая задача, для решения которой в 2002 году потребовались бы тысячи машин, сегодня выполнима всего на одной.

Читать далее

Пишем самую тупую на свете сортировку

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров23K

И это не пузырьковая, а нечто гораздо более тупое.

Как-то после обеда, стоя за чашечкой кофе, мне пришла в голову мысль. Что ведь для того чтобы убедиться что массив отсортирован, надо сделать `n-1` сравнение. Например для массива длины 4 таких сравнения будет 3:

Дальше тупее

Квантовые компьютеры. С точки зрения традиционного программиста-математика. Часть 4

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

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

Читать далее

Книга «Алгоритмы. С примерами на Python»

Время на прочтение11 мин
Количество просмотров34K
image Привет, Хаброжители!

Когда нужно, чтобы программа работала быстро и занимала поменьше памяти, профессионального программиста выручают знание алгоритмов и практика их применения. Эта книга — как раз про практику. Ее автор, Джордж Хайнеман, предлагает краткое, но четкое и последовательное описание основных алгоритмов, которые можно эффективно использовать в большинстве языков программирования. О том, какими методами решаются различные вычислительные задачи, стоит знать и разработчикам, и тестировщикам, и интеграторам.
Читать дальше →

Как мы узнаём, какая музыка играет в кино

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

Бывает такое: смотришь кино, слышишь OST или просто какую-то хорошую песню, которую решили вставить в фильм, и думаешь — а неплохо бы её добавить к себе в плейлист. Способов сделать это было несколько. Можно было пойти и поискать или сам OST к фильму, или неофициальные саундтреки к нему. Можно было посмотреть, что по названию фильма выдаётся в поиске через музыкальные стриминговые сервисы, вдруг какая-то площадка уже позаботилась о вас и собрала тематический плейлист. Отдельные граждане прямо во время фильма включали на смартфоне Shazam и распознавали трек. В общем, кто во что горазд.

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

Меня зовут Алексей Царёв, я занимаюсь развитием технологий в развлекательных сервисах Яндекс. И моя задача в том, чтобы из какой-то отдельно взятой технологии создавать рабочие продукты для конечного пользователя. Именно об этом, на примере распознавания музыки в фильмах, и будет этот пост.

Читать далее

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