Mediumbit
Что такое bitmask и операции с битами?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Bitmask — представление множества через биты integer: каждый бит — наличие/отсутствие элемента.
mask | (1 << i) # set бит i (добавить элемент)
mask & ~(1 << i) # clear бит i (убрать)
mask ^ (1 << i) # toggle бит i
(mask >> i) & 1 # check бит i
a | b # union
a & b # intersection
(a & b) == a # a — subset of b
# Итерация всех subsets множества mask
sub = mask
while True:
process(sub)
if sub == 0:
break
sub = (sub - 1) & maskBit tricks: x & (x-1) обнуляет младший бит (Brian Kernighan для popcount), x & -x — младший set бит. Применения: Subsets (78, iterate masks 0..2ⁿ-1), Travelling Salesman Held-Karp (DP[mask][v]), status flags. Для n ≤ 64 — long long, для больших — bitset (C++) / Python int (arbitrary precision).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.