Рубрика «Алгоритмы» - 10

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

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

В GCC он более чем в два раза быстрее, чем std::lower_bound, который сам по себе — очень высококачественный двоичный поиск. Цикл поиска прост, а генерируемый ассемблерный код красив. Меня потрясло, что он существует, но им, похоже, никто не пользуется.
Читать полностью »

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


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

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

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

Видео

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

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

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

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

Если вам интересно, как просто генерировать реалистичные трехмерные ландшафты на Python, добро пожаловать под кат!
Читать полностью »

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

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

О чём пойдет речь

Будем размышлять и пытаться писать быстрый драйвер флешки и при этом попробуем сэкономить её ресурс при перезаписях.

Предыстория и проблемы возможных реализаций

Понадобилась SPI флэшка для хранения данных, которыми оперирует встраиваемое ПО микроконтроллера. Типовая задача, если не хватает места внутри основного чипа.

Читать полностью »

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

Промт: Микрофон и сцена

Промт: Микрофон и сцена
Читать полностью »
Как написание кода с помощью машинного обучения всё (не)изменит - 1

Астрологи объявили неделю (месяц?, год?) кухонной аналитики по AI и ML на Хабре. Настало время для этой статьи, которую я писал два года назад. И вот что удивительно — она должна была устареть, однако не устарела.

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

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

Так что же такого революционного дали нам нейросети применительно к программированию?
Читать полностью »

Постпятничные клеточные автоматы: альтернативные окрестности и HROT - 1

👾!

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

Сегодняшний обзор мы совместим с ещё одним расширением: в статье об LtL было упомянуто, что параметры рождения и выживания клетки могут поддерживать множество значений и диапазонов в некоторых прочих конфигурациях. В первую очередь речь шла о HROT (Higher-Range Outer-Totalistic) – обобщении LtL конфигурации, на котором и будут наши сегодняшние примеры.
Читать полностью »

Как устроено индексирование баз данных - 1


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

Самая маленькая хеш-таблица в мире - 1

1 декабря я в очередной раз поучаствовал в Advent of Code, написав программу на Rust. Если интересно — код можно найти на GitHub. Тут мне хотелось бы рассказать о моём решении задачи, предлагавшейся во 2 день мероприятияЧитать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js