Pe scurt
O permutare folosește fiecare dintre cele valori distincte exact o dată, iar ordinea contează. Pentru există permutări: 123, 132, 213, 231, 312, 321. La generare, înainte de a pune o valoare pe poziția curentă verificăm că nu este deja folosită.
În detaliu
O permutare a unei mulțimi cu elemente distincte este un șir în care fiecare element apare exact o dată, deci ordinea contează. Numărul permutărilor este : pe prima poziție sunt alegeri, pe a doua și așa mai departe, până la o singură alegere pe ultima. Pentru sunt permutări, iar pentru sunt . Se generează prin backtracking cu un vector și un vector de marcaje folosit: la nivelul se încearcă fiecare valoare de la 1 la care nu este încă folosită, se marchează, se apelează nivelul următor, iar după revenire marcajul se anulează. Dacă valorile sunt încercate în ordine crescătoare, permutările apar în ordine lexicografică.
Exemplul 1 — permutările lui .
#include <iostream>
using namespace std;
int x[4];
bool folosit[4];
void gen(int k) {
if (k == 4) {
for (int i = 1; i <= 3; ++i) cout << x[i];
cout << " ";
return;
}
for (int c = 1; c <= 3; ++c)
if (!folosit[c]) {
folosit[c] = true;
x[k] = c;
gen(k + 1);
folosit[c] = false;
}
}
int main() {
gen(1);
return 0;
}
Programul afișează 123 132 213 231 312 321 . Apelul gen(1) începe cu 1, apoi gen(2) încearcă 2 și gen(3) pune 3: se afișează 123; la revenire, gen(2) încearcă 3 și gen(3) pune 2: se afișează 132. Apoi gen(1) încearcă 2, apoi 3. Marcajul se anulează la revenire, ca valoarea să poată fi folosită în alte ramuri.
Exemplul 2 — permutări cu o restricție. Se cer permutările lui în care valoarea 1 nu se află pe prima poziție. Condiția de continuare este k > 1 || c != 1, adică la nivelul 1 se respinge valoarea 1. Cele 24 de permutări se împart în 6 cu 1 pe prima poziție și 18 fără; programul cu restricție produce 18 soluții. Se obține tot astfel : din toate permutările se scad cele care încep cu 1 și au completări. Pentru și restricția „niciun element nu este pe poziția cu același număr” (permutări fără puncte fixe) există 2 soluții, 231 și 312.
Exemplul 3 — permutări circulare ale unui șir. Dacă se cere ca fiecare permutare să fie citită ca număr, permutările lui sunt numerele 123, 132, 213, 231, 312, 321, cu suma . Suma are o structură: fiecare cifră apare de două ori pe fiecare poziție, iar . Verificarea prin formulă confirmă rezultatul unui program.
Exemplul 4 — numărul de apeluri. Pentru , funcția gen se apelează de ori, iar pentru de 65 de ori. Cea mai mare parte a lucrului este în ultimele niveluri, de aceea numărul de permutări crește foarte repede: pentru sunt 3 628 800 de permutări, iar generarea tuturor devine impracticabilă pentru valori mai mari ale lui .
Exemplul 5 — elemente vecine. Câte permutări ale mulțimii au valorile 1 și 2 pe poziții alăturate? Cele două valori se tratează ca un bloc. Blocul și celelalte două valori formează trei obiecte, care se pot așeza în moduri, iar în interiorul blocului ordinea este 12 sau 21, deci în 2 moduri. Rezultă permutări, dintre care 1234, 2134 și 3412. Un program care generează toate cele 24 de permutări și numără doar pe cele cu valorile 1 și 2 vecine confirmă același număr.
Pentru admitere
La numărare, pe prima poziție sunt alegeri, pe următoarea și așa mai departe, deci permutări. Dacă enunțul include valori identice, nu aplica automat formula pentru rezultate distincte; trebuie tratate repetițiile. Când se cere numărul permutărilor cu o restricție, numără complementul, adică permutările care încalcă restricția, și scade din . Dacă o restricție fixează un element pe o poziție, restul de elemente se permută liber. În ordinea lexicografică, permutarea de rang se află numărând prefixurile: pentru , prima cifră este 1 pentru permutările de rang 1–2, 2 pentru rang 3–4 și 3 pentru rang 5–6; deci a cincea permutare este 312.
Exemplu în formatul examenului. Câte permutări ale mulțimii se obțin dacă se generează toate permutările cu condiția ca valoarea 1 să nu apară pe prima poziție?
- a) 6
- b) 12
- c) 18
- d) 24
Răspunsul corect este c). Din cele de permutări, cele care au 1 pe prima poziție sunt , pentru că celelalte trei valori se permută liber pe ultimele trei poziții. Rămân permutări. Altfel: pe prima poziție se poate pune oricare dintre valorile 2, 3, 4 (3 alegeri), iar pe celelalte trei poziții se permută cele 3 valori rămase, deci . Varianta d) ignoră restricția, iar varianta a) numără permutările excluse.
Greșeli frecvente
- Greșit: o permutare poate repeta o valoare.Corect: fiecare element al mulțimii apare exact o dată.
- Greșit: marcajul unei valori se păstrează după revenirea din apel.Corect: se anulează, altfel valoarea nu mai poate apărea în alte ramuri.
- Greșit: numărul permutărilor de elemente este .Corect: este .
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI intensiv; rocnee.eu
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI; plan de încadrare: OMEC 7723/2024, anexa 2, tabelele 1–25, legislatie.just.ro; filiera tehnologică: OMEC 7724/2024, anexa 4, tabelul calificării, legislatie.just.ro
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
Documente consultate
- UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE, p. 4–5; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 4–5; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
