Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Vectori . Aplicatii alg de sortare
- 1. Select Sort
- 2. Bubble Sort
- 3. Insert Sort
- 4. Heap Sort
- ------------------------------------
- Aplicatii
- 1. Generarii permutarilor unei multimi cu n elemente
- 2. Generarea vectorilor booleni cu n componente
- exemplu : n=3
- 0 0 0
- 0 0 1
- 0 1 0
- 0 1 1
- 1 0 0
- 1 0 1
- 1 1 0
- 1 1 1
- Procedeu
- la pasul initial se porneste cu prima solutie vectorul nul
- aplicam o strategie de tip greedy
- ( lacom = avansez "lacom" = irevocabil in drum generarii tuturo solutiilor )
- din solutie anterior generata dorim sa obtinem o noua solutie
- Astfel
- parcurgem solutia anterioara de la ultimul catre primul element
- in timpul acestei parcurgeri putem intalni una din situatiile :
- [a] V[i]=0 atunci executa
- - V[i]=1
- - stop
- sfarsit
- [b] V[i]=1 atunci executa
- - V[i]=0
- - avansez
- sfarsit
- [solutie 1]
- 0 0 0
- [solutie 2]
- 0 0 1
- [solutie 3]
- 0 1 0
- [solutie 4]
- 0 1 1
- [solutie 5]
- 1 0 0
- [solutie 6]
- 1 0 1
- [solutie 7]
- 1 1 0
- [solutie 8]
- 1 1 1
- Obs : Pentru problema enuntata exista rezultat matematic care afirma
- ca sunt 2^n solutii !
- Abordare 1 :
- pentru i de la 1 pana la 2^n executa
- -----
- sfarsit
- functioneaza neeficient datorita 2^n
- Abordare 2 :
- procedeul de parcurgere de la coada la cap cu aplicarea regulilor
- [a] si [b] continua pana cand numarul celor schimbate este n
- Adica in timpul executiei unei parcurgeri NUMAR numarul
- schimbarilor din 1 in 0 . Daca acest numar este n opresc generarile !
- PSEUDOCOD :
- - citeste n
- - executa
- - counter = 0
- - pentru i=1 pana la n afiseaza V[i]
- - pentru i=n pana la 1 executa
- - daca V[i]=0 atunci executa
- - V[i]=1
- - i=0
- sfarsit
- altfel executa
- - V[i]=0
- - counter=counter+1
- sfarsit
- pana cand counter=n
- #include <iostream>
- using namespace std;
- int n,i;
- int counter = 0;
- int v[100];
- int main()
- {
- cout<<"n=";cin>>n;
- do
- {
- for(i=1;i<=n;i++)
- {
- cout<<v[i];
- }
- cout<<endl;
- for(i=n;i>=1;i--)
- {
- if(v[i]==0)
- {
- v[i] = 1;
- break;
- }
- else
- {
- v[i] = 0;
- }
- }
- counter = counter + 1;
- }
- while(counter < n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement