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

Алгоритмы *

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

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

Генерация 2D мира с помощью клеточного автомата на Python

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

Всем привет! На написание этой статьи меня вдохновил автор YouTube канала PeaAshMeter. В своем видео автор показывает простейший генератор 2D мира, который основан на простейшем правиле клеточного автомата. Что такое клеточный автомат? Какие клеточные автоматы бывают? На эти и многие другие вопросы я попробую ответить.

Читать далее

Генерируем рецепты блюд на JS и цепях Маркова

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


Когда-то меня очень радовал один паблик в соцсети ВК. По заявлениям администрации нейросеть генерировала рецепты, которые и составляли 99% контента. Вероятно, действительно это была простенькая нейросеть вроде RNN или LSTM. К сожалению, последний пост в паблике датирован 2019 годом, а моя тяга к изысканным блюдам не угасла, поэтому было решено сделать генератор рецептов на JS и цепях Маркова. Почему не повторить эксперимент с более продвинутой доступной нейросетью вроде GPT-2? Потому что для ее обучения требуется достаточно много времени, ресурсов и данных.

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

Пишем игру от первого лица в 2КБ на Rust

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

Введение


Поначалу кажется, что создать игру от первого лица без движка или графического API практические невозможно. В этом посте я расскажу, как это сделать при помощи алгоритма под названием ray casting.

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

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

Пятничные клеточные автоматы: 10 удивительных правил с нотацией Хенселя

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

Продолжим знакомиться с вариациями клеточных автоматов. Ранее мы рассмотрели базовую «life-like» конфигурацию и добавили к ней поколения.

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

?

GAN: убийство двух зайцев одним выстрелом для синтеза табличных данных

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

Аннотация

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

Читать далее

Разбираем лучшие решения задач с VK Cup

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

В начале февраля мы наградили победителей нашего IT‑чемпионата VK Cup. До финала дошли 80 человек, а общий призовой фонд в 4 млн рублей разделили 20 победителей — по четыре команды на каждый трек чемпионата. На Хабре мы решили сделать серию статей с разбором наиболее интересных решений по разным трекам.

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

Во всём этом разобрался Иван Брагин, один из победителей чемпионата.

Читать далее

Семейство алгоритмов Ascon — новый стандарт легковесной криптографии

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

Режим работы шифра Ascon, см. список условных обозначений на схеме

В феврале 2023 года Национальный институт стандартов и технологий (NIST) выбрал стандарт легковесной криптографии для RFID, датчиков, Интернета вещей и других устройств с ограниченными аппаратными ресурсами. Победителем конкурса стало семейство шифров Ascon (файл zip, спецификации, changelog).
Читать дальше →

Понимаем обычное дерево отрезков

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

Всем привет! Изучив несколько статей по этой теме, у меня остались вопросы, и некоторые моменты по-прежнему были не понятны, поэтому я решил написать свою, которая, как мне кажется, была бы понятна тем, кто не силен в спортивном программировании. В ней я объясняю, как устроено дерево отрезков. Примеры с кодом будут приведены на языке C++, однако на объяснение это не влияет.

Читать далее

Smart Tomo Engine 2.0. Выход на новый уровень

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

В сегодняшней статье речь пойдет о Smart Tomo Engine 2.0  – новой версии нашего продукта реконструкции трехмерных объектов из набора их томографических проекций (рентгенограмм). По сравнению с предыдущей версией у новой выше качество получаемых изображений, существенно повышено быстродействие, улучшена технологическая совместимость с программами анализа трехмерных данных и с различными видами томографов. Заходите под кат, чтобы увидеть работу новой версии STE на примере реконструкции цветов (в честь Международного женского дня).

Читать далее

Неожиданная эффективность условных вероятностей

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

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

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

В этой одежде системы распознавания будут считать вас животным

Время на прочтение4 мин
Количество просмотров45K
У Рэйчел Дидеро интересный набор навыков: несколько степеней в области дизайна одежды (полученные в школах трех разных стран) и докторская степень в области машинного обучения Миланского политехнического университета.

Эти знания позволили ей выпустить коллекцию — довольно уродливой — одежды Manifesto. Она страшная и безвкусная, зато в ней вы становитесь нераспознаваемые для ML-алгоритма детектирования Yolo, активно используемого для работы с уличными камерами.



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

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

Как выиграть ВСОШ по информатике и больше не волноваться о ЕГЭ?

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

Привет, меня зовут Сергей Вольнов и я сейчас учусь на первом курсе в НИУ ВШЭ на программе прикладной математики и информатики. Если поступать туда по ЕГЭ, то проходной в этом году был 304 балла по трем предметам, но выиграв олимпиады туда можно без вступительных испытаний.

В 10 и 11 классе я стал призером заключительного этапа Всероссийской Олимпиады Школьников по Информатике (ВСОШ) и даже стал медалистом на международной Жаутыковской олимпиаде по Computer Science. Призерство ВСОШ дало мне возможность поступить в любой ВУЗ на информатическое направление по БВИ и я выбрал ВШЭ.

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

Читать далее

О вреде GOTO-фобии (с примерами на C)

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

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

Читать далее

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

Истинная сложность алгоритма Bubble Sort

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

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

Узнать

Алгоритмы быстрого умножения чисел: от столбика до Шенхаге-Штрассена

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

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

И уж конечно, никогда при написании a * b мы не задумываемся о том, как реализовано умножение чисел a и b в нашем языке. Какие вообще есть алгоритмы умножения? Это какая-то нетривиальная задача?

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

Скорее к формулам!

Как «яжепрограммист» построил всю свою родню

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

Всем привет. Разумеется, это шутка — я своих родственников очень люблю, уважаю и никоим образом их не притеснял и не планирую. Более точная формулировка — отсортировал в целях построения генеалогического древа. Об алгоритме построения, сортировки, визуализации фамильного древа и будет эта статья.
Читать дальше →

И самые лучшие книги они в рюкзаках хранят…

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

В этом топике продолжим тему решения криптографических загадок с MysteryTwister. Ранее уже были опубликованы статьи навеянные задачами с этого ресурса («Угнать SIGABA за 24 часа», часть 1, часть 2). На этот раз возьмём задачу, основанную на классической «задаче о рюкзаке». Автор задачи Peter Uelkes. По этому вопросу на Хабре много статей (уместные я размещу внизу топика), но сегодня мы разберём конкретную задачу дешифровки.

Читать далее

10 зрелищных клеточных автоматов с поколениями

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

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

Сегодня мы немного дополним характеристики «life‑like» модели и добавим ещё одну часть к правилам — поколения.

?

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

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

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

Никакого условного псевдокода, все примеры сопровождаются исходным кодом на языке Си подробными объяснениями.
Читать дальше →

Навеяно проблемой четырёх красок

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

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

Для непосвящённых… Проблема четырёх красок формулируется очень просто: «Для раскраски любой карты на плоскости достаточно четырёх красок».

При этом, если области (страны) «касаются» только в одной точке, то считается, что они не граничат и их можно раскрасить в один и тот же цвет. Так, например, для раскраски клеток шахматной доски достаточно двух цветов.

Более того, Мартин Гарднер в книге «Математические головоломки и развлечения» упоминает, что доказана теорема «о двухцветных картах», которая утверждает, что «любую карту на плоскости можно раскрасить в два цвета тогда и только тогда, когда все её вершины чётны» (здесь, «вершиной» называется точка, в которой сходятся границы более двух стран).

* * *

Создал очень НЕинтересную игру, навеянную этой Проблемой.

Читать далее

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