ࡱ> 7 -NbjbjUU .|7|7|-Jl,,,,,,,@P)P)P)P)$t)@cj * * * * * * * *$͋ , * * * * *F,, * *FFF *n, *, *F *FFI2,, ** 1$@(P)z8 630cLo8E`F@@,,,, CORFU ANDA clasa a-x a E METODA DIVIDE ET IMPERA TABLA DE MATERII NOTIUNI INTRODUCTIVE APLICATII DIVIDE ET IMPERA: (Turnurilor din Hanoi; ( Sortare rapida ; ( Sortare prin interclasare; ( Sortare prin insertie binara; CONCLUZII BIBLIOGRAFIE NOTIUNI INTRODUCTIVE Metoda de programare DIVIDE ET IMPERA consta in impartirea problemei initiale de dimensiuni [n] in doua sau mai multe probleme de dimensiuni reduse .In general se executa impartirea in doua subprobleme de dimensiuni aproximativ egale si anume [n/2] . Impartirea in subprobleme are loc pana cand dimensiunea acestora devine suficient de mica pentru a fi rezolvate in mod direct(cazul de baza).Dupa rezolvarea celor doua subprobleme se executa faza de combinare a rezultatelor in vederea rezolvarii intregii probleme . Metoda DIVIDE ET IMPERA se poate aplica in rezolvarea unei probleme care indeplineste urmatoarele conditii : (se poate descompune in ( doua sau mai multe) suprobleme ; (aceste suprobleme sunt independente una fata de alta (o subproblema nu se rezolva pe baza alteia si nu se foloseste rezultate celeilalte); (aceste subprobleme sunt similare cu problema initiala; ( la randul lor subproblemele se pot descompune (daca este necesar) in alte subprobleme mai simple; (aceste subprobleme simple se pot solutiona imediat prin algoritmul simplificat. Deoarece putine probleme indeplinesc conditiile de mai sus ,aplicarea metodei este destul de rara. Dupa cum sugereaza si numele "desparte si stapaneste "etapele rezolvarii unei probleme (numita problema initiala) in DIVIDE ET IMPERA sunt : - descompunerea problemei initiale in subprobleme independente ,smilare problemei de baza ,de dimensiuni mai mici ; (descompunerea treptata a subproblemelor in alte subprobleme din ce in ce mai simple ,pana cand se pot rezolva imediata ,prin algoritmul simplificat ; (rezolvarea subproblemelor simple ; (combinarea solutiilor gasite pentru construirea solutiilor subproblemelor de dimensiuni din ce in ce mai mari ; ( combinarea ultimelor solutii determina obtinerea solutiei problemei initiale . Metoda DIVIDE ET IMPERA admite o implementare recursiva ,deorece subproblemele sunt similare problemei initiale, dar de dimensiuni mai mici . Principiul fundamental al recursivitatii este autoapelarea unui subprogram cand acesta este activ;ceea ce se intampla la un nivel ,se intampla la orice nivel ,avand grija sa asiguram conditia de terminare ale apelurilor repetate .Asemanator se intampla si in cazul metodei DIVITE ET IMPERA ; la un anumit nivel sunt doua posibilitati : s-a ajuns la o (sub)problema simpla ce admite o rezolvare imediata caz in care se rezolva (sub)problema si se revine din apel (la subproblema anterioara,de dimensiuni mai mari); s-a ajuns la o (sub)problema care nu admite o rezolvare imediata ,caz in care o descompunem in doua sau mai multe subprobleme si pentru fiecare din ele se continua apelurile recursive(ale procedurii sau functiei). In etapa finala a metodei DIVIDE ET IMPERA se produce combinarea subproblemelor (rezolvate deja) prin secventele de revenire din apelurile recursive. Etapele metodei DIVIDE ET IMPERA (prezentate anterior)se pot reprezenta prin urmatorul subprogram general (procedura sau functie )recursiv exprimat in limbaj natural: Subprogram DIVIMP (PROB); Daca PROBLEMA PROB este simpla Atunci se rezolva si se obtine solutia SOL Altfel pentru i=1,k executa DIVIMP(PROB) si se obtine SOL1; Se combina solutiile SOL 1,... ,SOL K si se obtine SOL; Sfarsit _subprogram; Deci ,subprogramul DIVIMP se apeleaza pentru problema initiala PROB;aceasta admite descompunerea in K subprobleme simple ;pentru acestea se reapeleaza recursiv subprogramul ;in final se combina solutiile acestor K subprobleme. De obicei problema initiala se descompune in doua subprobleme mai simple ; in acest caz etapele generale ale metodei DIVIDE ET IMPERA se pot reprezenta concret,in limbaj pseudocod ,printr-o procedura recursiva astfel : Procedura DIVIMP(li,ls,sol); Daca ((ls-li)<=eps) Atunci REZOLVA (li,ls,sol); Altfel DIVIDE (li,m,ls); DIVIMP(li,msol1); DIVIMP(m,ls,sol2); COMBINA(sol1,sol2,sol); Sfarsit_ procedura; Procedura DIVIMP se apeleaza pentru problema initiala care are dimensiunea intre limita inferioara (li) si limita inferioara(ls);daca (sub)problema este simpla (ls-li<=eps),atunci procedura REZOLVA ii afla solutia imediat si se produce intoarcerea din apelul recursiv;daca (sub)problema este (inca) complexa ,atunci procedura DIVIDE o imparte in doua subprobleme ,alegand pozitia m intre limitele li si ls ;pentru fiecare din cele doua subprobleme se reapeleaza recursiv procedura DIVIMP; in final ,la intoarcerile din apeluri se produce combinarea celor doua soluitii sol1 si sol2 prin apelul procedurii COMBINA. PROBLEMA TURNURILOR DIN HANOI Prezentarea algoritmului rezolvarii Fie trei tije verticale notate A,B,C .Pe tija A se gasesc asezate n discuri de diametre diferite ,in ordinea crescatoare a diametrelor,privind de sus in jos . Initial ,tijele B si C sunt goale .Sa se afiseze toate mutarile prin care discurile de pe tija A se muta pe tija B , in aceeasi ordine ,folosind ca tija de manevra C si resspectand urmatoarele reguli: (la fiecare pas se muta un singur disc; (un disc se poate aseza numai peste un disc cu diametrul mai mare . Rezolvarea acestei probleme se bazeaza pe urmatoarele considerente logice : -daca n=1 ,atunci mutarea este immediata A(B(mut discul de pe A pe B); (daca n=2,atunci sirul mutarilor este : A(C,A(B,C(B; (daca n>2 procedam astfel : -mut (n-1)discuri A(C; -mut un disc A(B ; -mut cele (n-1)discuri C(B. Observam ca problema initiala se descompune in trei subprobleme mai simple ,similare problemei initiale: mut (n-1)discuri A(C ,mut ultimul disc pe B ,mut cele (n-1)discuri C-->B.Dimensiunile acestor subprobleme sunt : n-1,1,n-1. Aceste subprobleme sunt independente ,deoarece tijele initial (pe care sunt dispuse discurile ),tijele finale si tijele intermediare sunt diferite.Notam H(n,A,B,C)=sirul mutarilor a n discuri de pe A pe B, folosind C. PENTRU n=1 A(B n>1 H(n,A,B,C)= H(n-1,A,C,B),AB, H(n-1,C,B,A) program turnurile _hanoi; var n:byte; procedure hanoi(n:byte;a,b,c:char); begin if n=1 then writeln(a,(,b) else begin hanoi(n-1,a,c,b); writeln(a,(,b); hanoi(n-1,c,b,a); end; end; begin write(nr discuri pe tija A =);readln(n); writeln(mutarile sunt urmatoarele :); hanoi(n,A,B,C); readln;readln; end. Sortare rapida(quicksort) Un tablou V se completeaza cu n elemente numere reale .Sa se ordoneze crescator folosind metoda de sortare rapida . Solutia problemei se bazeaza pe urmatoarele etape implementate in programul principal: (se apeleaza procedura quick cu limita inferioara li=1 si limita superioara ls=n; (functiapoz realizeaza mutarea elementului v[i] exact pe pozitia ce o va ocupa acesta in vectorul final ordonat ; functiapoz intoarce (in k ) pozitia ocupata de acest element; (in acest fel ,vectorul V se imparte in doua parti : li k-1 si k+1ls; (pentru fiecare din aceste parti se reapeleaza proceduraquick,cu limitele modificate corespunzator ; (in acest fel ,primul element din fiecare parte va fi pozitionat exact pe pozitia finala ce o va ocupa in vectorul final ordonat (functiapoz); (fiecare din cele doua parti va fi ,astfel ,inpartita in alte doua parti ;procesul continua pana cand limitele partilor ajung sa se suprapuna ,ceea ce indica ca toate elementele vectorului au fost mutate exact pe pozitiile ce le vor ocupa in vectorul final ;deci vectorul este ordonat ; (in acest moment se produc intoarcerile din apelurile recursive si programul isi termina executia . program quicksort; type vector= array [1..50] of real ; var v:vector; i,n,k:integer; function poz(li,ls:integer):integer; var i,j,modi,modj,m:integer; man:real; begin i:=li; j:=ls; modi:=0; modj:=-1; while iv[j] then begin man:=v[i]; v[i]:=v[j]; v[j]:=man; m:=modi ; modi:=-modj; modj:=-m; end; i:=i+modi; j:=j+modj; end; poz:=i; end; procedure quick(li,ls:integer); begin if lia[ls] then begin man:=a[li]; a[li]:=a[ls]; a[ls]:=man; end; end; procedure interclas(li,m,ls:word;var a:vector); var b:vector:i,k,p,j:word; begin i:=li; j:=m+1; k:=0; while (i<=m)and(j<=ls) do begin inc(k); if a[i] =v[li] then poz:=ls else poz:=li else poz:=i else begin m:=(li+ls)div 2; if v[i]IJhi[ b c 򻲩ăvqi]qi j4CJaJmH sH  j4CJaJCJaJB*CJ4aJ,mH phsH B*CJ,aJ,mH phsH  jbCJ4aJ4mH sH CJ4aJ4 jbCJ4aJ4CJ4aJ4mH sH CJ(aJ(mH sH CJ,aJ,mH sH mH sH CJ4aJmH sH 5\CJHaJHmH sH CJaJmH sH 6CJaJmH sH B*CJ8aJ8mH phsH $ !,-./89VWXYZ[\]^_`ab  -Nbcdef >]^8^8 h^h [  ] u 6 ^c g ~ ? @ K"xY_de^_  *+UVO. Q C!D!"""B*CJ4aJ$mH phsH B*CJ$aJ$ph jCJaJCJ$aJ$B*CJaJphB*CJ,aJ,ph j4CJaJmH sH CJaJmH sH  j4CJaJCJaJA6 >K"xAh^h^|(Yh^h_*/Y[bcP/L h^h   . Q i !J!t!!!!!2"Y"y"""""")###$h^h""#####$$$,%-%%%C&D&m'n''''*(G(!++-I.00000-1.1111344@$@-@.@@@AB BBBBCCCCDDDDaKݠB*CJ$aJ$mH phsH B*CJ4aJ$mH phsH CJ$aJ$mH sH B*CJaJmH phsH CJ$aJ$ j4CJaJCJaJ j4CJaJmH sH CJaJmH sH CJ4aJmH sH <$!%"%%.&8&9&b'''''*(G(q(((()%)M)p)))#*w**!+v+h^hv++",n,,,-(-=-B-Q-R-S-T-U-V----.X.....D/i///h^h//00M0x0000,111111111111111111m22h^h23334A4c44444+5m5555596a6u6666>777S888h^h8@99:A:w::;K;;;><?<j<<<<=E=U=V=W=]=====>/>h^h/>U>}>>>>>&?B?K?x?????@@@@@&@@AAB BBBC^h^hCCDODDDDDDEFEbEwEEEE7FFF/GUGGGGGGG)HNHh^hNHaHHHHHHHI`IIIIIIJYJxJJJJK*KJKXK]K^K_K`Kh^h`KaKbKcKdKeKfKqKKK.LLMMMMMM M M M M MMMMMMMh^haKdKqK9L:LrLLLMM M*M7MlM(N,N-Nƾƹ 6CJaJCJ aJmH sH CJ$aJmH sH CJ$B*CJ4aJ4mH phsH CJ4aJ4mH sH CJ4aJ4CJaJ j4CJ$aJ$CJ$aJ$ j4CJ$aJ$mH sH CJ$aJ$mH sH "5>*B*CJ`\aJ`mH phsH 5>*B*CJ8\aJ8phMMM M!M"M#M$M7M] []u6 > K " xA|(Y_*/Y[bcP/L.Qi Jt2Yy) !!"!!."8"9"b#####*$G$q$$$$%%%M%p%%%#&w&&!'v''"(n((()()=)B)Q)R)S)T)U)V))))*X*****D+i++++,,M,x,,,,,------------------m..///0A0c00000+1m1111192a2u2222>333S444@556A6w667K777>8?8j88889E9U9V9W9]99999:/:U:}:::::&;B;K;x;;;;;<<<<<&<<==> >>>??@O@@@@@@AFAbAwAAAA7BBB/CUCCCCCCC)DNDaDDDDDDDE`EEEEEEFYFxFFFFG*GJGXG]G^G_G`GaGbGcGdGeGfGqGGG.HHIIIIII I I I I IIIIIIIII I!I"I#I$I7ICNH`KM-N)+,./013456789:;=-N*=CDJKMNU%>L]k [c ]gu~6 A > I " - xAH|(GY~#_e*4^_  *+/=UVYk!#/O7Q]iv8CDHbt 2CYjy);5 S !!-!F!G!d!e!j!l!!!&"'"."D"""b#n####$$$*$9$G$b$q$$$$$$$$%%%%:%M%b%p%%%%%&#&l&v&&&'!'k'u'''("(i(n((((()) )&)8)=)b))))))* * **I*X*********+D+W+i+~+++++++, ,,),M,X,x,,,,,,,,,-.-n-o-----..0.m.|.k/l//000A0K0c0m000000001)1_1l1111111 292F2a2n2u222222263>3w3333K4Q4R4S4444445@55556<6A6Q6v6666677$7K77778>8y888888 99@9E9P9U9c999999999::/:G:U:m:}::::::::::&;1;B;E;K;V;w;;;;;;;;;;<<<<$<.<<<==>>>>>>??D?E???@@O@R@@@@@@@@ AAAFASAbAqAwAAAAAAAB6BBBBBBB#C/CICUCwCCCCD)DIDND\DaDfDDDDDDDDDD EE;E`EEEEEEF)FYFsFFFFFFGJGPG]GgGpGsG{G|GGG.H;HrHsHHHI*I7I?IlIoIIIIIIIIIJJ(J,J,J/J =Uf$=L\k Zc \gt~5 A = I J K ! - w@H{'GX~#^e)4 .=XkOP.O7P]hv8Ibs 1CXjx(; !-!!!-"D"a#n####$)$9$F$b$p$$$$$$$$%%$%:%L%b%o%%%%%&"&l&v&&&' 'k'u'''(!(i(m((((()) )')8)<)b))))))**I*W*********+C+W+h+~+++++++, ,,),L,X,w,,,,,,,,+-.-----l.|.../000@0K0b0m000000001*1_1l1111111 282F2`2n2t222222263=3w3333K4R4444445?55556<6@6Q6v66677$7J77778=8y8~88888 99@9D9P9T9c999999999::.:G:T:m:|::::::::::%;1;A;E;J;V;w;;;;;;;;;;<<<<%<.<<<==>>>>>> ????@@N@R@@@@@@@@ AAAEASAaAqAvAAAAAAAB6BBBBB#C.CICTCwCCCCD(DIDMD\D`DfDDDDDDDDDD EE;E_EEEEEEEEEEEE F)FXFsFwFxFFFFFFGGG)G*GIGPGWGXG\GgGpGrGGG-H;HHHI*I6I?IkIoIIIIIIIIIJJ*J,J,J/Jfg6 4L$%!'(+ ,1 2a2277789P9999}:::B;V;<<bAAYFxFfGrG.HIII$I?IJ,J,J/JNastasiu Florin MYCOMPUTER A:\IMPERA.DOC MYCOMPUTERC:\My Documents\IMPERA.DOC MYCOMPUTERC:\My Documents\IMPERA.DOC MYCOMPUTERC:\My Documents\IMPERA.DOCmihaiC:\temp\referate\Impera.docDVDDD:\My Documents\NET\REFERATE\REFERATE.RO\informatica\INF8\Impera.docL /2: NiIDQq@@)|#nZ*^  t!e8hRV R__?.;W/$d=D5ʳQ!8 7D@jMDK lL#.5NLS4VXlcd$ej Qx2 ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l HH^H`OJQJo(l ^`OJQJo(l ^`OJQJo(l   ^ `OJQJo(l ^`OJQJo(l XX^X`OJQJo(l ((^(`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l 88^8`OJQJo(l ^`OJQJo(l   ^ `OJQJo(l   ^ `OJQJo(l xx^x`OJQJo(l HH^H`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l^`OJPJQJ^Jo(b   ^ `OJQJo(o   ^ `OJQJo( xx^x`OJQJo( HH^H`OJQJo(o ^`OJQJo( ^`OJQJo( ^`OJQJo(o ^`OJQJo( ^`OJQJo(l ^`OJQJo(l pp^p`OJQJo(l @ @ ^@ `OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l ^`OJQJo(l PP^P`OJQJo(l?.5ND5L V  >lce8!8^DKXh)~?O :jXJZ,xh.|̳J;= `֮r=L kPzL RYvt}8εo,W4”|ntO:>ʉ2<j^F㮶v5<&L"k㸭&n޷7 v rN9*N(UคT)؎fFVQ2Bʃ i4[ނ42/<`*bϜqd6HT1d\??fxr Xth&Ksh@nBx Fb\ڲr|f6P{J$lF0D(v02\ ])p:L$vl4t8۶8J@v26Q^66>^Nt,}Ncvt)4 &\4gH41rN6^Z@.J꬀&KĀ";ʃxFJF(Ьq4߲imDbD4RR6nvv##:,]NªT $WxE1P# 6 B,Ui*.2ku=`$,ɪsp$":47V-P Znd=NF\bfo2rZ_ 2/pH>XvĻr@Vت֢w$TPp}h(ƭڼqF2hv A,l?X'.`bF!|pHL@j4R@,J,JH8O,J,J8{-J@@UnknownGz Times New Roman5Symbol3& z Arial7Marlett;Wingdings?5 z Courier New"1hfbf )=V :}Yx0dKEE3QH TABLA DE MATERIINastasiu FlorinDVD#O Subject: DIVIDE ET IMPERA Date: Thu, 17 Jun 2004 20:56:28 +0300 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 pA @ܕIOh+'0  $ @ L Xdlt| TABLA DE MATERII Nastasiu Florinastast Normal.dotoDVD7DMicrosoft Word 9.0M@@*t@U )=՜.+,0  hp   PF NastasiuK  TABLA DE MATERII Title  !"#$%&'()*+,-./0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry FVJ1Table?WordDocument.|SummaryInformation(DocumentSummaryInformation8CompObjjObjectPoolVJVJ  FMicrosoft Word Document MSWordDocWord.Document.89q