Все темы
122

Пусть биты одного числа станут множеством

Tier 1Закрыто

Где применяется

1. Задача

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

Дан список из n элементов, и нужны все его подмножества. Подмножество задаётся тем, какие элементы внутри, а какие снаружи. Для ["a", "b"] их четыре: [], ["a"], ["b"], ["a", "b"].

Подмножеств ровно 2n: для каждого элемента отдельно решаешь, внутри он или снаружи, и эти решения не зависят друг от друга. Обойти все 2n вариантов проще всего так. Считай обычное целое число от 0 до 2n - 1, а биты каждого числа читай как ответы на вопросы «элемент i внутри?».

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

На LeetCode

Задачи, где предметов не больше примерно 20 и нужно перебрать все подмножества. Считай маску от 0 до 2^n минус 1, и бит i говорит, взят ли предмет i.

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