Documente Academic
Documente Profesional
Documente Cultură
Întrebare Răspuns
1. Care sunt datele de intrare si care este formatul n- numărul de elemente din mulțime
lor(cum le memorez)? vector a cu n elemente numere întregi
n=3
indice 1 2 3
a[i] 40 70 30
ordonate 30 40 70
2. Care sunt datele de ieșire si care este formatul Elementele mulțimii date, permutate
lor(cum le memorez)? Memorez in vectorul soluție din BKT doar indicii
elementelor mulțimii date
Permutări din indici => afișez elementele
mulțimii inițiale pe baza indicilor din soluție
Daca o soluție av avea forma :
2 3 1 => pe ecran : 40 70 30
3. Trebuie ordonate crescător/descrescător? DA - crescător
4. Care sunt mulțimile de valori posibile pentru Știm ca fiecare element din soluție notat s[k]
fiecare el. din soluție: reprezintă un indice a unui element din mulțimea
A1={vi1…vf1} data:
A2={vi2…vf2} s[1] ∈A1= {1,2,..,n}
…. s[2] ∈A2= {1,2,..,n}
Ak={vik…vfk} ....
s[k] ∈Ak= {1,2,..,n}
In funcția BKT valoarea inițială in
instrucțiunea for va fi 1, iar valoarea finala va
fi n
for(int i=1; i<=n; i++)...
5. Care sunt condițiile interne/condițiile de
continuare?
- In cuvinte Elementele s[1],...s[k-1],s[k] trebuie sa fie distincte
Nu am voie sa utilizez într-o soluție un indice
de doua ori, pentru ca as folosi elementul
respectiv de doua ori într-o soluție(greșit)
- In pseudocod/C++ Varianta a:
int verifica(int k)
{
for(int i=1; i<=k-1;i++)
if(s[i]==s[k])
return 0;
return 1;
}
Varianta b(folosind vectori de frecventa)
int fr[100]={0}; /// vector caracteristic cu
semnificatia ca
o fr[i]=0 daca pozitia i nu apar in
solutie
o fr[i]=1 atunci cand pozitia i este
folosita in solutie
void BKT(int k)
{ for(int i=1;i<=n; i++)
{ if (fr[i]==0)
/// verific daca poz i este utilizata
{ s[k]=i;
fr[i]=1;
///o marchez utilizata pozitia i
if(k==n)
afisare_solutie(k);
else
BKT(k+1);
fr[i]=0;
///eliberare pozitia i
}
}
6. Care este condiția ca sa obțin o soluție? Toate elementele mulțimii date sunt in
soluție:
k==n
sau functia soutie:
int solutie(int k)
{return k==n;}
void afisare_solutie(int k)
{ for(int i=1;i<=k;i++)
cout<< A[s[i]]<<” ”;
cout<<endl;
}