Обновить
275.59

Алгоритмы *

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

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

Киберэкономика. Пределы роста

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

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

Читать далее

SQL HowTo: поиск «в ширину» внутри цикла (Advent of Code 2024, Day 10: Hoof It)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

В этой части снова сталкиваемся с вложенным в цикл рекурсивным поиском "в ширину".

Читать далее

SQL HowTo: оптимизируем рекурсию (Advent of Code 2024, Day 9: Disk Fragmenter)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

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

Читать далее

Учёные нашли оптимальный способ обхода графа

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

Алгоритм Дейкстры долгое время считался самым эффективным способом обхода графа. Теперь исследователи доказали, что он «универсально оптимален». 

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

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

Читать далее

SQL HowTo: генерация и подсчет уникальных комбинаций (Advent of Code 2024, Day 8: Resonant Collinearity)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

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

Читать далее

Математический взлом скретч-лотереи

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

Скретч-лотереяTic Tac Toe («крестики‑нолики»), выпущенная компанией Ontario Lottery в 2003 году обладала интересными правилами: в правой части билета находится игровое поле с числами, в левой — «ваши счастливые числа», скрытые защитным слоем. Игроку предстоит стереть защитный слой и посмотреть, на каких позициях на игровом поле расположены его счастливые числа. Если три счастливых числа образуют линию, то игрок получает соответствующий выигрыш (для каждой линии — свой).

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

Читать далее

Kotlin Coroutines под капотом: отмена корутин

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

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

Читать далее

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 01 — Маленькая программа

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

Приветствую, Хабравчане!

Решил сделать цикл статей по написанию на С++, различных небольших программ. Под новые и старые ОС. Мне кажется мы стали забывать как раньше программировали:) Для себя определил несколько важных критериев.

Loading, please wait

Сердце роя: алгоритм навигации роя киборгов-насекомых

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


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

Сортировки Либеральная, по Бакунину и некоторые другие

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

В ходе обсуждения с товарищем docent2007 статьи о сортировке «Милосердный Сталин» у нас сами собой родились дополнительные, весьма полезные методы сортировки. Эти методы определённо могут пригодиться каждому.



Либеральная сортировка


Либеральная сортировка уважает каждое значение и его "право" на место.


def liberal_sort(arr):
    # Каждый элемент остается на своём месте, потому что все равны
    return arr

То есть массив возвращается таким, какой он есть, без изменений, поскольку "у каждого элемента своё уникальное место, которое нельзя нарушить".


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


from collections import defaultdict

def liberal_sort_with_groups(arr, key_func=lambda x: x):
    # Группируем элементы по ключу, но внутри групп порядок сохраняется
    groups = defaultdict(list)
    for item in arr:
        groups[key_func(item)].append(item)

    result = []
    for group in groups.values():
        result.extend(group)
    return result

arr = [5, 3, 8, 3, 1, 8, 5]
sorted_arr = liberal_sort_with_groups(arr, key_func=lambda x: x % 2)
print(sorted_arr)
# нечетные и затем четные, но порядок в группах сохранен
# -> [5, 3, 3, 1, 5, 8, 8]
Читать дальше →

256 байт веселья, или как развлечь себя Ассемблером когда скучно

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

Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Читать далее

Как добавить надпись на картинку

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

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

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

Читать далее

Сортировка «Милосердный Сталин»

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

Merciful Stalin Sort (сортировка «Милосердный Сталин») — это новый алгоритм сортировки, вдохновлённый пресловутым Stalin Sort (сталинской сортировкой). В ходе развлекательного эксперимента со сталинской сортировкой возникла интригующая идея: что, если вместо удаления выбивающихся элементов, сохранить те, которые идут по порядку, и рекурсивно упорядочить остальные? Логика заключалась в том, чтобы добиться повышения производительности за счёт уменьшения массива, требующего сортировки, особенно в случае частично упорядоченных массивов. Это и привело к разработке сортировки «Милосердный Сталин».
Читать дальше →

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

Фундаментальная математика — теория всего в IT и не только. Теория типов и формализация в Coq

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

У нас есть 3 "теории всего" - научная картина мира (все сводится к законам физики), информатика (все сводится к битам) и фундамент математики (все сводится к логике). Именно фундамент математики представляет особый интерес, так как он является фундаментом для двух других фундаментов и имеет глубокий философский смысл. Последние 2 года я сильно им увлекся и проделал довольно большую работу по углубленному изучению теории типов (Calculus of Constructions), и готов поделиться результатами, а также рассказать о девяти направлениях, где можно применить это на практике. Очень многое получилось лучше, чем я планировал. Изначально перспективы были не очень понятными, и поэтому я не рассказывал друзьям и коллегам про мою работу в этом направлении и называл это «Секретный Проект». Но теперь, когда многое прояснилось и получилось, можно поделиться успехом. Собственно, в этой статье я расскажу вам не только про сам фундамент математики, а еще его связь с ежедневной работой программиста, а также с Computer Science/Data Science и AI/ML. Я вам нарисую большую и красивую картину, на которой все понятно и логически следует из маленького набора правил выведений типов (11 штук) и аксиом теории множеств (9 штук).

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

Читать далее

Реализация шифра «Кузнечик» на языке RUST

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

Привет Сегодня мы рассмотрим, заключительный в цикле материалов, Российский шифр «Кузнечик».

«Кузнечик» — это современный стандарт шифрования в России и за рубежом. Опубликован был в 19 июня 2015 года. В наступающем 2025 году будем отмечать его юбилей.

Читать далее

Как линейная алгебра помогла мне в разработке интерактивного редактора диаграмм

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

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

Читать далее

Готовимся к Micromouse: как роботу найти короткий путь к цели

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

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

Читать далее

SQL HowTo: поиск в словаре и массивах, сортировка «пузырьком» (Advent of Code 2024, Day 5: Print Queue)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

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

Читать далее

Сравнение алгоритмов градиентного бустинга или история знает только первых…

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

Всем привет ! Данная статья написана по итогам обучения на курсе Otus ML Basic и в ней я проведу сравнение алгоритмов градиентного бустинга. Почему бустинг, спросите вы ? Понятно, что нейронные сети интереснее, но не всегда их применение целесообразно и есть задачи для которых классические методы машинного обучения являются лучшим выбором. Бустинг является одним из наиболее эффективных классических алгоритмов и поскольку существуют различные его реализации, то мы проведем сравнение, чтобы понять, кто из них демонстрирует лучшие результаты.

Читать далее

JavaScript: структуры данных и алгоритмы. Часть 7

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


Привет, друзья!


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


Сегодня мы поговорим об алгоритмах для работы со строками и поиска.


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


Интересно? Тогда прошу под кат.

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

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