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

Алгоритмы *

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

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

Как одной математической формулой определить цвет ячейки на рулетке?

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

Однажды моя девушка проходила курс по основам python. Она показала мне небольшую задачку на использование if-else: "по номеру кармана (ячейки) на рулетке определите его цвет".

Казалось бы, все довольно просто — используем условные операторы и не знаем проблем! Но можно ли вывести математическую формулу которая будет работать для всех ячеек? В этой статье я описал поиски такой формулы!

Читать далее

Как начать мыслить о создании цифрового интеллекта

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

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

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

Читать далее

Постквантовые криптостандарты США на алгоритмы электронной подписи на основе хеш-функций с сохранением состояния

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

Приветствую, Хабр! В моей предыдущей статье были описаны принятые в прошлом году стандарты США FIPS (Federal Information Processing Standard — Федеральный стандарт обработки информации — аналог стандартов ГОСТ Р в России) на постквантовые алгоритмы электронной подписи (FIPS 204 и FIPS 205) и инкапсуляции ключей (FIPS 203). Данные криптостандарты были приняты в результате тщательного анализа и отбора алгоритмов в рамках открытого конкурса, проводимого Институтом стандартов и технологий США NIST; данный конкурс также был описан в предыдущей статье.

Стандарты FIPS 203 [1] и FIPS 204 [2] описывают алгоритмы, основанные на применении структурированных алгебраических решеток, тогда как алгоритм, стандартизованный в FIPS 205 [3], базируется на стойкости нижележащих хеш‑функций; данный алгоритм называется Stateless Hash‑Based Digital Signature Algorithm (SLH‑DSA) — алгоритм электронной подписи на основе хеширования без сохранения состояния. Стоит сказать, что данные алгоритмы стали не первыми постквантовыми криптоалгоритмами, стандартизованными в США, — еще в 2020 году в США был издана «специальная публикация» (SP — Special Publication — аналог рекомендаций по стандартизации в России) NIST SP 800–208 [4], описывающая несколько алгоритмов электронной подписи с сохранением состояния, также основанных на хеш‑функциях.

Далее в статье — описание и схемы алгоритмов, описанных в NIST SP 800–208, а также небольшой анализ особенностей алгоритмов данного класса.

Читать далее

Вычислить VS запомнить — простой и экономичный пример организации обработки потока и данных для физической симуляции

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

Привет Хабр. Разумеется я не последовал рекомендациям нейросети, как и не стал её обременять подробностями задачи, потому что имею опыт некоторый опыт в алгоритмизации и хочу его увеличить. Не могу сказать что и в этот раз это что‑то сногсшибательное, но новичку можно ознакомится чтобы знать как ориентировать своё мышление в решении подобных задач конвейерной обработки данных. Публикация будет отражать именно суть решения задачи, и не более, чтобы не усложнять теорией. И под спойлером предыстория и ещё немного интересного по ссылкам, так или иначе связанного с публикацией. Единственное что хочется отметить в превью, что главный скил ведения уникальных проектов — умение оптимально и экономично свзывать в единую сеть (планировать) все необходимые опорные вершины (а они могут быть очень разными, даже если не говорить о самой своей жизни, то можно сказать о симуляторе жизни) проекта необходимые для его развития и разработки. Почему в названии «трек» — потому что это беглый обзор ряда решений, с основным в конце. Это более полезный трек для новичков, специалисты (но из материала в сети следует что не все) наверняка знакомы с подобными трюками. Если не смущает такая круговерть — можете читать (тут по ссылке есть отступление на геометрическое изыскание по вычислению угла на сетке координат по точкам, формулы там не верны скорее всего, так как их писала LM, у меня не было на них пока времени — теперь будет, но решение верное).

Читать далее

Сложение точек эллиптической кривой в числах, как на калькуляторе

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

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

Читать далее

Как алгоритм Recovering Difference Softmax (RDS) делает рекомендации и уведомления точнее и эффективнее

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

Алгоритм Recovering Difference Softmax (RDS) — полноценный подход к оптимизации уведомлений и контента для повышения вовлеченности пользователей. Алгоритм выбирает единственно лучший вариант, удерживая пользователей дольше и возвращая их чаще.

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

Как RDS превращает простые сигналы в рост вовлечённости? Разбираемся в статье!

Читать далее

Что не так? Три парадокса теории вероятностей

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

Парадокс двух детей Вы встретили на прогулке соседей с сыном. Известно, что у них двое детей. Какова вероятность, что второй — тоже мальчик?

Казалось бы, детская задачка, где нужно просто “вспомнить формулу”, но всё не так однозначно. Если задать этот вопрос прохожему, он, скорее всего, скажет ½. Преподаватель математики, возможно, ответит ⅓. Кто из них прав?

В каком-то смысле, правы оба. Просто каждый представляют себе свой способ, как была получена информация о ребёнке. На самом деле это и есть условие задачи. Только скрытое. 

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

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

В этой статье — три таких истории. В первой один и тот же факт даёт разные вероятности, если по-разному устроено наблюдение. Во второй один и тот же объект может быть “случайным” множеством способов. А в третьей невозможно придумать, как сделать задачу математически строгой.

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

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

Читать далее

Повышаем эффективность хранения данных до 300 раз с помощью таблиц SCD-2

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

Всем привет, меня зовут Василий. С 2021 года работаю в роли инженера данных в Х5 Tech, успел за это время познакомиться с несколькими интересными проектами и подходами в области обработки данных, об одном из которых пойдет речь далее.

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

Разберем, что из себя представляют Slowly Changing Dimensions-2 (далее SCD-2) таблицы и самостоятельно реализуем на PySpark алгоритм сохранения данных в них. Попутно поговорим о том, как находить изменения в любой таблице, даже если отсутствуют поля для выбора изменившихся записей, и научимся получать из созданной SCD-2 таблицы срезы на требуемую дату в прошлом.

Читать далее

Еще чуть-чуть быстрее ищем кратчайший путь на Python

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

Привет! На связи команда геоаналитики ecom.tech, мы строим модели машинного обучения на основе пространственных данных для задач ритейла в реальном времени, а также создаем промежуточные инструменты на базе методов прикладной геоаналитики. На наших технологиях работает Самокат и Мегамаркет. 

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

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

Читать далее

Поднимайте If вверх, опускайте For вниз

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

Эта статья — краткая заметка о двух связанных друг с другом эмпирических правилах.

Поднимайте If вверх

Если внутри функции есть условие if, то подумайте, нельзя ли его переместить в вызывающую сторону:

// ХОРОШО

fn frobnicate(walrus: Walrus) {

... }

// ПЛОХО

fn frobnicate(walrus: Option<Walrus>) {

let walrus = match walrus {

Some(it) => it,

None => return,

};

...

}

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

Читать далее

NEAT. Основы

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

Сегодня изучим "теорию" NEAT, который появился в далёком 2004-м году, но при этом остается мейнстримом среди нейроэволюционных алгоритмов. Мы разберём классический вариант, так как это основа и все остальные варианты(CoDeepNEAT, HyperNEAT и т.д.) будут намного сложнее в имплементации, то есть шанс применить за разумное время обычному человеку стремится к нулю и понять их без изначального варианта представляется почти невозможным.

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

Читать далее

Задача с эмодзи

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

Сложность текста: 2-3/5

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

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

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

Естественно, настоящим математикам это надоело. В начале 2017 года на Reddit появился пост с заголовком «Меня утомила вся эта фейсбучная фруктовая математика. Хочет кто-нибудь придумать действительно сложную математическую задачу, чтобы побороться с этим явлением?».

Читать далее

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

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

Что вы скажете, если я расскажу вам, что знаю метод разложения чисел на множители, который не так сложен, как алгоритмы QS и GNFS, основывается не на магии, а на логике и простых арифметических принципах, легко реализуется, его легко распараллелить для ускорения вычислений, он не требует много памяти и при этом зачастую в разы эффективнее метода Ферма́? Заинтересовало?

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

Примеры, объяснения, таблицы — всё на месте. Даже если вы забыли, что такое \bmod, вы всё равно поймёте, как это работает.

Читать далее

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

Делаем ландшафт на основе реальных данных

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

Я долгое время занимаюсь построением 3D копий городов в проприетарном игровом движке на основе картографических данных. Суммарно это сложная задача, успех выполнения которой заключется в решении небольшого набора больших проблем. Одной из таких проблем является отрисовка точного ландшафта на основе реальных данных. Далее я постараюсь расказать обо всех R&D этапах и технических особенностях, с которыми пришлось столкнуться, а вконце будет несколько сравнений сгенерированного ландшафта с фотографиями реальных мест.

Читать далее

Проверка високосности года в трёх командах CPU

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

Показанным ниже кодом вы можете проверить на високосность год в интервале 0 ≤ y ≤ 102499 всего примерно тремя командами CPU:

bool is_leap_year_fast(uint32_t y) {

return ((y * 1073750999) & 3221352463) <= 126976;

}

Как это работает? Ответ на удивление сложен. В статье я объясню процесс; в основном он связан с забавным битовым жонглированием. В конце мы обсудим применение этого кода на практике.

Читать далее

Основные алгоритмы сортировки. Разбираемся с танцами (это не шутка)

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

Два распространенных алгоритма могут ускользать от понимания. В чем отличие разбиения в быстрой сортировке и похожих «магических» движений в сортировке слиянием? Меня это долго сбивало с толку. Разберемся же с ними наконец!
Читать дальше →

Математическое решение царской игры Ура

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

Мы потратили семь лет на эксперименты с ИИ для царской игры Ура, и, наконец, пришли к сильному решению по правилам Финкеля, Блица и Мастерса! В конечном итоге, для этого понадобилась пара красивых уравнений, которые я объясню в статье.

На самом деле, мы не «просто» нашли сильное решение игры. Для сильного решения необходимо находить наилучший ход из каждой позиции. Мы сделали это, плюс вычислили точную вероятность победы каждого игрока при оптимальной игре из каждой позиции. Для этого мы воспользовались нашей опенсорсной библиотекой RoyalUr-Java.

Ниже мы опишем, как это работает. Также мы написали технический отчёт.

Читать далее

Программный генератор случайных числовых последовательностей на RISC-V с использованием PUF в DRAM

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

Мы продолжаем рассказывать о проектах Зимней школы RISC-V, организованной YADRO. Возможно ли создать программный генератор на базе открытой архитектуры, используя физически неклонируемые функции (PUF) динамической памяти? Команда из БГУИР — Никита Малявко, Ксения Трубач, Михаил Кулик, Павел Шлык — в своем проекте проверила гипотезу о наличии PUF в динамической памяти и создала модель одноканального источника шума. Затем реализовала постобработку и тестирование, измерила производительность генератора и оптимизировала код.

Читать далее

Робот для пинг-понга: умнее, быстрее, точнее

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


Многие виды спорта являются либо командными, либо парными занятиями. Но не всегда у человека может быть кто-то, кто готов составить ему компанию в дружеском матче по пинг-понгу. В такой ситуации на помощь придет робот, разработанный учеными из Массачусетского технологического института (США). Из чего сделан пинг-понг робот, в чем его особенности, и насколько хорошим соперником он может быть? Ответы на эти вопросы мы найдем в докладе ученых.
Читать дальше →

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

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

Константин Шибков (на Хабре sendelust)  —  эксперт Skillbox и Java-разработчик, который искренне любит собеседования. Не только проходить их сам, но и обсуждать чужие. Он расспрашивает знакомых, какие им попались задачи, а потом разбирает их вместе с участниками своего алгоритмического клуба JavaKeyFrame. Ведёт телеграм-канал «Три монитора», где делится личным опытом. Мы поговорили с Константином о том, почему техническое интервью — это не пытка, а интеллектуальное удовольствие, как проводить собесы по-человечески, зачем нужны задачки «на подумать» и почему иногда лучше не отвечать сходу, а сначала задать встречный вопрос.

— Слушай, а что тебе вообще в этом нравится? Слушать про собесы, разбирать задачи, самому ходить. В чём кайф?

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

— А есть примеры самых необычных заданий, которые тебе или участникам клуба попадались? Что прям запомнилось?

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

А вот когда дают задачи сложные или вообще непонятные, зачем они нужны — это уже другое удивление. Такое, скорее, отрицательное. Типа: «Ну и зачем это всё было? Зачем я сюда пришёл? Какой в этом смысл?» Такое чувство пустой траты времени.

Читать далее