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

Алгоритмы *

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

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

Алгоритмы манипуляций с битами

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

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

Читать далее

Я заставил новую модель Claude 3.7 Sonnet пройти собес по алгоритмам

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

Недавно в мире GenAI появились захватывающие новости: компания Anthropic представила новую языковую модель Claude 3.7 Sonnet. Эта модель объединяет в себе высокую скорость реакции и способности "глубокого" рассуждения (deep reasoning), что делает её одной из самых универсальных и продвинутых моделей на рынке коммерческих LLM. Благодаря инновационному подходу к гибридноcти, Claude 3.7 Sonnet способна как быстро отвечать на запросы, так и предоставлять подробное пошаговое обоснование своих выводов в зависимости от выбранного режима.

Читать далее

После прочтения сжечь. Или алгоритмы обработки данных вслепую (oblivious)

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

То есть:

Привет, Хабр! Я – Петр, эксперт по ML/AI (и не только) в Skillbox (и не только), а ещё – CEO межбанковской скоринговой платформы Bloomtech. Так уж вышло, что я неплохо разбираюсь в разных PET (Privacy-Enhancing Technologies) и уже писал на хабре про совместные конфиденциальные вычисления. Сегодня повышаю градус и рассказываю про магию следующего порядка: слепую (забывчивую) передачу или oblivious transfer. Как обычно, на примере.    

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

Читать далее

Почему QR-коды в верхнем регистре меньше, чем в нижнем?

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

Взгляните на эти два QR-кода. Отсканируйте их, если хотите: обещаю, в них нет ничего опасного.

Слева HTTPS://EDENT.TEL/ в верхнем регистре, а справа — https://edent.tel/ в нижнем.

Можно чётко заметить, что слева QR-код «меньше», то есть в нём меньше битов данных. Оба ведут на один и тот же URl, единственное различие заключается в регистре.

Что здесь происходит?

Читать далее

SQL HowTo: поиск пути и дихотомия (Advent of Code 2024, Day 18: RAM Run)

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

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

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

Сегодня напишем для решения простую реализацию алгоритма Ли и дихотомии.

Читать далее

Реализация метода принятия решений в экспертных группах

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

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

Принять решение

Инвентарь в Godot

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

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

Читать далее

Как мы ускоряли виртуальные фоны в Толке

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

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

Читать далее

Модель составного полупростого числа

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

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

В предлагаемой вниманию читателей модели роль исследуемого числа отводится модулю N КЧКВ, т.е. N задан (может быть большим) и требуется в одной из задач отыскивать делители N.

Для моделирования выбрана простая зависимость (линейная) N = х1 + хо. Очевидно, что список представлений такой модели конечен, и для чисел ограниченного размера может быть легко построен в форме таблицы, содержащей S =½ (N –1) строк. Модель названа списочной многострочной моделью и кратко обозначается (СММ, СМ-модель).

Читать далее

Решение головоломки Fillwords на Python

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

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

Играя в Fillwords, я заметил, что сложные уровни требуют всё больше времени. Это натолкнуло меня на идею создать программу-помощник на Python.

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

Читать далее

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

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

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

Читать далее

SQL HowTo: подбираем значение ветвлением (Advent of Code 2024, Day 17: Chronospatial Computer)

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

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

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

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

Читать далее

Введение в многокритериальную оптимизацию, или как потерять чуть меньше денег на крипте

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

"Лежит на струнах пыль
Ржавеет под окном
Разбитый телевизор
Ты сгладил все углы
И жизнь твоя сплошной
Проклятый компромисс
Ни вверх ни вниз"

Так поёт группа Би-2 в песне "Компромисс" и с ними трудно не согласиться. Наша жизнь действительно состоит из сплошных проклятых компромиссов между несколькими решениями. Мы пытаемся найти максимально дешёвую, но качественную электронику, ищем экономичный, но быстрый автомобиль и красивого, но надёжного партнёра для отношений.

Каждая из этих повседневных задач заключается в поиске оптимума нескольких конфликтующих между собой функций. Это называется многокритериальная оптимизация (Multi-objective optimization). В этой статье мы ближе познакомимся с этой задачей, посмотрим на 2 популярных метода её решения и узнаем, как с её помощью заработать на криптовалюте с минимальным риском.

Читать далее

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

Kotlin Coroutines под капотом: CoroutineContext и CoroutineScope

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

Structured Concurrency это одна из главных фишек Kotlin Coroutines, позволяющая оперировать иерархиями корутин через единый интерфейс, благодаря такой организации можно легко отменить сразу все корутины, имея ссылку только на самый высокоуровневый объект. В этой статье я разберу две базовые штуки на основе которых строится Structured Concurrency - CoroutineContext и CoroutineScope. Поехали!

Читать далее

B-Tree — сбалансированный куст поиска

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

В реляционных СУБД есть дефолтный тип индекса — B‑Tree: Tree в названии однозначно указывает на дерево, ну а В это, наверно, Binary? Или Balanced? Или Balanced Binary? Почему‑то долгое время я полагал, что это Balanced Binary, и эта версия даже «работала». На деле всё куда интереснее, предлагаю проследовать под кат, чтобы посмотреть на этот на самом деле скорее низкорослый куст и сравнить его с Red‑Black Tree на Java.

Точно куст?

Как уместить поиск по 30 тысячам слов в 64 КБ ОЗУ

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

Как уместить словарь размером 250 КБ в 64 КБ ОЗУ с возможностью выполнения быстрого поиска? Для справки: даже современные методики сжатия наподобие gzip -9 не могут сжать этот файл до размера меньше 85 КБ.

В 1970-х Дуглас Макилрой столкнулся с этой непростой задачей при реализации проверки правописания для Unix в AT&T. Из-за ограничений компьютера PDP-11 весь словарь должен был умещаться всего в 64 КБ ОЗУ. Кажется, подобную задачу решить невозможно.

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

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

Читать далее

Судоку: моя попытка в новый алгоритм решения. Часть 2. Заполнение латинского квадрата

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

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

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

Читать далее

Фильтр Гаусса на стероидах: подход на точность вычислений

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

Hello, world! Это вторая часть хабростатьи Smart Engines про быструю фильтрацию изображений. Да-да, создавая топовый продукт по распознаванию документов, нам приходится разбираться в методах обработки изображений на экспертном уровне (иначе не получилось бы распознать изображение паспорта за 150 мс на мобильном телефон). В предыдущей части мы начали обсуждать быстрые аппроксимации гауссовского фильтра, которым была посвящена наша недавняя публикация в научном журнале MDPI Applied Sciences [1]. О том, как работает оригинальный фильтр Гаусса, мы уже писали, сейчас мы только напомним о его использовании всюду, где возникает обработка изображений: от редактирования фотографий на смартфоне – для размытия фона за объектом в режиме "портрет", до анализа рентгеновских снимков – чтобы убрать шум и улучшить читаемость изображения.

Читать далее

Калькулятор? Да его напишет кто угодно

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

[Прим. пер.: на Хабре уже был перевод этой статьи, но незавершённый примерно на четверть.]

Неправда.

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

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

На изображении выше показан калькулятор из iOS.

Заметили что-нибудь?

Он посчитал неправильно.

(10100) + 1 − (10100) равно 1, а не 0.

Android считает правильно. А причина, по которой он это делает, абсолютно безумна.

Читать далее

Компилятор за выходные: синтаксический анализатор Уорли

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

Изначально, когда я решил написать компилятор за выходные, я решил, что нет смысла заморачиваться, и использовал сторонний лексический / синтаксический анализатор. Мой выбор пал на SLY, довольно известную библиотеку. И действительно, пара часов работы, и мой компилятор прекрасно строил синтаксические деревья из исходного кода на wend. Я пытался было заглянуть под капот, утонул в море технических терминов (LL(1), LR, LALR(1) и тому подобное), и решил, что парсинг своими руками - это не для меня, теория формальных языков меня слабо интересует. Однако же в итоге выяснилось, что базовый синтаксический анализатор - это не так сложно, и я закатал рукава.

Читать далее

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