Как стать автором
Обновить
166.59

Алгоритмы *

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

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

Алгоритмы поиска подстроки на JavaScript

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 3.9K
JavaScript *Алгоритмы *
Туториал

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

Как говорит Википедия «Поиск подстроки в строке — одна из простейших задач поиска информации», но это не совсем так, ниже я расскажу про разные алгоритмы решения и покажу примеры их реализации. Начнем!

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 9

Новости

Метод генерации столбцов для решения задач математической оптимизации большой размерности

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 4K
Алгоритмы *Математика *Машинное обучение *Бизнес-модели *Статистика в IT
Из песочницы

Теперь к истокам задачи: часто, чтобы математическая модель была применима в реальном секторе, необходимо использовать очень много ограничений и большое количество переменных. Задачи, возникающие в бизнесе в реальных условиях, требуют использования моделей с большим количеством ограничений и большим количеством переменных.  Временами задача в лоб может и не решиться, поэтому были придуманы различные трюки. Один из них - метод « генерации столбцов» (Column generation).

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 8

Решаем криптарифмы с помощью алгебры и python

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 3K
Python *Алгоритмы *Математика *

Если вы увлекались математикой в возрасте до 12 лет, то, наверное, встречались с криптарифмами - арифметическими ребусами.

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

Читать далее
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 7

Как с помощью нейронной сети снизить дозу КТ, не потеряв в качестве реконструкции

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 1K
Блог компании Smart Engines Алгоритмы *Обработка изображений *Машинное обучение *

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

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 1

Истории

Шаблон проектирования: Composite

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 1.6K
Java *Алгоритмы *ООП *
Обзор

Всем привет! В данной статье рассмотрим паттерн проектирования Composite («Компоновщик»).

Начнем немного с теории.

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

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 7

Нечеткое сравнение строк с помощью rapidfuzz

Время на прочтение 9 мин
Количество просмотров 2.1K
Python *Программирование *Алгоритмы *
Кейс

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

Меня зовут Антон Черниговский, я участник профессионального сообщества NTA.

В публикации расскажу, как при решении задачи нечеткого сравнения строк, среди разных инструментов сравнения (по косинусному сходству, по сходству Левенштейна, по сходству Джаро‑Винклера) был выбран лучший вариант нечеткого сопоставления. Сравнение инструментов производилось исходя из скорости выполнения, правильности сравнения и простоты реализации, с помощью библиотек rapidfuzz и sklearn.

Узнать какой инструмент лучше
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 14

Алгоритмы программы для дозиметра на счетчике Гейгера

Уровень сложности Простой
Время на прочтение 17 мин
Количество просмотров 3K
Алгоритмы *Физика
Туториал

Эта статья написана на основе собственного опыта разработки и программирования бытовых дозиметров на счетчиках Гейгера для коммерческих заказчиков.

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

Будет полезна радиолюбителям, разработчикам и программистам для аналогичных задач.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 28

Интерактивные книги 2: на этот раз про геймдизайн и алгоритмы

Уровень сложности Средний
Время на прочтение 2 мин
Количество просмотров 6.7K
Блог компании Timeweb Cloud Программирование *Разработка игр *Алгоритмы *Читальный зал
Мнение
Хабр силен комментариями. Поэтому, когда я писал топик "Мечтали про интерактивные книги? Я знаю человека, который делает их прямо сейчас", то надеялся, что читатели помогут найти аналогичные примеры. Результат превзошел ожидания.


Итак, знакомьтесь — Амит Патель (Amit Patel) и его интерактивные статьи на стыке математики, алгоритмов и программирования. Небольшой дисклаймер: поскольку я не могу встроить интерактивные иллюстрации на Хабр, то буду использовать анимированные gif. Некоторые из них могут быть тяжелые.
Читать дальше →
Всего голосов 44: ↑44 и ↓0 +44
Комментарии 19

Как ускорить бинарный поиск

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 7.1K
Поисковые технологии *Python *Алгоритмы *Администрирование баз данных *Поисковая оптимизация *
Из песочницы

Приветствую, сообщество Habr.

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

Читать далее
Всего голосов 26: ↑16 и ↓10 +6
Комментарии 35

Ускоряем приложение: никаких фреймворков — только математика

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 11K
Блог компании Конференции Олега Бунина (Онтико) Блог компании Почтатех Высокая производительность *Алгоритмы *Микросервисы *

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

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

Читать далее
Всего голосов 37: ↑33 и ↓4 +29
Комментарии 9

Вычислительная сложность некоторых игр и головоломок

Время на прочтение 11 мин
Количество просмотров 5.1K
Блог компании FirstVDS Алгоритмы *Математика *Логические игры

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

Дальше-больше..
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 15

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

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 12K
Программирование *Алгоритмы *
Туториал
Перевод

Недавно я прочитал пост Алекса Мускара Beautiful Binary Search in D. В нём описывается алгоритм двоичного поиска под названием «алгоритм Шора». Я никогда не слышал о нём и его невозможно загуглить, но увидев алгоритм, я думал только об одном: «он без ветвления». Кто знал, что может существовать двоичный поиск без ветвления? Поэтому я занялся его трансляцией в алгоритм для итераторов C++, не требующий индексации на основе единицы или массивов фиксированного размера.

В GCC он более чем в два раза быстрее, чем std::lower_bound, который сам по себе — очень высококачественный двоичный поиск. Цикл поиска прост, а генерируемый ассемблерный код красив. Меня потрясло, что он существует, но им, похоже, никто не пользуется.
Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Комментарии 7

FTM, который написал MUSIC: точное определение местоположения Wi-Fi-устройств в условиях многолучевости. Часть 1/3

Время на прочтение 14 мин
Количество просмотров 2.1K
Блог компании Специальный Технологический Центр Алгоритмы *Беспроводные технологии *Математика *Физика
Перевод

Статья «When FTM Discovered MUSIC: Accurate WiFi-based Ranging in the Presence of Multipath» опубликована в материалах Международной конференции IEEE по компьютерным коммуникациям, которая прошла в Торонто, Канада, с 6 по 9 июля 2020 г. (IEEE International Conference on Computer Communications, INFOCOM 2020). Идеи, изложенные в этой публикации, получили дальнейшее развитие, в частности, в статье «FSI: A FTM Calibration Method Using Wi-Fi Physical Layer Information» («FSI: метод калибровки FTM с использованием информации о физическом уровне Wi-Fi»), опубликованной во 2-й части материалов 17-й Международной конференции по беспроводным алгоритмам, системам и приложениям, которая прошла в Даляне, Китай, с 24 по 26 ноября 2022 г. (Wireless Algorithms, Systems, and Applications; WASA 2022).

Аннотация. Недавно (относительно, в 2016 году – прим. пер.) стандартизирован IEEE протокол точного измерения времени (Fine Timing Measurement, FTM), основанный на измерении дальности по времени распространения сигнала (Time-Of-flight, TOF). Большое количество публикаций посвящены определению местоположения Wi-Fi-устройств в помещениях. С другой стороны доступных соответствующих решений по состоянию на данный момент очень мало. Поэтому появление FTM может стать поворотным моментом в преодолении разрыва между теорией и практикой. Эксперименты с первыми картами Wi-Fi, поддерживающими FTM, показывают, что в условиях прямой видимости (Line-Of-Sight, LOS), они обеспечивают точность до нескольких метров, но точность в условиях вне прямой видимости (Non-Line-Of-Sight, NLOS) может быть не такой высокой. В этой статье представлен FUSIC – первый метод, который улучшает точность измерений с помощью FTM в условиях LOS до значений в условиях NLOS без необходимости внесения каких-либо изменений в стандарт.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 4

Алгоритмы балансировки нагрузок

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 13K
Блог компании RUVDS.com Алгоритмы *Серверная оптимизация *Серверное администрирование *
Туториал
Перевод

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

В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать дальше →
Всего голосов 95: ↑94 и ↓1 +93
Комментарии 16

Ответом на задачу по упаковке цветов в бесконечной сетке оказалось число 15

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 7K
Блог компании RUVDS.com Алгоритмы *Математика *
Перевод
Видео

В задаче по «упаковке цветов графа» (в оригинале packing coloring, — прим. пер.) спрашивается, сколько чисел необходимо для заполнения бесконечной сетки так, чтобы идентичные числа никогда не оказывались слишком близко друг к другу. И новый арифметический эксперимент с использованием компьютера даёт на удивление простой ответ.

Сколько чисел потребуется для заполнения бесконечной сетки так, чтобы расстояние между вхождениями одного числа было больше самого этого числа?
Читать дальше →
Всего голосов 46: ↑45 и ↓1 +44
Комментарии 12

Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

Время на прочтение 23 мин
Количество просмотров 56K
Работа с 3D-графикой *Разработка игр *Алгоритмы *Компиляторы *Математика *
Перевод

В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // зловещий хакинг чисел с плавающей запятой на уровне битов
    i  = 0x5f3759df - ( i >> 1 );               // какого чёрта?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // первая итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // вторая итерация, можно удалить

    return y;
}

Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
Читать дальше →
Всего голосов 182: ↑180 и ↓2 +178
Комментарии 52

Алгоритм движка генератора карт трассировок для алгоритма замены свёрточных нейросетей

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 2.4K
Алгоритмы *
Из песочницы

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

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 4

Нахождение минимальных путей в разреженных графах, используя матрицу 5xN

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 2.2K
Высокая производительность *PHP *Алгоритмы *Go *

Введение

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

Описание алгоритма

Алгоритм использует матрицу размером 5xN для хранения информации о графе и вычисления кратчайших путей. Каждая строка матрицы содержит следующую информацию:

Читать далее
Всего голосов 8: ↑4 и ↓4 0
Комментарии 22

Алгоритм, сделавший ChatGPT таким «человечным» — Reinforcement Learning from Human Feedback

Время на прочтение 8 мин
Количество просмотров 5K
Data Mining *Алгоритмы *Машинное обучение *Искусственный интеллект Будущее здесь

ChatGPT генерирует разнообразный и привлекательный для человека текст. Но что делает текст «хорошим»? Это субъективно и зависит от контекста. Например, если вы попросите сочинить историю, нужен творческий подход. Если вы запрашиваете информацию, то хотите, чтобы она была правдивой. А если вы просите написать код, то ожидаете, что он будет исполняемым.

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

Именно данные с фидбеком от людей позволили дообучить их языковую модель и сделать продукт таким «человечным».

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

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 9

Простая процедурная генерация мира, или Шумы Перлина на Python

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 4.1K
Блог компании Selectel Работа с 3D-графикой *Разработка игр *Алгоритмы *Дизайн игр *
Обзор

Недавно я выпустил статью, в которой рассказал о библиотеке Ursina Engine и показал, как создать свою трехмерную игру на Python. Между разделами вскользь упомянул про шум Перлина. Это один из базовых алгоритмов процедурной генерации, который можно использовать для создания красивых игровых миров. Хочу рассказать о нем подробнее и показать, как работать с модулем perlin-noise.

Если вам интересно, как просто генерировать реалистичные трехмерные ландшафты на Python, добро пожаловать под кат!
Читать дальше →
Всего голосов 44: ↑44 и ↓0 +44
Комментарии 0

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