Обновить
275.24

Алгоритмы *

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

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

Как мы проектировали свой отечественный драйвер IGBT

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

Всем привет! В НИУ МЭИ регулярно проходят проектно-исследовательские работы с привлечением к ним студентов старших курсов бакалавриата и магистратуры. Такие работы спонсируются различными грантами и направлены на то, чтобы давать возможность студентам поучаствовать в реальной научной и инженерной деятельности уже в рамках обучения, получить опыт, и влиться в интересную работу и проекты. Тематики таких проектов бывают сильно разными и в основном связаны с теми направлениями, которыми занимается выпускающая кафедра, где обучаются студенты.

В этом году я со своими студентами провел такое проектно-научное исследование в рамках гранта НИУ «МЭИ» на реализацию программы научных исследований «Приоритет 2030: Технологии будущего». Тематикой работы была «Разработка интеллектуального драйвера IGBT на напряжение 3,3 кВ для 3-уровневых инверторов тяговых электроприводов поездов высокоскоростной железнодорожной магистрали Москва - Санкт-Петербург». Проект выполнялся с апреля по октябрь, и в нём были задействованы кроме меня, как руководителя, студенты 4 курса бакалавриата и 1 курса магистратуры.

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

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

Читать далее

Петь в такт машине: история караоке и устройство его аппаратов

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

Японское изобретение давно стало привычной частью нашей реальности. Многие отводят душу в караоке по вечерам, одни или в веселой компании. Задумывались ли вы когда-нибудь, как караоке-аппараты считают баллы, которые по итогам исполнения присуждаются отважным певцам? Совершим небольшое путешествие в историю этого изобретения и заглянем внутрь механизма его работы.

Читать далее

Много алгоритмов сортировки на языке C++: от простого к сложному с примерами и пояснениями

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

Всем привет! Подтолкнуло написать меня эту статью мой непосредственный интерес к алгоритмам и решению задач на leetcode, каждый раз, используя стандартную сортировку из STL std::sort, я знал, что ее сложность O(n*log(n)), но как она реализована внутри не доходили руки разобраться, в добавок мне стало интересно, какие есть другие виды сортировок, кроме самых простых, с которыми каждый знакомится в начале своего пути.

Я решил это исправить! И описать все виды сортировок, с которыми мне так или иначе приходилось встречать во время выполнения своих тасков или решению задач на leet.

Начнем с того, что разберемся, какие виды сортировок вообще есть и разобьем их на условные простые/продвинутые/для специальных случаев, а также разберемся, что использует std::sort у себя под капотом.

Читать далее

Какие образы распознаёт двухлучевой инфракрасный счётчик

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

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

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

Читать далее

BABILong — бенчмарк для оценки LLM на больших контекстах

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

Привет, Хабр! Мы — команда Memory‑Augmented models в составе лаборатории Cognitive AI Systems AIRI. В ходе своих исследований мы стараемся разобраться, насколько хорошо LLM могут обрабатывать большой объем данных и решать задачи на основе них.

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

Чтобы выяснить это, мы вместе с коллегами из МФТИ и Лондонского института Математических Наук создали новый бенчмарк под названием BABILong, который мы привезли на NeurIPS в этом году. Он оценивает то, насколько успешно современные модели умеют искать информацию в собственных гигантских контекстах. Оказалось, что зачастую главное — это не размер, а умение пользоваться.

В этой статье расскажем подробнее о наших экспериментах, а также о том, как эффективно использовать длинный контекст.

Читать далее

Небольшая доработка двухлинейного сумматора и счётчика испытательного стенда для сумматоров

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

Вообще складывается впечатление, что данная плата живёт немного своей жизнью. В том плане, что некоторые, не мои решения, просто дают сбои на определённых параметрах испытательного стенда, хотя всё компилируется и проект собирается, (и я его под свои испытуемые решения не писал, как видно из кода - испытательный "стенд" будет работать с любыми аналогами) - мои работают и сбоев не давали пока (просто не вижу смысла увеличивать нагрузку на плату, если из испытуемых решений остаётся в работе только моё). Ну то ладно, запись не о том, а всё о том-же сумматоре двулинейном, но уже немного доработанном в том плане, что один XOR не нужен. Он там был с того времени, когда я разделил задачу на две - создать линию, работающую на перенос бита и, собственно, суммирующую. Мой сумматор "врос" в плату в переносном смысле слова - остальные перестали работать. Кому-то может показаться бредом, что остальные перестали работать в тестовой схеме, но это так, причём я не изменял их код вообще (только комментировал и раскомментировал их код, код проекта тут. Не уверен, что правильно понимаю работу осциллятора и что там за частота на выходе, поэтому приведу просто цифры, и собственно небольшое отступление почему мной так долго рассматривался полученный сумматор.

Читать далее

Опасность наивности

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

Вопрос на засыпку. Как вы реализуете перемешивание колоды карт?

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

Читать далее

Реализация шифра «Магма» на языке RUST

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

Привет! Сегодня мы продолжаем реализовывать шифрование. В этой статье мы рассмотрим алгоритм шифра "Магма", который был разработан и использовался в СССР.

Читать далее

Простые эвристики для TSP

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

В прошлой заметке я поднял тему ванильно-радужных перспектив использования искусственного интеллекта для решения оптимизационных задач, в частности, для решения хорошо изученной задачи коммивояжера, она же TSP (Travelling Salesman Problem). Там же был дан старт разбору некоторых классических алгоритмов для решения этой задачи в рамках чего я представил подход, основанный на MIP (Mixed Integer Programming). Считаю важным завершить такой разбор для лучшего понимания отличий в работе нейронных сетей.

Читать далее

SLAM на Java с OpenCV: сравнение алгоритмов автономной навигации

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

Интересуешься визуальной одометрией? В этой статье я сравнил алгоритмы ORB, R2D2, SIFT и их комбинации, реализовав их на Java с OpenCV. Подробно разобрал, как они работают, замерил точность, производительность и наглядно показал, какой алгоритм лучше для беспилотников. Если хочешь узнать больше и посмотреть примеры кода на Java, заглядывай!

Как я сравнил SLAM-алгоритмы на Java?

Homo clickus. Как моделирование кликающих людей пригодится для сегментации изображений

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

Приветствую всех читающих!

Меня зовут Антон Антонов, я инженер по искусственному интеллекту, работаю в Институте искусственного интеллекта AIRI в команде, которая занимается Embodied AI — областью, связывающей робототехнику, компьютерное зрение и большие языковые модели.

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

Ниже я хотел бы подробнее рассказать о нашей разработке.

Кликнуть

Магия простоты: как мы улучшили отображение общественного транспорта на карте

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

Привет! Я Иван Косолапов, тимлид команды ETA/RTA. Мы часть сервиса Data Science и занимаемся анализом данных и машинным обучением для задач навигации в 2ГИС.

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

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

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

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

Расскажу, как решая эти задачи, мы добились более точного отображения автобусов на карте в 2ГИС, упростив существующую на тот момент сложную систему.

Читать

SQL HowTo: агрегация внутри рекурсии (Advent of Code 2024, Day 11: Plutonian Pebbles)

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

Сегодня посмотрим на примере задачки из Advent of Code зачем и как можно обойти ошибку aggregate functions are not allowed in a recursive query's recursive term, возникающую при попытке агрегировать какие-то данные внутри шага рекурсии на PostgreSQL — «если нельзя, но очень хочется, то можно».

Читать далее

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

Хэши: виды, применение и примеры на Java

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

Хэширование — это фундаментальный процесс в программировании, который применяется везде: от защиты паролей до ускорения поиска данных в структурах. Эта статья поможет разобраться в основных видах хэшей, их применении, а также покажет, как их использовать на практике с примерами на Java.

Читать далее

Формальная верификация протокола IBFT: проверяем безопасность византийского консенсуса в блокчейне

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

Добрый день! Меня зовут Кирилл Зиборов, я представляю отдел безопасности распределенных систем Positive Technologies. В этой статье я продолжу рассказывать о том, как мы используем инструменты формальной верификации для предотвращения уязвимостей в различных компонентах блокчейна. Ранее мы верифицировали смарт-контракты дедуктивным методом. В этот раз речь пойдет о протоколах консенсуса — механизмах принятия узлами новых транзакций в цепочку, а именно об алгоритме Istanbul Byzantine Fault Tolerant и в целом о том, как можно гарантировать корректность подобных алгоритмов с помощью метода проверки моделей.

Читать далее

Головоломки с балансом. Поиск фальшивой монеты (часть 2)

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

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

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

Читать далее

Когда ИИ может в оптимизацию…

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

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

Читать далее

Элегантная математика фильтров Блума

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

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

В этой статье речь пойдёт об изяществе математики, лежащей в основе фильтров Блума. Мы разберём аспекты точности работы и компромиссов при конфигурировании этих фильтров, а также узнаем, почему в некоторых случаях они могут стать отличным выбором, особенно в сфере больших данных и системах OLAP, когда подразумевается обработка огромных и статичных датасетов.
Читать дальше →

Медианы чисел

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

Пусть дано нечётное количество чисел. Обозначим его через n = 2k + 1. Будем считать, что все числа разные. Медианой считается то число из них, для которого есть k чисел меньше его и k чисел больше. Далее будут рассматриваться алгоритмы поиска медиан при небольших значений n.

Читать далее

Порядок из хаоса. Напишем клеточный автомат «Муравей Лэнгтона» на p5py в браузере и анимируем с помощью state machine

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

Тридцать восемь лет назад в свои тридцать восемь лет аспирант Мичиганского университета Крис Лэнгтон придумал два простых правила для клеточного автомата. Мы быстро повторим правила Лэнгтона, оживим муравья, написав код онлайн, добавим динамики (плавная анимация) и интерактивности (редактор уровней). Повоюем, постреляем купидоновыми стрелами, порисуем на заборе. А ещё педагогически немного адаптируем код для занятий с детьми (опционально).

Читать далее

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