Proiect informatica
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

Proiect Informatica PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

Proiect Informatica. Metoda “Divide et impera ”.

Download Presentation

Proiect Informatica

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


Proiect informatica

ProiectInformatica


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


Determinarea sumei elementelor unui vector

Determinareasumeielementelorunui vector


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


Determinarea elementului maxim

Determinareaelementului maxim”


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


Determinarea cmmdc ului

Determinareacmmdc-ului:


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


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.


Problema turnurilor din hanoi

Problematurnurilor din Hanoi:


Proiect informatica

#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ă.


Cautare binara

Cautarebinara:


Proiect informatica

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


Metoda mergesort

MetodaMergesort:


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


Metoda quicksort

MetodaQuicksort


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


Au realizat acest proiect

Au realizatacestproiect:

Stoica Bianca

Chirca Adrian

VoicuCiprian

ConstantinAlexandru


Va multumim pentru atentie

Vamultumimpentruatentie!


  • Login