proiect informatica
Download
Skip this Video
Download Presentation
Proiect Informatica

Loading in 2 Seconds...

play fullscreen
1 / 22

Proiect Informatica - PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on

Proiect Informatica. Metoda “Divide et impera ”.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Proiect Informatica' - noble-myers


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
metoda divide et impera
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ă.

slide4

#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;}

slide6

#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; }

slide8

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);}

informeaza te
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.

slide11

#include<iostream>

using namespace std;

void hanoi(intn,chara,charb,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;}

informeaza te1
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ă.

slide14

#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;

else

if (p<u)

if (nr<v[m])

caut(p, m-1);

else

caut(m+1, u);

else

cout<<"nu a fost gasit.";

}

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;

}

informeaza te2
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.

slide17

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 b

while (j <= m)

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

i = 0; k = st;

// copiem inapoi cel mai mare element la fiecare pas

while (k < j && j <= dr)

if (b[i] <= a[j])

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

else

a[k++] = a[j++];

// copiem elementele ramase daca mai exista

informeaza te3
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ă.

slide20

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); }

au realizat acest proiect

Au realizatacestproiect:

Stoica Bianca

Chirca Adrian

VoicuCiprian

ConstantinAlexandru

ad