0Pricing
Coding Interview Prep · Lekcja

Enumerowanie podzbiorów za pomocą masek bitowych

Iterowanie po wszystkich podzbiorach za pomocą liczb całkowitych

Enumerowanie podzbiorów za pomocą masek bitowych to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Podzbiory jako liczby

Każdy podzbiór n elementów można odwzorować na jedną liczbę całkowitą. Wystarczy odliczać od zera, a bity każdej liczby wskażą dokładnie, które elementy należą do podzbioru. 🙂

Ile istnieje podzbiorów

Zbiór n elementów ma 2^n podzbiorów. Zatem iterowanie po liczbach całkowitych od 0 do 2^n minus 1 odwiedza każdy podzbiór dokładnie raz.

for mask in range(1 << n):
    pass  # mask is one subset

1 << n to liczba

Przesunięcie 1 << n jest równe 2 do potęgi n. To przejrzysty i szybki sposób zapisania górnej granicy pętli po podzbiorach.

Odczytywanie bitu i

Aby sprawdzić, czy element i należy do podzbioru, należy przetestować jego bit za pomocą maski i 1 przesuniętej w lewo o i. Wynik różny od zera oznacza, że element należy do podzbioru.

if mask & (1 << i):
    take(items[i])

Tworzenie listy wybranych elementów

Przejdź po każdej pozycji bitowej i zbierz elementy, których bit jest ustawiony. W ten sposób jedna maska zostaje zamieniona na konkretny podzbiór, który reprezentuje.

chosen = [items[i] for i in range(n) if mask & (1 << i)]

Puste i pełne zbiory

Maska 0 oznacza pusty podzbiór, a maska z samymi jedynkami oznacza pełny zbiór. Oba przypadki są uwzględniane automatycznie, ponieważ pętla obejmuje każdą wartość.

Sumowanie podzbioru

Wewnątrz pętli zsumuj wybrane elementy, aby obliczyć wynik dla każdego podzbioru. To podstawa wielu niewielkich rozwiązań typu brute force.

total = sum(v[i] for i in range(n) if mask & (1 << i))

Zliczanie ustawionych bitów

Liczba wybranych elementów jest równa wartości popcount maski. W Pythonie wyrażenie bin(mask).count('1') zwraca ją natychmiast.

size = bin(mask).count("1")

Uważaj na ograniczenie

Ponieważ istnieje 2^n podzbiorów, ta technika nadaje się tylko dla małych wartości n. W praktyce pełne wyliczanie staje się graniczne przy n równym około 20.

Dlaczego maski bitowe wygrywają

Jedna pętla po liczbach całkowitych zastępuje zawiłe pętle zagnieżdżone, a operacje bitowe są szybkie. Kod pozostaje krótki, przejrzysty i łatwy do przetestowania.

Uniwersalny schemat

Przechodź po maskach, odczytuj ich bity, obliczaj wynik podzbioru i zapamiętuj najlepszy rezultat. Warto zapamiętać ten szablon, ponieważ wiele problemów dotyczących podzbiorów stanie się rutynowych.

Szybkie sprawdzenie

Należy sprawdzić, czy element i należy do podzbioru zakodowanego w masce.

Podsumowanie

Przechodź po maskach od 0 do 2^n minus 1, odczytuj bity za pomocą maski i 1 przesuniętej w lewo, a następnie obliczaj wynik każdego podzbioru. To przejrzysta metoda brute force dla małych wartości n. 🚀

Często zadawane pytania

Czy lekcja „Enumerowanie podzbiorów za pomocą masek bitowych” jest bezpłatna?

Tak — pełny tekst „Enumerowanie podzbiorów za pomocą masek bitowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Enumerowanie podzbiorów za pomocą masek bitowych”?

Iterowanie po wszystkich podzbiorach za pomocą liczb całkowitych Ćwiczysz Coding Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Enumerowanie podzbiorów za pomocą masek bitowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Coding Interview Prep?

Tak. Każda lekcja Coding Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Bruteforce to prawidłowa strategia
  2. Enumerowanie za pomocą itertools
  3. Enumerowanie podzbiorów za pomocą masek bitowych
  4. Sprytne zawężanie przestrzeni wyszukiwania
← Powrót do Coding Interview Prep