Proiect Informatica

22
Proiect Informatica

description

Proiect Informatica. Metoda “Divide et impera ”. - PowerPoint PPT Presentation

Transcript of Proiect Informatica

Page 1: Proiect Informatica

Proiect Informatica

Page 2: Proiect Informatica

Metoda “Divide et impera”Divide et impera se bazează pe principiul descompunerii problemei în două sau mai multe subprobleme (mai ușoare), care se rezolvă, iar soluția pentru problema inițială se obține combinând soluțiile subproblemelor. De multe ori, subproblemele sunt de același tip și pentru fiecare din ele se poate aplica aceeași tactică a descompunerii în (alte) subprobleme, până când (în urma descompunerilor repetate) se ajunge la probleme care admit rezolvare imediată.

Page 3: Proiect Informatica

Determinarea sumei elementelor unui vector

Page 4: Proiect Informatica

#include<iostream>using namespace std;int suma(int a[100], int s, int d){ if(s==d) return a[s]; else return suma(a,s,(s+d)/2)+suma(a,(s+d)/2+1,d);}int main(){ int a[100],n,i; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; cout<<suma(a,1,n); return 0;}

Page 5: Proiect Informatica

Determinarea elementului maxim”

Page 6: Proiect Informatica

#include <iostream> using namespace std; int v[10],n; int max(int i, int j) { int a, b, m; if (i==j) return v[i]; else {m = (i+j)/2; a = max(i, m); b = max(m+1, j); if (a>b) return a; else return b; } } int main( ) { cout<<"n=";cin>>n; for (int i=1; i<=n; i++) {cout<<"v["<<i<<"]="; cin>>v[i]; } cout<<"max="<<max(1,n); return 0; }

Page 7: Proiect Informatica

Determinarea cmmdc-ului:

Page 8: Proiect Informatica

include<iostream>int cmmdc(int a[20], int li, int ls){ if(li==ls) return a[li]; else { int x,y; x=cmmdc(a,li,(li+ls)/2); y=cmmdc(a,(li+ls)/2+1,ls); while(x!=y) if(x>y) x=x-y; else y=y-x; return x; }}int main(){int a[20],n,i;cout<<"n=";cin>>n;for(i=1;i<=n;i++) cin>>a[i];cout<<"cmmdc este: "<<cmmdc(a,1,n);}

Page 9: Proiect Informatica

Informeaza-te:

Turnul din Hanoi sau Turnurile din Hanoi este un joc matematic. Este format din trei tije şi un număr variabil de discuri, de diferite mărimi, care pot fi poziţionate pe oricare din cele 3 tije. Jocul începe având discurile aşezate în stivă pe prima tijă, în ordinea mărimii lor, astfel încât să formeze un turn.Folosind metoda Divide et Impera problema va fi descompusă in subprobleme astfel:

PAS1: Se mută primele n-1 discuri de pe tija sursă pe tija de manevră. PAS2: Se mută discul cu diametrul cel mai mare de pe tija sursă pe tija de destinaţie. PAS3: Se mută cele n-1 discuri de pe tija de manevră pe tija de destinaţie.

Page 10: Proiect Informatica

Problema turnurilor din Hanoi:

Page 11: Proiect Informatica

#include<iostream>using namespace std;void hanoi(int n,char a,char b,char c){if(n==1) cout<<"(" <<a<<","<<b<<") ";else{hanoi(n-1,a,c,b ); cout<<"("<<a<<","<<b<<" ) "; hanoi(n-1,c,b,a);}}int main(){int n;char a='a',b='b',c='c';cin>>n;hanoi(n,a,b,c);return 0;}

Page 12: Proiect Informatica

Informeaza-te:

Algoritmul de căutare binară este un algoritm de căutare folosit pentru a găsi un element într-o listă ordonată (tablou unidimensional/vector). Algoritmul funcționează pe baza tehnicii divide et impera. Valoarea căutată este comparată cu cea a elementului din mijlocul listei. Dacă e egală cu cea a acelui element, algoritmul se termină. Dacă e mai mare decât acea valoare, algoritmul se reia, de la mijlocul listei până la sfârșit, iar dacă e mai mică, algoritmul se reia pentru elementele de la începutul listei până la mijloc. Întrucât la fiecare pas cardinalul mulțimii de elemente în care se efectuează căutarea se înjumătățește, algoritmul are complexitate logaritmică.

Page 13: Proiect Informatica

Cautare binara:

Page 14: Proiect Informatica

int main( )

{cout<<"n="; cin>>n;

for (int i=1; i<=n; i++)

{cout<<"v["<<i<<"]="; cin>>v[i];}

cout<<"nr="; cin>>nr;

caut (1,n);

return 0;

}

#include<iostream>using namespace std;int v[100], n, nr;void caut(int p, int u){int m = (p+u)/2;if (nr==v[m])cout<<"gasit, indice="<<m;elseif (p<u)if (nr<v[m])caut(p, m-1);elsecaut(m+1, u);elsecout<<"nu a fost gasit.";}

Page 15: Proiect Informatica

Informeaza-te:

Algoritmii de sortare prin insertie si prin selectie necesita timp patratic , atat in cazul mediu cat si in cazul nefavorabil. Cu toate ca acesti algoritmi sunt excelenti pentru cazuri mici (elemente putine ) , pentru cazuri mari (foarte multe elemente ) avem algoritmi mai eficienti. Cativa algoritmi de sortare sunt : merge sort si quick sort.

Page 16: Proiect Informatica

Metoda Mergesort:

Page 17: Proiect Informatica

while (k < j)

a[k++] = b[i++];

void merge(int a[],int st, int dr)

if (st < dr)

{int m = (st+dr)/2;

merge(a,st, m);

merge(a,m+1, dr);

mergesort(a,st, m, dr);

}

}

void mergesort(int a[],int st, int m, int dr){int b[100];int i, j, k;i = 0; j = st;// copiem prima jumatate a vectorului a in bwhile (j <= m)b[i++] = a[j++];i = 0; k = st;// copiem inapoi cel mai mare element la fiecare paswhile (k < j && j <= dr)if (b[i] <= a[j])a[k++] = b[i++];elsea[k++] = a[j++];// copiem elementele ramase daca mai exista

Page 18: Proiect Informatica

Informeaza-te:

Quicksort efectuează sortarea bazându-se pe o strategie divide et impera. Astfel, el împarte lista de sortat în două subliste mai ușor de sortat Pașii algoritmului sunt: Se alege un element al listei, denumit pivot.

Se reordonează lista astfel încât toate elementele mai mici decât pivotul să fie plasate înaintea pivotului și toate elementele mai mari să fie după pivot. După această partiționare, pivotul se află în poziția sa finală. Se sortează recursiv sublista de elemente mai mici decât pivotul și sublista de elemente mai mari decât pivotul.

O listă de dimensiune 0 sau 1 este considerată sortată.

Page 19: Proiect Informatica

Metoda Quicksort

Page 20: Proiect Informatica

void QUICKSORT(int inf,int sup) { int x,i,j,t; i=inf; j=sup; x=A[(i+j)/2]; do{ while ((i<sup)&&(A[i]<x)) i++; while ((j>inf)&&(A[j]>x)) j--; if (i<=j) { t=A[i]; A[i]=A[j]; A[j]=t; i++; j--; } }while (i<=j); if (inf<j) QUICKSORT(inf,j); if (i<sup) QUICKSORT(i,sup); }

Page 21: Proiect Informatica

Stoica BiancaChirca AdrianVoicu Ciprian

Constantin Alexandru

Au realizat acest proiect:

Page 22: Proiect Informatica

Va multumim pentru atentie!