Divide et Impera
Prof:Neciu Ileana
LICEUL
ECONOMIC ADMINISTRATIV
CUPRINS
Prezentare general
Aplicaii
Valoarea maxim dintr-un vector
Sortarea prin interclasare
Sortarea rapid
Tunurile din Hanoi
Fractali-Curba lui Koch
PREZENTARE GENERAL
Divide et impera
Apasa
aic
testul d i pentru
e evalu
are
initial
Specificai valoarea de adevr a afirmaiei: pentru orice algoritm iterativ exist unul recursiv echivalent. Echivalena este
adevrat?
a) 8
b) 7
c) 5
d)6
APLICATIA 1
VALOAREA MAXIM DINTRUN VECTOR
#include<iostream.h>
#include<conio.h>
int v[10], n;
int max (int i, int j)
{int a, b;
if (i==j) return v[i];
else
{a=max (i, (i+j)/2);
b=max ((i+j)/2+1,j);
if(a>b) return a;
else return b;}}
main()
{cout<<"n= " ; cin>>n;
for (int i=1; i<=n; i++)
{cout<<"v[" <<i<<"]=";
cin>>v[i];}
cout<<"max="<<max(1,n);
getch();}
EXEMPLU
1
7
2
1
n=5
3
13
4
14
5
2
APLICATIA 2
SORTAREA
PRIN INTERCLASARE
#include<iostream.h>
int a[10], n;
void sort (int p, int q, int a[10])
{
int m;
if (a[p]>a[q])
{m=a[p];
a[p]=a[q];
a[q]=m;
}
}
void interc (int p, int q, int m, int a[10])
{int b[10], I, j, k;
i=p; j=m+1; k=1;
while (i<=m && j<=q)
if (a[i]<=a[j])
{b[k]=a[i];
i=i+1;
k=k+1;
}
else
{b[k]=a[j];
j=j+1;
k=k+1;
}
if (i<=m)
for(j=I; j<=m; j++)
{b[k]=a[j];
k=k+1;
}
else
APLICATIA 3
SORTAREA RAPID
Sortarea rapid
Fie vectorul a cu n componente numere ntregi (sau reale). Se cere ca vectorul s fie sortat
crescator.
Rezolvare. Este necesara o funcie POZ care trateaz o poriune din vector, cuprins ntre
indicii dai de li (limita inferioar) i ls (limita superioar). Rolul acestei funcii este de a
poziiona prima component a [li] pe o poziie k cuprins intre li i ls, astfel nct toate componentele
vectorului cuprinse ntre li i k-1 s fie mai mici sau egale dect a [k] i toate componentele vectorului
cuprinse intre k+1 i ls s fie mai mari sau egale dect a [k].
n aceast funcie exist dou moduri de lucru:
iniial, i va lua valoarea li, iar j va lua valoarea ls (elementul care iniial se afl pe poziia li se va
gasi mereu pe o poziie dat de i sau de j);
dac a[i] este strict mai mare dect a [j], atunci se inverseaz cele dou numere i se
schimb modul de lucru;
APLICATIA 4
TUNURILE DIN HANOI
Rezolvare.
Dac n=1, se face mutarea ab, adic se mut discul de pe tija a pe tija b.
Dac n=2, se fac mutrile ac, ab, cb.
n cazul n care n>2, problema se complic. Notam cu H(n, a, b, c) irul mutrilor celor n discuri de pe
tija a pe tija b, utiliznd ca tij intermediara, tija c.
Conform strategiei DIVIDE ET IMPERA, ncercam s descompunem problema n alte dou
subprobleme de acelai tip, urmnd apoi combinarea soluiilor. n acest sens, observm c mutarea
celor n discuri de pe tija a pe tija b, utiliznd ca tij intermediara tija c, este echivalent cu:
mutarea a n-1 discuri de pe tija a pe tija c, utiliynd ca tij intermediar tija b; mutarea discului rmas
pe tija b; mutarea a n-1 discuri de pe tija c pe tija b, utiliznd ca tija intermediara tija a.
Parcurgerea celor trei etape permite definirea recursiv a irului H (n, a, b, c) astfel:
H(n, a, b, c)=
ab, n 1
H n 1, a, c, b , ab, H n 1, c, b, a , n 1
Apas aici
pentru a
vedea un
exemplu
AB
AC
BC
AB
CA
CB
AB
APLICATIA 5
FRACTALI
Fractali
INTREBARE..
SITE-URI DE INFORMARE
http://ro.wikipedia.org/wiki
www.didactic.ro
www.subiecte2008.edu.ro
www.ginfo.ro
www.referate.ro
www.edu.ro
BIBLIOGRAFIE
RECAPITULARE
1. In ce consta metoda Divide et Impera?
2. Tunurile din Hanoi. Pornind de la definirea recursiva a
sirului
H(n,a,b,c)= ab, ptr. n=1,