+ All Categories
Home > Documents > Desparte Si Stapineste

Desparte Si Stapineste

Date post: 20-Feb-2018
Category:
Upload: vlad-aptefrai
View: 219 times
Download: 0 times
Share this document with a friend

of 25

Transcript
  • 7/24/2019 Desparte Si Stapineste

    1/25

    Silviu GNCU

    Programarea Calculatoarelor

    Tehnici de programare

    Grupele anului II Informatica

    ProfesorSilviu Gncu

  • 7/24/2019 Desparte Si Stapineste

    2/25

    Silviu GNCU

    Rezolvarea unei probleme prin intermediul acestei metodepresupune:

    1. mp#r&irea repetat# a unei probleme de dimensiuni mari )n dou#sau mai multe subprobleme de acela+i tip, dar de dimensiuni maimici.

    2. Rezolvarea subproblemelor)n mod direct, dac# dimensiunea lorpermite aceasta, sau )mp#r&irea lor )n alte subprobleme dedimensiuni +i mai mici.

    3. Combinarea solu&iilor subproblemelor rezolvate pentru a ob&inesolu&ia problemei ini&iale.

    Metoda despartei s t#p&nete

  • 7/24/2019 Desparte Si Stapineste

    3/25

    Silviu GNCU

    Descrierea metodei

    1. Mul&imea supus#prelucr#rii la un anumit pas al algoritmului:},,,{ 1 jii aaaA K+=

    2. mp#r&im mul&imeaA )n dou# submul&imi care vor fi prelucrateseparat:

    };,,,{ 11 miii aaaA ++= K

    ;2)( divijm =

    }.,,,{ 212 jmimi aaaA K++++=

    3. n continuare, mul&imile A1 +i A2 se )mpart din nou )n c)te dou#submul&imi;

    4. Procesul continu#p-n# c-nd solu&iile ce corespund submul&imilorcurente vor putea fi calculate )n mod direct.

    5. Combin#m solu&iile ce corespund submul&imilor curente.

  • 7/24/2019 Desparte Si Stapineste

    4/25

    Silviu GNCU

    Descompunerea mulimii A #n submulimi

    a a a a a a a=( , , , , , , )1 2 3 4 5 6 7

    A a a a a1 1 2 3 4=( , , , )

    a2-2 7=( )A a a1-1 1 2=( , ) A a a1-2 3 4=( , ) a a2-1 5 6=( , )

    A a a a2 5 6 7=( , , )

  • 7/24/2019 Desparte Si Stapineste

    5/25

    Silviu GNCU

    Schema general#a algoritmului bazat pe

    metoda desparte i s t#p&nete

    voidDesparteSiStapineste(inti,intj,tip&x){

    intm;

    tipx1,x2;

    if(SolutieDirecta(i,j)) Prelucrare(i,j,x)else{

    m=(j-i)/2;

    DesparteSiStapineste(i,i+m,x1);

    DesparteSiStapineste(i+m+1,j,x2);

    Combina(x1,x2,x);}

    }

  • 7/24/2019 Desparte Si Stapineste

    6/25

    Silviu GNCU

    Exemplul 1. Suma elementelor unui vector

    Fie dat un vector cu urm#toarele elemente:

    Modalitatea de determinare a sumei:

    Apoi:

  • 7/24/2019 Desparte Si Stapineste

    7/25

    Silviu GNCU

    Deoarece s-au ob&inut secven&e de vector de lungime 1, nu se mairealizeaz# descompunerea. Se compun solu&iile subsecven&elor+i sedetermin# solu&iile corespunzatoare

  • 7/24/2019 Desparte Si Stapineste

    8/25

    Silviu GNCU

    O soluie de implementare:#include

    #include

    intv[1000],n;intdivide(intli,intls){

    / / func.ia prime/te ca parametri extremit#.ile din vectorintmij, d1 ,d2;

    //mijlocul, d1 /i d2 re.in sumele pe extr. st-ng# respectiv dreapt#if(li!=ls) {

    //algoritmul se autoapeleaz# dac# secven.ele au lungime mai mare de 1mij=(li+ls)/2; d1=divide(li,mij); d2=divide(mij+1,ls);returnd1+d2;

    }else returnv[li];

    }

    main(){

    coutn;for(inti=0;i

  • 7/24/2019 Desparte Si Stapineste

    9/25

    Silviu GNCU

    Poziia final#Poziia iniial#

    Toate discurile de pe primul necesit# a fi mutate pe ultimulax, astfel )nc-t num#rul de mut#ri s# fie minim.Exemplu pentru un turn format din 4 discuri.

    Exemplul 2. Problema turnurilor din Hanoi

  • 7/24/2019 Desparte Si Stapineste

    10/25

    Silviu GNCU

    Regulile jocului

    1. La o mutare se deplaseaz#un singur disc.

    2. Un disc mai mare nu poate fi pus pesteun disc mai mic.

  • 7/24/2019 Desparte Si Stapineste

    11/25

    Silviu GNCU

    Un disc Dou#discuri

    O mutare

    Trei mut#ri

  • 7/24/2019 Desparte Si Stapineste

    12/25

    Silviu GNCU

    &apte mut#ri

    Trei discuri

  • 7/24/2019 Desparte Si Stapineste

    13/25

    Silviu GNCU

    Numrul

    discurilorNumrul minim de mutri

    1 1

    2 21 + 1 = 3, adic#22 - 1 = 4 - 1 = 3

    3 23 + 1 = 7, adic#23 - 1 = 8 - 1 = 7

    4 27 + 1 = 15, adic#24 1 = 16 1 = 15

    5 215 + 1 = 31, adic#25 1 = 32 1 = 31

    6 231 + 1 = 63, adic#26 1 = 64 1 = 63

    72

    63 + 1 = 127, adic#2

    7

    1 = 128 1 = 127... ...

    64 264 1 = 18.446.744.073.709.551.615 care se cite'te:18 trilioane, 446 biliarde, 744 bilioane, 73 miliarde, 709 milioane, 551 mii, 615.

    Tabelul conine num#rul minim de mut#ri necesare:

  • 7/24/2019 Desparte Si Stapineste

    14/25

    Silviu GNCU

    Rezolvarea problemei

    #include#include

    charx,y,z;

    intn;

    voidhanoi(intn, charx,chary,charz){

    if(n==1) cout

  • 7/24/2019 Desparte Si Stapineste

    15/25

    Silviu GNCU

    Exemplul 3. T#ierea unei pl#ci de arie maxim#

    Se consider# o plac# dreptunghiular# de dimensiunileLH. Placa

    aren g#uri punctiforme, fiecare gaur# fiind definit#prin coordonatele (xi,yi). Elabora&i un program care decupeaz# din plac# o bucat# de ariemaxim#, dreptunghiular# +i f#r# g#uri. Sunt admise doar t#ieturi de la omargine la alta pe direc&ii paralele cu laturile pl#cii - verticale sauorizontale.

    Placa ini&ial#

    ),,0,0( HLP=

  • 7/24/2019 Desparte Si Stapineste

    16/25

    Silviu GNCU

    T#ierea pe vertical#),,,( dcbaPcurenta =

    ),,,(1 dxbaP i=

    ),,,(2 dcbxP i=

    T#ierea pe orizontal#

    ),,,(4 iycbaP =

    ),,,(3 dcyaP i=

  • 7/24/2019 Desparte Si Stapineste

    17/25

    Silviu GNCU

    Agoritmul de rezolvare

    1. Ini&ial stabilim aria maxim#Smax = 0.

    2. Dac# placa curent# nu are g#uri, problema poate fi solu&ionat# direct,compar-nd aria curent# cu valoarea Smax.

    3. n caz contrar alegem o gaur# arbitrar# (xi, yi) prin care t#iem placa curent# )npl#ci mai mici:

    P1=(a, b, xi, d); P2=( xi, b, c, d);

    P3=(a, yi, c, d); P4=(a, b, c, yi ).

    4. n continuare examin#m )n acela+i mod fiecare din pl#cileP1, P2, P3 i P4,

    ob&inute )n rezultatul t#ierii, memor-nd consecutiv )n variabilaSmax aria pl#cii de

    suprafa maxim#.

    5. Procesul de calcul se termin#atunci, c-nd nici una din pl#cile curente P1,P2,P3,P4 nu mai con&ine g#uri.

  • 7/24/2019 Desparte Si Stapineste

    18/25

    Silviu GNCU

    #include

    #include#include

    #include

    #include

    #define nmax 100

    doublex[nmax],y[nmax],smax,amax,bmax,cmax,dmax,l,h;

    intn;

    voidcitire();

    voiddesp(double,double,double,double);

    intsolutie(double,double,double,double);

    voidPrelucrareSolutie(double,double,double,double);

    main(){

    citire();smax=0;

    desp(0,0,l,h); cout

  • 7/24/2019 Desparte Si Stapineste

    19/25

    Silviu GNCU

    Procedura DesparteSiStapineste

    voiddesp(doublea,doubleb,doublec,doubled){

    intq;

    cout

  • 7/24/2019 Desparte Si Stapineste

    20/25

    Silviu GNCU

    Func&ia Solutie

    intsolutie(doublea,doubleb,doublec,doubled){

    intl1,j,z;

    z=0;l1=0;

    for(j=1;ja && x[j]b && y[j]=smax){

    smax=s; amax=a;

    bmax=b; cmax=c;

    dmax=d;

    }

    }

  • 7/24/2019 Desparte Si Stapineste

    21/25

    Silviu GNCU

    Procedura Citire

    voidcitire(){

    inti;

    ifstream f("date.txt");

    f>>n>>l>>h;

    for(i=1;i>x[i]>>y[i];

    f.close();

    cout

  • 7/24/2019 Desparte Si Stapineste

    22/25

    Silviu GNCU

    Implementare a metodei desparte &i st(p+ne&te

    1. Se alege o valoare pivot. Se ia valoarea elementului din mijloc ca

    valoare pivot, dar poate fi oricare alt#valoare, care este )n intervalulvalorilor sortate, chiar dac#nu este prezent#)n tablou.

    2. Partiionare, Se rearanjeaz#elementele )n a+a fel )nc-t, toate

    elementele care sunt mai mari dec-t pivotul merg )n partea dreapt#atabloului. Valorile egale cu pivotul pot sta )n orice parte a tabloului.n plus, tabloul poate fi )mp#r&it )n p#r&i care nu au aceea+idimensiune (nu sunt egale).

    3. Se sorteaz(am+ndou(p(rile.se aplic#recursiv algoritmul desortare rapid#)n partea st-ng#+i )n partea dreapt#.

    Algoritmul de partiie#n detaliu.

    Exist#2 indici i +i j, +i la )nceputul algoritmului de parti&ionare iindic#primul element al tabloului iar j indic#ultimul element din

    tablou. La pasul urm#tor algoritmul mut#i )nainte, p-n#c-nd un

    Sortarea rapid(

  • 7/24/2019 Desparte Si Stapineste

    23/25

    Silviu GNCU

    Algoritmul de partiie #n detaliu

    Exist# 2 indici i +i j, +i la )nceputul algoritmului de parti&ionare i

    indic#primul element al tabloului iar j indic# ultimul element din tablou. Lapasul urm#tor algoritmul mut# i )nainte, p-n# c-nd un element cu o valoaremai mare sau egal# cu pivotul este g#sit#. Indicele j este mutat )napoi, p-n#c-nd un element cu valoare mai mic# sau egal# cu pivotul este g#sit#. Dac#i= 10 >= 2, interschimb#m 13 cu 21, 2, 7, 28, 10, 16, 3, 10, 13 - 28 >= 10 >= 10 , interschimb#m 28 cu 101, 2, 7, 10, 10, 16, 3, 28, 13 - 10 >= 10 >= 3, interschimb#m 10 cu 31, 2, 7, 10, 3, 16, 10, 28, 13 - i > j, se opre+te parti&ionarease aplic#din nou algoritmul pentru 1, 2, 7, 10, 3 si 16, 10, 28, 13Se ob&ine: 1, 2, 3, 7, 10, 10, 13, 16, 28 +ir sortat

  • 7/24/2019 Desparte Si Stapineste

    24/25

    Silviu GNCU

    Implementare#n C++#include

    intt[100],i,n;

    voidquickSort(intv[],intst, intdr){inti=st,j=dr,aux,pivot=v[(st+dr)/2];

    while(i

  • 7/24/2019 Desparte Si Stapineste

    25/25

    Silviu GNCU

    Pentru acas#Problema 1. Se consider # un tablou unidimensional cu

    numere )ntregi. Elabora.i un program prin intermediul c#ruia:a) se va determina elementul minimal/maximal;

    b) se va afi/a elementele pare/impare;c) se va determina num#rul de elemente prime/neprime;d) se va determina suma elementelor pare/impare;

    utiliznd metoda Desparte &i St(p+ne&te.Problema 2. Elabora.i un program pentru simularea jocului

    Ghici Num#rul. Se consider# segmentul a, b (se citesc de la tastatur#).n mod aleatoriu se selecteaz# un num#r de pe acest segment [a; b].Prin intermediul programului se va demonstra modalitate de aflare a

    num#rului ales la )nt-mplare. La ecran se va afi/a num#rul de itera.iinecesare pentru determinarea num#rului.

    Din culegere : Probl. 1-6, pag. 59


Recommended