|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
DIVIDE ET IMPERA | ||||||
|
||||||
1. Prezentare generala
Divide et impera este o tehnica speciala prin care se pot rezolva anumite probleme. s1n14nt Evident nu toate problemele pot fi rezolvate prin utilizarea acestei tehnici. Fara teama de a gresi, putem afirma ca numarul lor este relativ mic, tocmai datorita cerintei ca problema sa admita o descompunere repetata. Divide et impera este o tehnica ce admite o implementare recursiva. Am invatat
principiul general prin care se elaboreaza algoritmi recursivi: ce se intampla
la un nivel, se intampla la un nivel, se intampla la orice nivel (avand grija
sa asiguram conditiile de terminare). Tot asa, se elaboreaza un algoritm prin
divide et imoera: la un anumit nivel avem doua posibilitati: 2. Aplicatii 1) Maximul dintr-un vector Trebuie tiparita valoarea maxima dintre numerele retinute in vector de la i
la j(initial i= 1, j=n). Pentru aceasta procedam astfel : int max(int i ,int j) main( ) 2) Cautare binara Se citeste un vector cu n componente numere intregi, unde nemerele se presupun
ordonate crescator si o valoare intreaga (nr). Sa se decida daca nr se gaseste
sau nu printre numerele citite, iar in caz afirmativ sa se tipareasca indicele
componentei care contine acea valoare . #include<iostream.h> int va100i,n,nr; void caut(int i, int j) main ( ) 3) Sortarea prin interclasare Daca dispunem de doua siruri de valori, primul cu m elemente,
al diolea cu n elemente, ambele sortate, atunci se poate obtine un vector care
contine toate valorile soratate. Algoritmul de interclasare este performant,
pentru ca efectueaza cel mult m+n-1 comparatii. Conform strategiei Divide et impera, problema este descompusa in alte doua subprobleme de acelasi tip si, dupa rezolvarea lor, rezultatele se combina (in particular se interclaseaza). Descompunerea unui vector in alti doi vectori care urmeaza a fi sortati are loc pana cand avem de sortat vectori de una sau doua componente. In aplicatie, functia sort sorteaza un vector cu maximum doua elemente; interc interclaseaza rezultatele; divimp implementeaza strategia generala a metodei studiate. #include<iostream.h> int aa10i,n; void sort (int p,int q, int aa10i ) while ((i<m) && (j<=q)) if (aaii<=baji caki=aai++i else cak++i=baj++i if (i<=m) for (j=1;j<=m;j++) cak++i=aaji else for (i=j;i<=q;i++) cak++i=baii void divimp (int p, int q, int aa10i) Se dau 3 tije simbolizate prin a,b,c. Pe tija a se gasesc discuri de diametre diferite, asezate in ordine descrescatoare a diametrelor privite de jos in sus. Se cere sa se mute de pe tija a pe b, utilizand ca tija intermediara tija c, respectand urmatoarele reguli: · la fiecare pas se muta un singur disc ; · nu este permis sa se aseze un disc cu diametrul mai mare peste un disc cu diametrul mai mic. Rezolvare: Daca n=1 se face mutarea ab, adica se muta discul de pe tija a pe tija b. Daca n=2 se fac mutarile ac,ab,cb. In cazul in care n>2 problema se complica. Notam cu H(n,a,b,c) sirul mutarilor celor n discuri de pe tija a pe tija b , utilizand ca tija intermediara, tija c. Conform strategiei Divide et impera incercam sa descompunem
problema in alte doua subprobleme de acelasi tip, urmand
apoi combinarea solutiilor. In acest sens, observam ca mutarea
celor n discuri de pe tija a pe tija b,utilizand ca tija intermediara
tija c, este echivalenta cu: H(n,a,b,c) = A a,b daca n=1 Exemple: Pentru n=2 avem: H(2,a,b,c)=H(1,a,c,b),ab,H(1,c,b,a)=ac,ab,cb. Pentru n=3 avem : H(3,a,b,c)=H(2,a,c,b),ab,H(2,c,b,a)=H(1,a,b,c),ac,H(1,b,c,a),ab,H(1,c,a,b),cb,H(1,a,b,c)=ab,ac,bc,ab,ca,cb,ab. include <iostream.h> char a,b,c; int n; void han (int n, char a, char b, char c) A han(n-1,a,c,b); cout<<a<<b<<endl; han(n-1,c,b,a); main ( ) |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|