Vectorul caracteristic
O submulțime a mulțimii {1..n} = un șir de n biți: bitul i spune dacă elementul i APARE (1) sau NU (0).
Pentru n = 3, cele submulțimi, în ordinea numărării binare:
| biți | submulțimea |
|---|---|
| 000 | ∅ |
| 001 | {3} |
| 010 | {2} |
| 011 | {2,3} |
| 100 | {1} |
| 101 | {1,3} |
| 110 | {1,2} |
| 111 | {1,2,3} |
Formulele de numărare (setul complet de grile)
- submulțimi ale unei mulțimi cu n elemente: (cu tot cu ∅);
- submulțimi NEVIDE: ;
- submulțimi cu EXACT k elemente: ;
- cuvinte de lungime k din n simboluri (cu repetiție): ;
- permutări: ; aranjamente: .
Exemplu. Câte submulțimi cu cel puțin 2 elemente are {1,2,3,4}? .
"A câta soluție este...?" (tiparul de subiect)
Generarea pe vector caracteristic urmează NUMĂRAREA BINARĂ: submulțimea {1,3} pentru n=3 are biții 101 = 5 în binar → e a 6-a generată (numărând de la ∅ = prima). Invers: a 7-a soluție are indicele 6 = 110 → {1,2}.
Backtracking pe subprograme (recunoaștere)
Schema generică: la pasul k alegi o valoare validă, avansezi; când nu mai există valori, REVII la pasul k-1. Grilele cer de obicei doar: numărul de soluții, a k-a soluție, sau soluția anterioară/următoare uneia date: toate rezolvabile cu ordinea lexicografică, fără a "rula" programul.
Exemplu. Permutările lui {1,2,3} în ordine: 123, 132, 213, 231, 312, 321. Anterioara lui 312? → 231 ✓.
Reține
Submulțimi = numărare binară pe vector caracteristic; 2^n totale. La "a k-a soluție", scrie k-1 în binar pe n biți. Permutările merg lexicografic, ca în dicționar.
Greșeli frecvente
- ∅ se numără printre submulțimi: totalul e 2^n, nu 2^n - 1.
- Corespondența soluție ↔ index: a k-a soluție are reprezentarea k-1 (numărarea începe de la 0).
- La permutări, următoarea lexicografică nu e "rotire": compară poziție cu poziție.