of 29 /29
1 1 /29 /29 8. 8. Analiza Analiza Algoritmilor Algoritmilor Complexitatea Complexitatea algoritmilor Documentarea Documentarea programelor Inspectare Testare si depanare Verificare si validare Stil in programare C C 7 7 / 16.11.2012 / 16.11.2012 Corectitudine Corectitudine Eficien Eficien ţ ţ ă ă Posibilitate Posibilitate de de î î mbunătă mbunătă ţ ţ ire ire Alte Alte calită calită ţ ţ i i

C 8. Analiza Algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_7.pdf · 2/29 Complexitatea Algoritmilor Ne intereseazăsăcomparăm între ei mai mulţi algoritmi care rezolvăaceeaşi problemă,

  • Author
    others

  • View
    15

  • Download
    1

Embed Size (px)

Text of C 8. Analiza Algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_7.pdf · 2/29 Complexitatea Algoritmilor Ne...

  • 11/29/29

    8.8. AnalizaAnaliza AlgoritmilorAlgoritmilor

    ComplexitateaComplexitatea algoritmilor DocumentareaDocumentarea programelor Inspectare Testare si depanare Verificare si validare Stil in programare

    CC77 / 16.11.2012/ 16.11.2012

    CorectitudineCorectitudine EficienEficien PosibilitatePosibilitate de de mbuntmbuntireire AlteAlte calitcalitii

  • 22/29/29

    ComplexitateaComplexitatea AlgoritmilorAlgoritmilorNe intereseaz s comparm ntre ei mai muli algoritmi care rezolv aceeai

    problem, despre care tim c sunt coreci, preciznd ccare are dintredintre aceacetiatia esteeste maimaibunbun.

    Putem compara doi algoritmi n funcie de :- cantitatea de memoriememorie necesar;- vitezaviteza de lucru, deci timpul necesar rezolvrii problemei.

    Timpul necesar execuiei unui program depinde de numrul operaiilor cetrebuiesc executate, care depinde de datele de intrare, deci se schimb de la o execuie la alta.

    Exist ns un un celcel maimai ruru cazcaz, pentru acele date de intrare pentru care numruloperaiilor efectuate este maxim. n acest caz vorbim de complexitatecomplexitate nn celcel maimai rurucazcaz.

    De asemenea, putem vorbi de numrul mediumediu de de operaoperaiiii efectuate ntr-o execuie. Dac numrul execuiilor posibile este finit atunci acest numr mediu este egal cu numrul operaiilor efectuate n toate execuiile, mprit la numrul execuiilor complexitatecomplexitate mediemedie.

  • 33/29/29

    CalcululCalculul complexitatiicomplexitatiiComplexitatea msoar eficiena unui algoritm din punct de vedere al vitezei de

    lucru, deci a timpului necesar rezolvrii unei probleme, care depinde de numruloperaiilor necesare, iar acesta depinde de volumul datelor de intrare.

    Putem determina complexitateaa) n cel mai ru caz (numrul operaiilor este maxim), saub) medie (nr. operaiilor pentru toate variantele posibile / nr. total de posibiliti).

    Pentru un algoritm care are domeniul D i datele de intrare dD, dac notm cu nd numrul de operaii efectuate, i cu pd probabilitatea de a alege setul d,

    vom defini complexitateaa) n cel mai ru caz :

    b) medie :

    n general este suficient s determinm ordinul de mrime al complexitii nfuncie de numrul datelor de intrare (n). Se spune c o complexitate C este de ordinul nk i se noteaz aceasta cu O(nk), dac exist dou constante c1, c2 pentrucare: c1 .. nk < C < c2 . . nk .

    Cm = pd . nd dD

    Cr = Max nd dD

  • 44/29/29

    Cutare, Sortare, InterclasareCCutareautarea i SortareaSortarea sunt dou dintre cele mai des ntlnite subprobleme n

    programare. Ele constituie o parte esenial din numeroasele procese de prelucrare a datelor. Operaiile de cutare i sortare sunt executate frecvent de ctre oameni n viaade zi cu zi, ca de exemplu cutarea unui cuvnt n dicionar sau cutarea unui numr ncartea de telefon.

    CutareaCutarea este mult simplificat dac datele n care efectum aceast operaie suntsortate (ordonate, aranjate) ntr-o anumit ordine (cuvintele n ordine alfabetic, numerele n ordine cresctoare sau descresctoare).

    SortareaSortarea datelor const n rearanjarea coleciei de date astfel nct un cmp al elementelor coleciei s respecte o anumit ordine. De exemplu n cartea de telefonfiecare element (abonat) are un cmp de nume, unul de adres i unul pentru numrul de telefon. Colecia aceasta respect ordinea alfabetic dup cmpul de nume.

    Dac datele pe care dorim s le ordonm, adic s le sortm, sunt n memoria intern, atunci procesul de rearanjare a coleciei l vom numi sortare intern, iar dac datele se afl ntr-un fiier (colecie de date de acelai fel aflate pe suport extern), atunci procesull vom numi sortare extern.

    Fiecare element al coleciei de date se numete articol iar acesta la rndul su estecompus din unul sau mai multe componente. O cheie C este asociat fiecrui articol ieste de obicei una dintre componente. Spunem c o colecie de n articole este ordonatcresctor dup cheia C dac C(i) C(j) pentru 1i

  • 55/29/29

    CutareCutare

    Vom prezenta cteva tehnici elementare de cutare i vom presupune c datele se afl n memoria intern, ntr-un ir de articole.

    Vom cuta un articol dup un cmp al acestuia pe care l vom considera cheia de cutare. n urma procesului de cutare va rezulta poziia elementului cutat (dacacesta exist).

    Notnd cu k1, k2, ...., kn cheile corespunztoare articolelor i cu a cheia pe care o cutm, problema revine la a gsi (dac exist) poziia p cu proprietatea

    a = kp.De obicei articolele sunt pstrate n ordinea cresctoare a cheilor, deci vom

    presupunek1 < k2 < .... < kn .

    Uneori este util s aflm nu numai dac exist un articol cu cheia dorit ci i sgsim n caz contrar locul n care ar trebui inserat un nou articol avnd cheiaspecificat, astfel nct s se pstreze ordinea existent.

  • 66/29/29

    ProblemaProblema CutriiCutrii

    Problema cutrii are urmtoarea specificaie:

    Date a,n,(ki, i=1,n); { nN, n 1 i k1 < k2 < .... < kn }Rezultate p; { p = poziia de inserare }

    1 dac a k1 ,unde: p = i dac i{2, 3, ... , n} : ki-1 < a ki ,

    n+1 dac a > kn .

    Pentru rezolvarea acestei probleme vom descrie mai muli subalgoritmi. O prim

    metod este cutareacutarea secvensecvenialial:

    Subalgoritmul CautSecvCautSecv(a,n,K,p) este:

    Fie p:=1;

    Cttimp pn i a>kp execut p:=p+1 sfct

    sf-CautSecv.

  • 77/29/29

    O alt metod, numit cutarecutare binarbinar, care este mult mai eficient, utilizeazmetoda divide et divide et imperaimpera. Se determin n ce relaie se afl cheia articolului aflat nmijlocul coleciei cu cheia de cutare. n urma acestei verificri cutarea se continudoar ntr-o jumtate a coleciei. n acest mod, prin njumtiri succesive se micoreaz volumul coleciei rmase pentru cutare. Cutarea binar se poaterealiza prin apelul funciei BinarySearch(a,n,K,1,n), descris mai jos, folosit nsubalgoritmul dat n continuare.

    Subalgoritmul CautBinCautBin(a,n,K,p) Este:Dac ak1 Atunci p:=1 AltfelDac a>kn Atunci p:=n+1 Altfel

    {ki-1Dr} Altfel BinarySearch:=St

    Sf-BinarySearch.

  • 88/29/29

    n funcia BinarySearch descris mai sus, variabilele St i Dr reprezint capeteleintervalului de cutare, iar m reprezint mijlocul acestui interval. Prin aceastmetod, ntr-o colecie avnd n elemente, rezultatul cutrii se poate furniza dupcel mult log2n comparri. Deci complexitatea n cel mai ru caz este direct proporional cu log2n. Fr a insista asupra demonstraiei, menionm c ordinulde mrime al complexitii medii este acelai.

    Se observ c funcia BinarySearch se apeleaz recursiv. Se poate nltura uorrecursivitatea, aa cum se poate vedea n urmtoarea funcie:

    Funcia BinarySearch (a,K,St,Dr) Este:Repet m:=(St+Dr) Div 2;

    Dac a=Km Atunci BinarySarch:=m AltfelDac aKm } St:=m+1PnCnd (St>Dr) Sau (a=Km);Dac St>Dr Atunci BinarySarch:=St

    Sf-BinarySearch.

    Complexitatea acestor algoritmi de cutare este dat n tabelul alturat : O(log2n)O(log2n)CautBin

    O(n)O(n)CautSecv

    medien cel mairu cazAlgoritmul

    ComplexitateaComplexitatea

  • 99/29/29

    SortareSortare interninternPrin sortare intern vom nelege o rearanjare a unei colecii aflate n memoria

    intern astfel nct cheile articolelor s fie ordonate cresctor (eventual descresctor). Problema de sortaresortare internintern revine la ordonarea (rearanjarea) cheilorK=(k1,k2,...,kn) astfel nct k1k2... kn .

    O prim tehnic numit "Selecie" se bazeaz pe urmtoarea idee: se determinpoziia elementului cu cheie de valoare minim (respectiv maxim), dup care acesta se va interschimba cu primul element. Acest procedeu se repet pentrusubcolecia rmas, pn cnd mai rmne doar elementul maxim. Deci la fiecarepas i = 2, 3, ... , n-1 se va obine subirul k1 , k2 , ... , ki corect aranjat (aa cum aacum trebuie s fie n poziia final) punnd pe poziia i elementul minim km(respectiv maxim) din subirul ki , ki+1 , ... , kn. Dup ce i elementul kn-1 estecompletat corect irul va fi ordonat (implicit i ultima poziie va fi corect).

    Selection Sort Selection Sort

  • 1010/29/29

    Subalgoritmul de ordonareordonare prinprin selecselecieie este urmtorul:

    Subalgoritmul SelectieSelectie (n,K) este:Pentru i:=1, n-1 execut { Completeaz corect fiecare poziie i = 1, 2 ,... , n-1 }Fie m:=i; { m = poziia elementului minim din subirul ki , ki+1 , ... , kn }Pentru j:=i+1; n execut

    Dac kj < km atunci m:=j sfdacsfpentruDac i

  • 1111/29/29

    Insertion Sort Insertion Sort

    O alt posibilitate const n parcurgerea cheilor cu ordonare parial: ntotdeaunaporiunea parcurs rmne ordonat. Deci cheia la care am ajuns va fi inserat nsecvena parcurs astfel ca aceasta s-i pstreze proprietatea de ordonare. Deci la fiecare pas i = 2, 3, ... , n se va obine subirul k1 , k2 , ... , ki ordonat cresctorinsernd elementul de pe poziia i n subirul k1 , k2 , ... , ki-1 (care este ordonatcresctor de la pasul precedent) astfel nct i acest subir s rmn ordonatcresctor.

    Elementul ki care trebuie pus pe poziia corect p se reine ntr-o variabiltemporar v pentru a putea muta spre dreapta (cu o poziie) toate elementele maimari dect el. Pe locul rmas liber (p=poziia cutat) se va depune v obinndastfel ordinea dorit n subirul k1,k2,...,kn adic k1k2... kn. Evident c la ultimulpas (i=n), dup ce i kn va fi inserat corect se va obine k1k2... kn deci tot irul vafi ordonat.

  • 1212/29/29

    Obinem un al doilea algoritm de sortare, numit InserInserieie:Subalgoritmul InsertieInsertie (n,K) este:

    Pentru i:=2, n executFie v:=ki; p:=i-1;Cttimp p>0 i kp >v execut

    kp+1 := kp ; p:=p-1

    sfct ;kp+1:=v

    sfpentrusf-Inserie.

    Algoritmul prezentat mai sus va executa n cel mai nefavorabil caz n(n-1)/2 comparri i mutri, iar n cazul cel mai favorabil, cnd irul este ordonat va executa2(n-1) mutri i n-1 comparri, ceea ce nseamn c acest algoritm arecomplexitatea OO(n(n22))..

    Insertion Sort Insertion Sort

  • 1313/29/29

    Bubble Sort Bubble Sort A treia metod care va fi prezentat, numit "BubbleSort", compar dou cte

    dou elemente consecutive iar n cazul n care acestea nu se afl n relaia dorit, elevor fi interschimbate. Procesul de comparare se va ncheia n momentul n care toateperechile de elemente consecutive sunt n relaia de ordine dorit.

    Subalgoritmul BubbleSortBubbleSort (n,K) este:t:=1; {Traversarea t =1 (urmeaz prima traversare) }RepetFie Sortat:=True; {Ipoteza "este sortat"}Pentru i:=1, n-t execut

    Dac ki-1 > ki atunciv := ki; ki := ki+1; ki+1:=v; { Interschimb ki cu ki+1 : kiki+1 }Sortat:=False {Nu a fost sortat }

    sfdacsfpentru; t:=t+1

    pncnd Sortat {Este sortat}sf-BubbleSort.

    Acest algoritm execut n cel mai nefavorabil caz (n-1)+(n-2)+ ... +2+1 = n(n-1)/2 comparri, deci complexitatea lui este OO(n2)(n2)..

  • 1414/29/29

    Quick Sort Quick Sort O metod mai performant de ordonare, prezentat n continuare, se numete

    QuickSortQuickSort i se bazeaz pe tehnica divide et impera. Metoda este prezentat sub forma unei proceduri care realizeaz ordonarea unui subir precizat prin limitainferioar (St) i limita superioar (Dr) a indicilor acestuia.

    Apelul procedurii pentru ordonarea ntregului ir este : QuickSort(K,1,n), unde nreprezint numrul de articole ale coleciei date este:

    Cheam QuickSortQuickSort(K,(K,11,n,n);

    Procedura QuickSortQuickSort (K,St,Dr) va realiza ordonarea subirului kSt,kSt+1,...,kDr. Acest subir va fi rearanjat astfel nct kSt s ocupe poziia lui final (cnd irul esteordonat). Dac p este aceast poziie, irul va fi rearanjat astfel nct urmtoareacondiie s fie ndeplinit: ki kp kj, pentru: St i < p < j Dr.

    Odat realizat acest lucru (adic toate elementele mai mici dect kp se afl nstnga i cele mai mari n dreapta), n continuare va trebui doar s ordonm subirulkSt,kSt+1,...,kp-1 prin apelul recursiv al procedurii QuickSort(K,St,pQuickSort(K,St,p--11) i apoi subirulkp+1,...,kDr prin apelul QuickSort(K,pQuickSort(K,p+1+1,Dr,Dr). Ordonarea efectiv a acestui subir estenecesar doar dac acesta conine cel puin dou elemente (un subir avnd maipuin de doua elemente este deja ordonat).

  • 1515/29/29

    Procedura QuickSortQuickSort este prezentat n continuare :Subalgoritmul QuickSortQuickSort (K,St,Dr) Este:Dac St

  • 1616/29/29

    Tree Sort Tree Sort Un alt algoritm performant pentru sortare intern este "Tree SortTree Sort" (sortare

    arborescent) care se bazeaz pe construirea unui arbore binar ordonat. Arborelebinar ordonat are proprietatea c n orice subarbore, subarborele stng al acestuiaconine articole cu chei mai mici dect cheia coninut n rdcin, iar subarboreledrept conine chei mai mari dect rdcina. Prin parcurgerea n inordineinordine a arboreluiastfel construit elementele vor fi n ordine cresctoare. Construirea unui astfel de arbore se va realiza prin adugri succesive ale elementelor de sortat n subarborelestng sau drept dup cum cheia articolului care se adaug este mai mic respectivmai mare dect cheia aflat n rdcina subarborelui n care se efectueazadugarea.

    O(O(nn*log*log22nn))O(O(nn22))QuickSortQuickSortO(O(nn22))O(O(nn22))BubblesortBubblesortO(O(nn22))O(O(nn22))InserInserieieO(O(nn22))O(O(nn22))SelecSelecieiemediemedienn celcel maimai ruru cazcazAlgoritmulAlgoritmul

    ComplexitateaComplexitateaComplexitatea acestor algoritmi de sortare este dat n tabelul care

    alturat:

  • 1717/29/29

    Counting Sort Counting Sort

    Algoritmul SortareSortare prinprin NumrareNumrare realizeaz ordonarea unui ir x1, x2, ..., xnavnd termenii dintr-o mulime finit {0, 1, ... ,M} ( 0 xi M, i=1,n ). Acestalgoritm pstreaz ordinea dat pentru elementele nedistincte (Dac xi reprezintchei de ordonare neunice, de exemplu notele unor studenti {1, 2, ... , 10} ).

    Algoritmul calculeaz poziia pe care se va afla fiecare element prin numrareavalorilor mai mici sau egale dect acesta.

    Subalgoritmul este urmtorul:Subalgoritmul Sort_Num (X,n) este:

    Pentru j:=0, m Execut Pj := 0 Sf_Pentru; { Iniializeaz Pj = frecvena valorii j }Pentru i:=0, n Execut Pxi := Pxi + 1 Sf_Pentru; { Det. Pxi = frecv. Val. xi (*)}Pentru j:=1, m Execut Pj := Pj + Pj-1 Sf_Pentru;{ Recalc. Pj=frecv. Val. j (**)}Pentru i:= n,1,-1 Execut { Se trav. invers pentru a pstra ord. elem. egale}

    yPxi := xi ; { Depune elementul xi n irul Y pe poziia corect Pxi }Pxi := Pxi - 1 { Pregtete urmtoarea poziie pentru un element egal cu xi }

    Sf_Pentru;X:=Y { Depune n irul X irul ordonat din vectorul temporar Y }

    Sf- Sort_Num.

  • 1818/29/29

    Counting Sort Counting Sort

    Calitatea acestui algoritm const n complexitateacomplexitatea lui: O(Max(m,n)), deci pentrunoi este important volumul de date, deci practic complexitatea este O(n). Evident cnu putem ordona astfel orice ir ci doar iruri pentru care mulimea valorilor cheiloreste finit. De exemplu, pentru o ordonare dup medii vom avea limita M=1000 (media a.bca.bc se va numra la abcabc).

    Pentru a renuna la irul temporar Y se va interschimba fiecare element cu elementul de pe poziia corect (final). Elementul xi este completat corect daci=Pxi (i este poziia iniial iar Pxi este poziia final, egal cu numrul de elementemai mici sau egale dect xi (**)).

    n tabelul urmtor se poate vedeamodificarea direct a vectorului X (prininterschimbri succesive pn se ajungela forma final ordonat):

    997755333322997755333322993355337722993355337722553399337722XX665544332211ii

  • 1919/29/29

    Merge Sort Merge Sort

    Un ultim algoritm care va fi prezentat se numete "Merge Sort" (sortare prininterclasare) i se bazeaz pe tehnica "divide et impera". irul ce urmeaz a fiordonat se mparte n dou subiruri care se ordoneaz, dup care acestea se vorinterclasa obinndu-se ntregul ir ordonat. Fiecare subir se va ordona tot prindesprirea lui n dou subiruri urmat de interclasare i aa mai departe pn cndordonarea unui subir se poate rezolva elementar fr a mai fi necesar desprirealui n alte dou subiruri (lungimea subirului este cel mult 2).

    Algoritmul corespunztor este prezentat n paragraful urmtor apelnd o procedur recursiv care ordoneaz un subir preciznd limitele acestuia astfel: :Subalgoritmul MergeSort (A,St,Dr) este: {Sort. Sort. prinprin interclintercl. a elem. ASt,ASt+1,...,ADr}

    Dac St < Dr atunciFie m:=(St+Dr) Div 2; { m:=Split(A,St,Dr)}Cheam MergeSort (A,St,m); {OrdoneazASt,...,Am }Cheam MergeSort (A,m+1,Dr); {OrdoneazAm+1,...,ADr }Cheam Interclasare (A,St,m, A,m+1,Dr, A,St,Dr); {Combin rezultatele}

    sfdacsf- MergeSort .

  • 2020/29/29

    InterclasareInterclasare

    Fiind date dou colecii de date, ordonate cresctor (sau descresctor) dup o cheie, se cere s se obin o colecie care s fie de asemenea ordonat cresctor(respectiv descresctor) dup aceeai cheie i care s fie format din articolelecoleciilor date. Acest lucru se poate obine direct (fr o sortare a coleciei finale) prin parcurgerea secvenial a celor dou colecii, simultan cu generarea colecieicerute. Prin compararea a dou elemente din listele de intrare se va decide care element va fi adugat n lista de ieire. Deci ne intereseaz un algoritm de rezolvarea urmtoarei probleme:

    Se d un ir X ordonat cresctor (x1x2...xm ) i un ir Y de asemenea ordonatcresctor (y1y2... xn).

    Se cere irul Z ordonat cresctor (z1z2....zm+n) format din termenii irului X i Y.

    O soluie posibil ar fi depunerea componentelor vectorului X i a componentelorvectorului Y n vectorul Z, urmat de ordonarea vectorului Z obinnd rezultatuldorit. Acest algoritm este ineficient deoarece la o singur traversare a vectorilor X iY se poate obine vectorul Z aa cum se poate vedea n urmtorul algoritm (de interclasare).

  • 2121/29/29

    Subalgoritmul Interclasare(m,X,n,Y,k,Z) este: {X are m componente ord. cresctor}{La fel Y cu n componente. }

    Fie i:=1; j:=1; k:=0; { Cele m+n valori se depun n Z ordonate cresctor }Cttimp (im) i (jn) execut {Exist comp. n X i n Y }

    Dac xiyj Atunci Cheam Pune(i,xi,k,Z) { xi zk }Altfel Cheam Pune(j,yj,k,Z) { yj zk }

    SfdacSfct;Cttimp (im) Execut Cheam Pune(i,xi,k,Z) Sfct; {Mai exist comp. n X } Cttimp (jn) Execut Cheam Pune(j,yj,k,Z) Sfct; {Mai exist comp. n Y }

    Sf-Interclasare.

    Aici s-a folosit subalgoritmul Pune(ind,val,k,ZPune(ind,val,k,Z)) care pune n vectorul Z valoarea v i mrete indicele i cu 1, subalgortim dat n continuare.Subalgoritmul Pune(i,v,k,ZPune(i,v,k,Z) este: {Adaug val n vectorul Z cu k componente }

    k:=k+1; { i mrete ind cu 1 }zk:=v;i:=i+1

    Sf-Pune.

  • 2222/29/29

    Subalgoritmul de sortare bazat pe interclasare se poate vedea n continuare .Subalgoritmul Sortare_Prin_Interclasare(n,K) este: {Sortare prin interclasare}

    Cheam MergeSort (K,St,Dr);sf-SortInter.Subalgoritmul MergeSort (A,St,Dr) este: {Sortare prin interclasare a elementelor ASt,ASt+1,...,ADr}

    Dac St < Dr atunciFie m:=(St+Dr) Div 2; { m:=Split(A,St,Dr)}Cheam MergeSort (A,St,m); {OrdoneazASt,...,Am }Cheam MergeSort (A,m+1,Dr); {OrdoneazAm+1,...,ADr }Cheam Interclasare (A,St,m, A,m+1,Dr, A,St,Dr); {Combin rezultatele}

    sfdacsf- MergeSort.Subalgoritmul Interclasare (X,i,m, Y,j,n, Z,p,k) este: { Interclasare }Fie k:=p-1;Cttimp (im) i (jn) execut {Exist comp. n X i n Y}

    Dac xiyj Atunci Cheam Pune(i,xi,k,Z) { xi zk }Altfel Cheam Pune(j,yj,k,Z) { yj zk }

    SfdacSfct;Cttimp (im) Execut Cheam Pune(i,xi,k,Z) Sfct {Mai exist componente n X } Cttimp (jn) Execut Cheam Pune(j,yj,k,Z) Sfct {Mai exist componente n Y }

    sf-Inter .

  • 2323/29/29

    SortareSortare externextern

    Sortarea extern presupune parcurgerea a dou etape importante:a) mprirea fiierului de sortat F, n n fiiere H1,H2,...,Hn i sortarea intern a

    acestora;b) Interclasarea fiierelor de dimensiuni minime rezultnd un alt fiier ordonat,

    operaie care se repet de n-1 ori pentru a ajunge la fiierul dorit G.

    O problem cu care ne confruntm adesea este sortarea unei colecii de date aflatepe un suport externextern, de volum relativ mare fa de memoria intern disponibil. naceast seciune o astfel de colecie de date o vom numi fiier. n acest caz nu esteposibil transferul ntregii colecii n memoria intern pentru a fi ordonat i apoi din nou transferul pe suport extern. Dac datele ce urmeaz a fi sortate ocup un volumde n ori mai mare dect spaiul de memorie intern de care dispunem, atuncicolecia se va mpri n n subcolecii ce vor fi transferate succesiv n memoriaintern, se vor sorta pe rnd i vor fi stocate din nou pe suportul extern sortate. Din acest moment prin operaii de interclasare dou cte dou se pot obine colecii de dimensiuni superioare pn se obine toat colecia ordonat.

    La aceste interclasri, pentru a efectua un numr ct mai mic de operaii de transfer se recomand interclasarea coleciilor de dimensiuni minime, apoi din datele obinute din nou vor fi alese dou colecii de dimensiuni minime i aa maideparte pn se obine o singur colecie care va fi colecia cerut, adic sortat.

  • 2424/29/29

    DocumentareaDocumentarea programelorprogramelorn paralel cu elaborarea programului trebuie elaborat i o documentaie. Aceasta

    va conine toate deciziile luate n crearea programului. Documentarea esteactivitatea de prezentare a programului celor care vor fi interesai s obininformaii despre el. Acetia sunt n primul rnd persoanele care au realizatprogramul, apoi persoanele care-l vor folosi i persoanele solicitate s facntreinerea acestuia. Rezult de aici c avem dou tipuri de documentaie:

    - documentaie de realizarerealizare,- documentaie de utilizareutilizare .

    Documentaia de realizarerealizare trebuie s redea n cele mai mici detalii modul n care a fost realizat programul. Adeseori se ntlnesc programe fr nici o altdocumentaie n afara textului propriu-zis al programului. n graba de a termina ctmai repede, programul nu este nsoit de nici o documentaie i frecvent nu suntfolosite nici comentarii n textul programului.

  • 2525/29/29

    DocumentareaDocumentarea programelorprogramelor

    Sigur c nsi textul programului constituie o autodocumentare. Iar comentariileprezente n program dau explicaii suplimentare despre program. Este ns necesaro documentaie complet, scris, care va conine documentaia de realizare, ceconst din:- enunul iniial al problemei;- specificaia;- documentaia de proiectare (metoda de rezolvare aleas i proiectarea

    algoritmilor folosii. Pentru fiecare algoritm va fi prezentat subproblemacorespunztoare, cu specificaia ei i rolul fiecrei variabile);

    - documentaia de programare, care va include textul programului;- datele de test folosite; - modificri fcute n timpul ntreinerii programului,

    i documentaia privind exploatarea programului.

    O prim documentaie a oricrui program este textul surs propriu-zis. Este bineca acest text s poat fi citit ct mai uor, iar comentariile dau informaiisuplimentare despre program, constituie o autodocumentare a programului. Referitor la autodocumentare, folosirea comentariilor, alegerea cu grij a denumiriivariabilelor, ct i claritatea textului, obinut prin indentare i grij asupra structuriiprogramului, este util nu numai pe timpul elaborrii programului, dar mai ales petimpul ntreinerii i modificrilor ulterioare.

  • 2626/29/29

    DocumentareaDocumentarea programelorprogramelor

    Denumirea variabilei s fie astfel aleas nct s reflecte semnificaia ei. Se recomand i scrierea cuvintelor cheie cu litere mari pentru a le diferenia de celelalte denumiri din program. Comentariile vor fi prezente:- n capul programului, pentru a prezenta titlul i scopul programului, perioadarealizrii lui i numele programatorului;- n definiii, pentru a descrie semnificaia notaiilor folosite (a variabilelor, constantelor, subalgoritmilor, etc);- n dreapta unor instruciuni, pentru a descrie rolul acestora, sau cazul n care se atinge acea instruciune;- ntre prile unui modul mai lung, pentru a explica rolul fiecrei pri. Comentariile sunt recomandate, fiind un mijloc de autodocumentare a programului surs.

    Este ns nevoie i de o documentaie nsoitoare scris, care constituiedocumentarea propriu-zis a programului. Aceasta trebuie s redea toate deciziilefcute n timpul proiectrii, s prezinte diagrama de structur a ntregului produs ifiecare parte separat. Pentru fiecare modul documentaia va conine: numeleacestuia, datele de intrare, datele de ieire, funcia realizat de modulul respectiv, variabilele folosite i semnificaia lor, algoritmul propriu-zis.

  • 2727/29/29

    DocumentareaDocumentarea programelorprogramelor

    documentaia de UtilizareUtilizare

    Este necesar i o documentaie de folosirefolosire a produsului realizat. Beneficiarul nu este interesat de modul n care a fost realizat programul ci de modul n care l poatefolosi.

    Menionm c cele mai recente produse realizate de firmele consacrate au, pelng documentaia scris, i o autodocumentaie (funcii HELP).

    O documentare complet a unui program poate fi util nu numai pentru folosireai ntreinerea programului. Componente ale unui produs existent pot fi utile i nrealizarea altor produse. Este ns necesar s se neleag ct mai uor ce funciirealizeaz aceste componente i cu ce performane. Folosirea acestor componenteexistente, testate i documentate, duce evident la creterea productivitii nrealizarea noului produs.

  • 2828/29/29

    Ce linie i ce coloan se pot tia dintr-o matrice data,astfel nct suma elementelor rmase s fie maxim?

    TemaTema::

    Contraexemplu:2 6 6 5 19 17

    5 5 1 3 14 94 9 7 8 28 242 2 6 2 12 --> --11 20 14 16 minlc max=50!|

    Suma max.= 50!0 6 6 50 5 1 30 9 7 80 0 0 0

    Contraexemplu:2 6 6 5 19 1719 17

    5 5 1 3 14 914 94 9 7 8 28 2428 242 2 6 2 1212 ----> > ----

    1111 20 14 16 20 14 16 minminlclc max=max=50!50!|

    Suma max.= 50!0 6 6 50 5 1 30 9 7 80 0 0 0

    Exemplu:2 6 6 5 5 5 1 3 4 9 7 8 2 2 6 2

    ExempluExemplu:2 6 6 5 5 5 1 3 4 9 7 8 2 2 6 2

    O soluie (2,1):Suma Max.= 51

    0 6 6 50 0 0 00 9 7 80 2 6 2

    O O solusoluieie (2,1):Suma Max.= 51

    0 6 6 50 0 0 00 9 7 80 2 6 2

    Matricea A:7 5 5 89 1 1 44 5 2 11 3 7 1

    Matricea A:7 5 5 89 1 1 44 5 2 11 3 7 1

    Suma Max.= 447 5 0 89 1 0 44 5 0 10 0 0 0

    Suma Max.= 447 5 0 89 1 0 44 5 0 10 0 0 0

    Suma max.= 437 0 5 89 0 1 40 0 0 01 0 7 1

    Suma max.= 437 0 5 89 0 1 40 0 0 01 0 7 1

    17%

    83%

  • 2929/29/29. . .. . . CC77 / 16.11.2012/ 16.11.2012

    Ce linie i ce coloan se pot tia dintr-o matrice data, astfelnct suma elementelor rmases fie maxim?

    TemaTema: :

    int Pm(int* X, int n){

    int m=1;for (int i=2; i