17
Tipuri abstracte de date. Limbajele de programare furnizează tipuri de date standard (sau tipuri primitive). De exemplu în C acestea sunt: char, int, float, doubleUn tip de date precizează o mulţime D, finită şi ordonată de valori (constantele tipului) şi o mulţime de operaţii aplicate valorilor, de forma F : D x D  D pentru operaţii binare sau    D pentru operaţii unare Astfel pentru tipul standard int avem: D - submulţimea întregilor cuprinsă între -32768 şi 32767,  F = {+, -, *, /, %} Un Tip Abstract de Date (TAD) este o specificare a unui set de date de un anumit tip, împreună cu un set de operaţii care pot fi executate cu aceste date. Acesta este o entitate matematică abstractă, cu existenţă independentă. Abstractizarea reprezintă concentrarea asupra esenţialului, ignorând detaliile (contează  „ce” nu „cum”). De ce sunt necesare TAD?  Limbajele de programare, deşi nu pot oferi toată varietatea de tipuri necesară utilizatorului pentru a-şi dezvolta aplicaţiile, posedă un mecanism de creere a unor noi tipuri de date. Implementările acestor tipuri de nivel înalt, dispersate în program, cresc complexitatea şi influienţează negativ asupra clarităţii. Dacă operaţiile asupra acestor tipuri de nivel înalt nu se folosesc în mod consistent, atunci pot apare erori în program. Specificarea Tipurilor Abstracte de Date. Un TAD (T ip A bstract de D ate) este specificat printr-un triplet (D, F, A), cu:: D - o mulţime de domenii (sau tipuri). F - o mulţime de funcţii A – o mulţime de axiome, care precizează proprietăţile funcţiilor, şi care trebuiesc respectate la implementare Exemple1. Mulţimea numerelor naturale    - domenii:  { 0,1,2,…} { true,false}    - operaţii: zero, iszero, succ, add    - axiome: iszero(0) = true iszero(succ(x)) = false add(0,x) = x add(succ(x),y)=succ(add(x,y)) 2. O coadă de întregi.:.     - domenii: int { true,false} Q = mulţimea cozilor de întregi    - funcţii: new crează o coadă de întregi vidă enq inserează un întreg ca ultimă poziţie în coadă deq şterge primul element din coadă front furnizează  întregul  din vârful cozii size furnizează numărul de întregi din coadă isEmpty testează dacă lungimea cozii este 0 sau nu    - axiome: new() întoarce o coadă de întregi front(enq(x, new()) = x deq(enq(x, new()) = new() front(enq(x, enq(y, Q))) = front(enq(y, Q)) deq(enq(x,enq(y,Q))) = enq(x, deq(enq(y, Q))) 1

C1-Colectii de Date

Embed Size (px)

DESCRIPTION

coldate

Citation preview

  • Tipuriabstractededate.Limbajeledeprogramarefurnizeaztipuridedatestandard(sautipuriprimitive).DeexemplunCacesteasunt:char, int, float, double.UntipdedateprecizeazomulimeD,finitiordonatdevalori(constanteletipului)iomulimedeoperaiiaplicatevalorilor,deforma F:DxDD pentruoperaiibinaresau DD pentruoperaiiunare

    Astfelpentrutipulstandardintavem:Dsubmulimeantregilorcuprinsntre32768i32767,F={+,,*,/,%}UnTipAbstractdeDate(TAD)esteospecificareaunuisetdedatedeunanumittip,mpreuncuunsetdeoperaiicarepotfiexecutatecuacestedate.Acestaesteoentitatematematicabstract,cuexistenindependent.

    Abstractizareareprezintconcentrareaasupraesenialului,ignornddetaliile(conteazcenucum).

    DecesuntnecesareTAD?Limbajeledeprogramare,deinupotoferitoatvarietateadetipurinecesarutilizatoruluipentruaidezvoltaaplicaiile, posedunmecanismdecreereaunornoitipuridedate.Implementrileacestortipuridenivelnalt,dispersatenprogram,cresccomplexitateaiinfluieneaznegativ asupra claritii. Dac operaiile asupra acestor tipuri de nivel nalt nu se folosesc n modconsistent,atuncipotapareerorinprogram.

    SpecificareaTipurilorAbstractedeDate.

    UnTAD(TipAbstractdeDate)estespecificatprintruntriplet(D,F,A),cu:: Domulimededomenii(sautipuri). Fomulimedefuncii A o mulime de axiome, care precizeaz proprietile funciilor, i care trebuiesc respectate la

    implementare

    Exemple:

    1.Mulimeanumerelornaturaledomenii: {0,1,2,} {true,false}operaii: zero, iszero, succ, addaxiome: iszero(0) = true iszero(succ(x)) = false

    add(0,x) = x add(succ(x),y)=succ(add(x,y))2.Ocoaddentregi.:.

    domenii: int {true,false} Q=mulimeacozilordentregifuncii: new creazocoaddentregivid

    enq insereazunntregcaultimpoziiencoaddeq tergeprimulelementdincoadfront furnizeazntreguldinvrfulcoziisize furnizeaznumruldentregidincoadisEmpty testeazdaclungimeacoziieste0saunu

    axiome: new() ntoarceocoaddentregifront(enq(x, new()) = xdeq(enq(x, new()) = new()front(enq(x,enq(y,Q)))=front(enq(y,Q))deq(enq(x,enq(y,Q)))=enq(x,deq(enq(y,Q)))

    1

  • Alte exemple de structuri matematice care pot reprezenta TAD sunt mulimile, grafurile, arborii,matricele,polinoamele,etc.

    Pentrustareacoad vidoperaiilefrontideqnusuntdefinite.Trebuiescstabiliteprecondiiipentrufiecareoperaie,indicndexactcndsepotaplicaacesteoperaii.

    Oprecondiieauneioperaiiesteoaseriunelogiccarespecificrestriciileimpuseasupraargumenteloroperaiei.Oprecondiiefalsauneioperaii,conducelaooperaienesigur,launprogramincorect.Astfeloprecondiieattpentrufrontctipentrudeqeste:coadnevid

    front(Q)ideq(Q)precondiie:!isEmpty(Q)

    PentrucaunTADsfieutil,trebuiesfiendepliniteprecondiiilepentrufiecareoperaie.UnTADbinedefinitindicclarprecondiiilepentrufiecareoperaie.

    TADdocumenteazi postcondiiile condiii caredevinadevratedupexecutareauneioperaii. Deexemplu,dupexecutareaoperaieienqaparepostcondiiacoadnevid:

    enq(x,Q) postcondiie:!isEmpty(Q)

    Operaiile TADpot fi gndite ca funcii n sens matematic. Precondiiile i postcondiiile definescdomeniulicodomeniulfunciei.TADestecompletspecificatnumainmomentulncaretoateoperaiileaufostdefinite,cutoateprecondiiileipostcondiiileimplicate.

    UnTADestespecificatsintacticprin:numetipurile(domeniile)cucareesteconstruitsemnturileoperaiilor(nume,intrritipuri,numriordineparametri,ieiritipulvaloriintoarse)

    Semantic,TADesteprecizataxiomaticprintroseriederegulilogice(axiome)careleagoperaiilentreele,saudescriindexplicitsemnificaiaoperaiilornfunciedeoperaiileasupraaltorTAD.

    Deexemplu,ostivpoatefispecificatastfel:

    Nume:Stiva(deTipElem).Domenii:

    StivamulimeainstanelortuturorstivelorElemmulimeatuturorelementelorcepotaparentroinstanStivainttipulprimitivntreg

    Funciiconstructor: new: >Stivamodificatori: push: StivaxElem>Stiva

    pop: Stiva/>Stivaaccesori: top: Stiva/>Elem

    isEmpty: Stiva>booleandestructor: delete: Stiva>

    Semantici(axiome):top(push(S,x))=x pop(push(S,x))=SisEmpty(new())=true isEmpty(push(S,x))=false

    Precondiii: pop(S): notEmpty(S)top(S): notEmpty(S)

    2

  • Operaiiletop(new())ipop(new())suntincorecte.Dacargumentulesteostivvid,operaiiletopipopsuntnedefinite.

    UninvariantaluneiinstaneaunuiTADesteoproprietatecaresepstreazntreoperaiileinstanei

    ImplementareaTipurilorAbstractedeDate.

    Existodistincientre TADmatematiciimplementareasantrunlimbajdeprogramare. UnsingurTADpoateaveamaimulteimplementridiferite.

    Stpnireaaplicaiilorcomplexeseobineprindescompunereanmodule.Unmodultrebuiesfiesimplu,cucomplexitateaascunsninteriorullui.Moduleleauointerfasimplcarepermitefolosirea,fracunoateimplementarea

    UnTADfolositntrunprogram,esteimplementatprintrunmodul.Unmodulesteoparteaprogramuluiizolat derestulprogramuluiprintrointerfa binedefinit, carelmuretemodul ncareestefolositmodulul..Moduleleasigurservicii(funcii,tipuridedate)Clienilor.Un client poatefiorice(program,persoan,altmodul)carefoloseteservicilemodulului. Spunemcservicileseexportclientului,sausuntimportatedinmodul.

    Utilizareatipurilorabstractededateasigurascundereaincapsulareainformaiei.

    Conceptul de modul implementeaz ideea ascunderii informaiei, clienii nu au acces la detaliileimplementriimodulului. Clientulareacceslaserviciileexportateprininterfa. ngeneral,existunmodul separat pentru fiecare TAD. Implementarea este ascuns n spatele interfeei, care rmneneschimbat,chiardacimplementareaseschimb.

    Dateleioperaiilecarelemanipuleazsunttoatecombinatentrunsingurloc,adicsuntncapsulateninteriorulmodulului.

    nCfiecareTADconst dintrostructur, ascuns utilizatorului. UtilizatorulTAD(clientul) primetenumaioreferin(unpointeropac)laaceaststructur. PentrufiecareoperaieaTADsedefineteofuncie,careconinecaargumentpointerullaTAD.Clientulnupoatefolosiacestpointerpentruaaccesadirectcmpurilestructurii,asigurndusenacestmodascundereainformaiei.

    structcoadastructnodCoadaQfatadataspatenextlung

    Implementareatrebuiesconin:

    3

    Modul Utilizator

    Interfa

  • ofunciecarecreazunnouobiect(constructor) ofunciecareelibereaz memoriaasociat cuobiectulTADcndacestanusemaifolosete

    (destructor).

    InC,sesepar:

    implementareamodulului TAD ntrun fiier .c care conine structura concret i definiiilefuncilor,

    interfaamodulului, ntrunfiier .h care conine definiri de tipuri i prototipurile funciilorexportate.

    Exemplu

    /* Fisier: Coada.h */struct coada; //anunta structuratypedef struct coada* Coada; //furnizeaza un pointer opac la ea

    Coada Q_New (); // constructorvoid Q_Delete(Coada* pQ); // destructor

    // Functii de accesvoid* Front(Coada Q);int Q_Size(Coada Q);int Q_Empty(Coada Q);

    /* Functii de manipulare */void Enq (Coada Q, void *el);void Deq (Coada Q);

    ninterfaaCoada.hsedefineteunpointeropacCoadalaostructurstructcoada,careestenumaideclarat,fiinddefinitnaltparte(nfiieruldeimplementareCoada.c).

    Clientulvaincludefiieruldeinterfaprin#includeCoada.h,deciapelurilefunciilorexportatevorfirecunoscutedectrecompilator.

    ClientulsipoatedeclaraobiectedetipCoadaiipoatedefinifunciicuargumentesauvalorintoarsedetipCoada.ClientulnusepoatereferidirectlacmpurilestructuriiprinintermediulpointeruluiCoadadeoarecenudispunededefiniiastructuriistructCoada.

    Fiieruldeimplementarevaconine:

    /*Fisier:Coada.c*/#include#include#include"Coada.h"typedefstructnod{/*structura,neexportata*/void*data;structnod*next;}Nod;

    typedefNod*RefNod;

    typedefstructcoada{RefNodfata;

    4

  • RefNod spate; int lung;} Coada;

    /* Constructor-Destructor */Coada Q_New(){ Coada Q; Q = malloc(sizeof((*Coada)); Q->fata = Q->spate = NULL; Q->lung = 0; return(Q);}void Q_Delete(Coada* pQ) {...}

    /* Functii de access */void* Front(Coada Q) {...}int Q_Size(Coada Q) {...}int Q_Empty(Coada Q) {...}

    /* Functii de manipulare */void Enq (Coada Q, void* data) {...}void Deq (Coada Q) {...}

    Constructorulidestructorulpentrustructuraintern NodsuntfolositedefunciileEnqi Deq. Acestefunciinutrebuieexportate,deoareceelelucreazdirectcustructurainternNod.

    Clientultrebuiesiscrienumaiaplicaia(deexemplufiierul TestCoada.c,caretesteazmodululCoada.

    Coadadentreginuesteocoadgeneralmotivpentrucarevomscrieocoaddeorice.Existdousoluiiposibile.

    SedefinetetipulTipElementnfiierul.hprin:

    typedefintTipElement;

    Putemschimbaastfeltipulelementuluieditndosingurliniedecod.Dacdorimslucrmnacelaiprogramcudoucozi,unadeinticealaltdedoubleatunciamaveanevoiededoumodulecoaddiferite.

    SedefineteTipElementcaunpointergeneric:

    typedefvoid*TipElement

    Soluiaestemaipericuloas,fiindmaigreudedepanat.UnTADestecaracterizatprinurmtoareleproprieti:

    exportuntip

    exportomulimedeoperaiicealctuiescinterfaa operaiileinterfeeisuntsingurulmijlocdeacceslastructuradedateaTAD

    axiomeleiprecondiiiledefinescdomeniuldeaplicaiealTAD

    OinstanaTAD(ovariabil)esteintrodusprintroreferinlastructuradedateaTAD)numitpointeropac.

    5

  • Interfaaestedefinitntrunfiierantetseparatinuconinereprezentareastructuriidedate,carenupoatefimodificatdirect.

    Contractulutilizatorimplementator.

    ntreproiectantulTADiutilizatorulacestora(clientul)sestabileteuncontractprincare:proiectantulasigur:

    structuridedateialgoritmieficieniisiguriimplementareconvenabil

    ntreineresimplclientulpretinde:

    ndeplinireaobiectivelorurmritefolosireaTADfrefortulnelegeriidetaliilorinternesdispundeunsetsuficientdeoperaii

    Descriereainterfeeiformeazuncontractclientfurnizorcare:dresponsabilitileclientului.caretrebuiesrespecteprecondiiiledresponsabilitilefurnizoruluicaretrebuiesasigurerespectareapostcondiiilor,asigurnd

    funcionareacorectaoperaiilor

    CriteriiledeproiectarealeinterfeelorTipurilorAbstractedeDate

    coeziune:toateoperaiiletrebuiesserveascuneisinguredestinaii(sdescrieosingurabstractizare)

    simplitate:seevitfacilitilecarenusuntnecesare(ointerfamaimicestemaiuordefolosit)

    lipsaredundanei:seoferunserviciuosingurdat

    atomicitate:nusecombinoperaiilenecesarenmodindividual.Operaiiletrebuiesfieprimitive,neputndfidescompusenalteoperaiialeinterfeei.

    completitudine:toateoperaiileprimitivetrebuiesasiguretotalabstractizarea

    consisten:operaiiletrebuiesfieconsistenteprivindconveniiledenume,folosireaargumentelorivalorilorntoarse

    refolosire:TADsuficientdegeneralepentruafirefolositencontextediferite

    robusteelamodificare:interfaasrmnstabilchiardacimplementareaTADsemodific

    comoditate:seprevdoperaiisuplimentarefadesetulcompletcaresasigureofuncionarecomod

    6

  • Coleciidedate.Exempledecolecii.

    Coleciile (saucontainerele)suntstructuridedatecarepstreazobiecteasemntoare,nnumrfinit.Exempledecoleciisunt:

    vectorulestegrupdeelementedeacelaitipaccesatedirect,printrunindicentreg.(indexatecucheintregi.).

    Untabloustaticconineunnumrfixatdeelemente,alocatelacompilare.Untabloudinamicsealoclaexecuieipoatefiredimensionat.Fadetipulpredefinittablou,colecia vector permiteverificareancadrriiindicilornlimite,alocareadinamicdememorie,etc.AdugareaunuielementarecomplexitateO(1),pecndtergereaicutareaO(n).

    iruldecaractere(string)esteunvectordecaractere,cuoperaiispecifice:determinarealungimiiirului,comparareaadouiruri,copiereaunuiir,concatenareaunuiirlaaltul,cutareaunuisubir,etc.

    lista esteocolecieomogen,cunumrdeelementevariabilnlimitefoartelargi.ElementelelisteisuntaccesibilesecvenialcucomplexitateO(n).AdugareaitergereadeelementesefaceficientcucomplexitateO(1).

    stiva (stack) esteolistcuaccesrestrnslaunuldincapete(vrfulstivei). Operaiilespecifice:punerea(push)iscoatereaunuielementdinstiv(pop)sefaceficientcucomplexitateO(1).

    coada(queue)esteolistlacareinserrilesefacpelauncapt(spatelecozii),iartergerilesefacpelacellaltcapt(faacozii).Cozilepstreazelementelenordineasosirii.

    mulimea(set)esteocoleciedevaloriunice.Permiteoperaiieficiente(cucomplexitateO(logn))de inserare, tergere,testincluziuneioperaiispecificemulimilorcaintersecia,reuniunea,diferena,etc.

    coadaprioritar(priorityqueue)esteocoleciecoadncareelementeleauasociateprioritiilacaretergereaelementuluicuprioritatemaximsefacenO(1),iarinserareaunuielementsefacecorespunztorprioritiinO(logn).Inserareaelementelorncoadaprioritarsefacenordineaprioritii, astfel nct s fie extras ntotdeauna elementul cel mai prioritar. Un spital de urgenfolosete camodel coadaprioritar. Cozileprioritaresunt folositelaplanificarea joburilor ntrunsistemdeoperare(jobulcelmaiprioritarvafiprimulexecutat).

    dicionarul (dictionary,map) reprezintocolecieindexatdeelemente,lacareindexulpoatefioricevaloareordonabil

    Operaiispecificecoleciilor.

    Coleciileavutenvedereauurmtoareleparticulariti: suntdinamice,deciocolecienoucreatvafivid suntcoleciireferin,deciconinpointerilaelementelecolecieiinuvalorileelementelor,pentru

    aputeaaveaoricetipurideelementencolecie.

    Alocareadinamicdememoriepentruocolecieseface:

    7

  • secvenial,printrozondememoriecontigu(tablou),alocatlacreareacoleciei.Aceastzonpoatefirealocat,daroperaiaestecostisitoareisefoloseterar.

    nlnuit,cualocaredinamicpentrufiecareelementnouadugatcoleciei.

    Posibilitateadeanuspecificatipulelementelor,adicdeaaveacoleciigenerice(coleciideelementedeoricetip)serealizeaznCutilizndpointerilavoid(void *).Aceastaimpunecunoatereadimensiuniifiecruielement,pentrualocareacorespunztoaredememorie.

    Proprietialecoleciilor: potficopiate. Capacitateacolecieiestenumrulmaximdeelementepecarelpoateconinecolecia.

    Cardinalulcolecieiestenumrulactualdeelementeconinutencolecie. coleciilenemodificabilenusuportoperaiidemodificare(caadd,removesauclear). coleciileimutabilenupermitmodificareaelementelorcoleciei. coleciecuaccesaleatoriuasiguracelaitimpdeaccespentrutoateelementele.

    Ocolecie(sauuncontainer)implementeazurmtoareleoperaii: creareauneicoleciinoivide(constructorul):Col new(); tergereatuturorobiectlorcoleciei(destructorul):void delete(Col *pC); raportareanumruluideobiectealcoleciei:int size(Col C); inserareaunuinouobiectncolecie:void add(Col C, Iter p, void *el); scoatereaunuiobiectdincolecie:void *remove(Col C, Iter p) accesullaunobiectdincolecie:void *get(Col C, Iter p );Maipotfidefiniteoperaiiprecum: testcolecievid: int isEmpty(Col C); modificareaunuielementdincolecie:void modif(Col C, Iter p, void *el); copiereauneicolecii: Col copy(Col C);

    Parcurgereacoleciilor.

    Traversareasauparcurgereacolecieipresupuneenumerareasistematicatuturorelementelorcoleciei,folosindnacestscopuniteratorsauenumerator.Elpoatefivzutcaunpointerlaoricareelementdincolecie

    Uniteratorseimplementeazprintreifunciicareasigur: poziionareaiteratoruluipeprimulelement poziionareaiteratoruluipeurmtorul(precedentul)elementdincolecie detectareasfrituluicoleciei(dupultimulelement)

    Pentruadescrieundomeniudevalorivomfolosidoiiteratoricarevorindicalimiteledomeniului. poziionarepeprimulelementalcolecieiIterbegin(Col C);..

    poziionarelasfritulcoleciei,dupultimulelementIter end(Col C);

    poziionarepeurmtorulelementdincolecieIter next(Col C, Iter p);Traversareauneicoleciipoatefiabstractizatprin:

    Col C;

    8

  • Iter p;for(p= begin(C); p!=end(C); p=next(C, p)) vizitare_element(get(C, p));

    9

  • Criteriideclasificareaacoleciilor.

    a)Numruldesuccesorialunuielement: Coleciiliniareavndcareprezentani:secvena,mulimea,dicionarul,grupul,etc Coleciineliniare(arborescente,recursive)detipularborilor.

    1.Coleciiliniare.

    O colecie liniar conine elemente ordonate prin poziie.Astfel exist primul element al coleciei, aldoileaelement,...,ultimulelement.ntrocolecieneliniarelementelesuntidentificatefrorelaiepoziional.

    Metodadeacceslaelementeseparcoleciileliniaren:

    Coleciicuaccesdirectoriceelementpoatefiselectatfraaccesanprealabilelementelecarelpreced.

    Coleciicuaccessecvenialaccesullaunelementsefaceporninddelaprimulelementalcolecieiprindeplasarectreelementulcutat.

    Listeleliniaresuntexempledecoleciicuaccessecvenial.ntrolistliniarnumruldeelementevariaznlimitefoartelargiioperaiiledeinserareitergeresuntfoartefrecvente.

    Unfiieresteocolecieplasatpeunsuportdememorieexterncreiaiseasociazostructurdedatenumitflux(stream).Fiierelediscpermitaccesdirect,celelaltenumaiaccessecvenial.Operaiadecitireterge(extrage)unelementdinfluxuldeintrare,iarceadescriereadaug(insereaz)unelementnfluxuldeieire.

    ColeciicuindexaregeneralizatTabloulesteocoleciecarepermiteaccesuldirectlaoriceelementfolosindunindicentreg.ngeneral,fiecruielementisepoateasociaocheie(carenumaiesteneapratunntreg,caindexul),caresfiefolositpentruaaccesaelementul.

    Untabeldedispersiepstreazdateicheiasociateacestora.Cheiaestetransformatntrunindexntreg,folositpentrualocalizadata.

    Dicionarele(tablourileasociative)constaudinasocieriperechicheievaloare.Valoareadinasociereesteaccesatdirect,folosindcheia,caunindexgeneralizat.

    2.Coleciileneliniareseclasificn:

    Coleciiierarhicencareelementelesuntpartiionatepeniveluri.Fiecareelementdepeunnivelaremaimulisuccesoripenivelulurmtor.

    Arboreleesteocolecieierarhicncaretoateelementeleemandintrosingursurs numit rdcinaarborelui.Elementelearboreluisenumescnoduriifiecarenodiindicdescendenii(copiii).Fiecarenodareunpredecesorunic(exceptndrdcina).

    Arborele este structura ideal care descrie sistemul de fiiere cu directoare i subdirectoare, ca idiagrameledeorganizarealefirmelor.

    Oformspecialdearborearborelebinarimpunefiecruinodsaibcelmultdoidescendeni.Impunereaunei relaii deordine ntrecheileunuiarborebinardefinete arborelebinardecutare, ostructurdedateeficientpentrupstrareavolumelormaridedate.

    Heapulesteunarborespecial(arboreparialordonat)ncarecelmaimic(saucelmaimare)elementseafl ntotdeauna n rdcin. Folosirea unui heap permite sortarea unei liste printro metod foarteeficient(heapsort).

    10

  • Coleciigrupurisuntcoleciineliniarencareelementelenusuntordonatenniciunfel.Deexemplumulimeareprezintungrup.Operaiilespecificesunt:reuniunea,intersecia,diferena,testuldeapartenen,relaiadeincluziune.

    Un graf esteostructurdedatecaremodeleazrelaiilentreobiecteprindoumulimi:omulimedevrfuriiomulimedemuchiicareconecteazacestevrfuri.

    Grafurileauaplicaiinplanificarealucrrilor,problemedetransport,etc.Operaiispecificesunt:adaug/tergevrf,gsireavrfuriloraccesibile,porninddintrunanumitvrfiefectundoparcurgerespecific:nadncime,nlime,etc.

    Oreeaesteoformspecialdegraf,careasociazfiecreimuchiiuncost.

    Coleciileuzualesunt:tabelelededispersie,cozile,stivele,dicionarele,ilistele.

    b)Unicitateaelemetelordincolecie: Coleciicuelementedistincte:mulimea Coleciicuelementemultiple:lista

    c) Prezenasauabsenaunei"chei": Coleciicucheie dacopartedinelement(cheia)esterelevantpentruaccesullaunelementdin

    colecie.Cheilesecomparfolosindoperatorirelaionali. Coleciifrcheie

    d)Posibilitateadefiniriiuneirelaiideegalitatentrevalorileelementelorsauntrevalorilecheilor,deci auneioperaiidecutarencolecie: Pentru coleciile care au definit cheie, pentru tipul cheie trebuie s fie definit relaia de egalitate, colecia fiind cunoscut ca o colecie cu egalitate de chei. Coleciicuoperaiedeegalitatedou elemente din colecie sunt egale dac toatecomponentele lor sunt egale Coleciifroperaiideegalitate(secvenedeelemente)

    Coleciile pentru care nu este definit nici egalitatea de chei, nici de elemente (ca de exemplu secvena sau heap-ul) nu permit localizarea elementelor prin valoare sau prin testarea coninutului.e)Exisenauneirelaiideordinentreelemente:

    Colecii ordonate (sortate) cu elementele sortate printr-o relaie de ordine. De exemplu elemente iruri de caractere sortate lexicografic (alfabetic). Un element dintr-o colecie sortat poate fi accesat rapid, folosind relaia de ordine pentru a-i determina poziia. Coleciile neordonate pot fi i ele implementate astfel nct s permit acces rapid la elemente (de exemplu tabela de dispersie).

    Coleciineordonate ntre elementele crora nu exist nici o relaie de ordineDeobservatcnuoricetipdeelementeesteordonabil;deaceeaunadinproprietileunuicontainerpoatefisortabilitatealui.(Deexemplu,olistdefigurigeometricenuestesortabil).Ocoleciesortattrebuiesaibdefinitfieegalitateacheilor,fieaelementelor.In unele colecii liniare ca: mulimea, mulimea cu chei, dicionarul, etc nu pot exista dou elemente egale sau dou elemente cu chei egale. Asemenea colecii se numesc colecii unice.Alte colecii precum: grupul, grupul cu chei, relaia, heapul pot avea dou elemente egale sau dou elemente cu chei egale. Acestea reprezint colecii multiple.

    11

  • Nu exist o colecie unic, fr egalitate de chei i egalitate de elemente, deoarece pentru o asemenea colecie nu ar putea fi definit o funcie de apartenen.Dintre coleciile liniare cu acces restrictiv: stiva, coada i coada cu dou capete se bazeaz pe secven coadaprioritarsebazeazpegrupulcucheisortate

    f)Posibilitideacceslaelementelecoleciei: cuacceslaoriceelementdincolecie,pebazapoziieincolecie cuacceslaoriceelementdincolecie,pebazavaloriielementului cuacceslimitatlaprimuli/saulaultimulelementdincolecie

    g)Limitareanumruluideelementedincolecie: Coleciicudimensiunelimitat Coleciicudimensiunenelimitat

    h)Utilizareacoleciei: Coleciipentrumemorareatemporaraunordate(detipbuffer),careauunconinutfoartevolatil:

    stive,cozi,multimi,s.a. Coleciidecutare,cuunconinutmaistabilicu operaiifrecventedecutare: liste,dicionare,

    arbori,s.a.UneoriseconsidercoSDgeneralesteocoleciedenregistrri(structuri).PentruSDabstracte folosite ncutare se evideniaz un cmpdiscriminant, folosit la identificarea unic afiecrei nregistrri i numit cheie (Key)sau cheiedecutare (SearchKey). Cheiapoatefi i ocombinaieadoucmpuridinnregistrare(deex.concatenareaadouiruri,cumarfinumeleiprenumele).

    i)Naturaelementelorcomponente: Ocoleciedirectconinechiardateleaplicaiei,toatecomponentelesuntdeunacelaitip,decieste

    ocolecieomogen. Uncolecie indirect coninepointeri (adrese) ladatealocatedinamic, datecarepot fi de tipuri

    diferite,deciocolecieeterogendedate.

    Utilizareacoleciloriindirectesejustificprin:a) economiadememoriencazulcelementelesuntiruridecaracteredelungimefoartevariabil;b) economiadetimpdacobiectelememorateocupmultmemorie(structurimari),seevitoperaiile

    decopiereadatelorcaresenlocuiescprincopiereapointerilorc) reunireadedatediferite,cumarfiocoleciedefigurigeometriceceformeazmpreunundesen.d) Pentruaaveaun containergeneral,cupointerilauntipneprecizat,nlocuiiulteriorcupointerila

    tipuriprecise,necesareaplicaiei.Aceastaestesoluiedeaaveaobibliotecdesubprogramegeneralepentruoperaii custructuri de date uzuale, nainte deapariia claselor derivate i de introducereatipurilorparametrizate(saugenerice)nC++(template).

    Criteriidealegereacoleciei.

    Laalegereatipuluicolecieiceleimaiadecvatepentrurezolvareauneiproblemeseconsiderurmtoarelecriterii: Cumsuntaccesatevalorile?Dacesteimportantaccesuldirect,atuncisefolosesccoleciilevectorsaucoadcudoucapete.Dacvalorilesuntaccesateconformuneirelaiideordonare,atuncisefolosetemulimeaordonat.

    12

  • Incazcestesuficientaccesulsecvenialatuncisuntpotrivite:listaivariantelecuaccesrestrns:stivaicoada. Esteimportantordineancaresepstreazvalorilencolecie?Dacordonareaesteimportant,atuncisefolosetemulimeaordonat.Deasemeneapotfifolositelistasauvectorul,lacaresortareassefacadupunnumrdeinserari.Incazcprezintimportanordineancaresefacinserrilesevafolosiostivsauocoad. Dimensiuneacolecieisemodificnlimitelargintimpulexecuiei?Incazafirmativ,ceamaibunselecieoreprezintlista.Incazcdimensiuneacolecieiesterelativstabilasefolosetevectorulsaucoadacudoucapete. Esteposibilestimareadimensiuniicoleciei?Coleciavectornepermite,nacestcazsalocmunblocdememoriededimensiunedata. Reprezinttestuldeapartenenooperaiefrecvent?Incazafirmativsefolosescmulimeasaudicionarul. Estecoleciaindexat(poatefivzutcaoseriedeperechicheievaloare)?Daccheilesuntntregisefolosescvectorulsaucoadacudoucapete.Daccheilereprezintnumaivaloriordonate,atuncidicionarulreprezintseleciapotrivit. Potficomparatevaloriledincolecientreele?Dacvalorilenupotficomparatefolosindoperatorulrelaional
  • Inmodideal proiectul unei aplicaii este gndit nstructuri de dateabstracte i nmodule program(funcii)caretraducunanumitalgoritm.

    Ostructurdedateabstractpoatefimaterializatprindiferitestructuridedateconcrete.Alegereauneiimplementridintreceleposibileseface,teoretic,dupperformanelerelativealefiecreiSDconcrete(funciededimensiuneacolecieidedate).

    Multelucrriprezintasemeneaformuledecalculpentru timpulmediu (sau timpulmaxim)decutarentrostructursaualta. Deexemplu,timpulmediudecutarentrunvectorneordonatsauntrolist(ordonat sau neordonat) este de ordinul N/2, iar timpul maxim este de ordinul N, unde N estedimensiuneavectorului(listei).Timpulmediudecutarentrunarborebinarordonatechilibratsauntrunvectorordonatdupcheiledecutareestedeordinullog2(N).Pentrualtestructuridedate(deex.tabeldedispersie)timpuldecutareestemaigreudeestimat,pentrucdepindeidealifactori.Trebuiespustotuicdimensiunearelativmicacoleciilordedatedinmemoriainterncombinatcuviteza mare de calcul a procesoarelor actuale i cu durata mic a operaiilor elementare (de obiceicomparaii iincrementri)faccadiferenaabsolutdetimpntreutilizareaunor SDdiferitesfiedemulteorinesemnificativ,relativilaalitimpi(calculecunumerereale,operaiicufiieredisc,s.a.).Deaceea, npractic poate fi mai important simplitateai lungimeasubprogramelorcare realizeazoperaiilecuSDrespectiv,sauposibilitateadereutilizareaunorsubprogrameexistente.

    Pedealtparte,ncazulcoleciilordedatememoratepedisc(fiiere,bazededate),timpulmaredeaccesla disc i dimensiunea mai mare a coleciilor de date fac ca aceste estimri de performane s fieimportante,iardiferenadintrediferitesoluiideorganizare(structurare)acolecieidedatesfiemaiimportantpentruperformaneledeansamblualeaplicaiei.EficienaalegeriiuneiSDnusereduceladurataoperaiilordeprelucrareciilamemoriaocupat(cuadresedelegtur,informaiiasociateblocuriloralocatedinamicsaualteinformaiiauxiliare).Alegereantreostructurcupointeriiostructurvectordepindede: Lungimeavariabilelorpointeridimensiuneadateloraplicaiei. Numruldecoleciidedimensiunevariabiliposibilitateadeestimareadimensiuniimaximepentru

    acestecolecii.Deexemplu,ostivvectorestepreferabilatuncicndnumruldeelementepusenstivpoatefiestimatdestuldecorectsaunupoatefifoartemare,cancazulgenerriisauinterpretriiexpresiilorpostfixate.

    14

  • Complexitateaalgoritmilor.Calitatea unui program depinde de corectitudine, comoditatea interfeei cu utilizatorul, uurinantreinerii,robusteeainunultimulrndeficiena.

    Eficiena unuialgoritmcaracterizeazresurseleconsumatedealgoritmlaexecuie(timpdeexecuieeficienatimpuluiimemorieconsumateficienaspaiului).Exprimareatimpuluideexecuienunitidetimpnuestesemnificativ,deoarecesarreferimaimultlaperformanele calculatorului dect la cele ale algoritmului. Chiar dac se are n vedere un singurcalculator, se pot obine performane diferite folosind compilatoare diferite pentru acelai limbaj deprogramare.

    Notaiiasimptotice.

    Analizaalgoritmic(numitianalizasimptotic)caracterizeazcomportarealaexecuieaalgoritmuluiindependentdeplatform,compilatorsaulimbajdeprogramare.

    Din acest punct de vedere, exprimarea numrului de operaii elementare funcie de dimensiuneaproblemei(volumuldatelordeintrare)caracterizeazcelmaibinecomplexitateaalgoritmului.

    nop=T(N)FunciaTpoatefi:

    constant: T(N)=c0 liniar T(N)=c0N+c1 ptratic: T(N)=c0N2+c1N+c2 polinomial: T(N)=c0Np++cp, p>2 exponenial: T(N)=c0an, a>1VomspunecfunciadecostT(N)estedominatdefunciaf(N),dacexistoconstantpozitivcastfelnct:

    T(N) c.f(N)DominanaasimptoticpresupuneexistenaconstantelorpozitiveciN0a..:

    T(N) c.f(N) pentruN N0PentrudoufunciinenegativeTi f,spunemc Testedeordinulluif,dacinumaidac fdominasimptoticpeTivomnotaaceastaprin:

    T=O(f)

    Pentrudimensiunimarialeproblemei(Nmare),nformapolinomialtermenulc0Npestepredominantnraportcuceilali,carepotfineglijai.

    PentruexprimareacomplexitiiunuialgoritmseutilizeaznotaiaO.Prindefiniie:

    T(N)=O(f(N))dacN0N*,c>0,a..N N0,:T(N)0,a..N N0,:T(N)>c*f(N)T(N)= (f(N))dacN0N*,c1,c2>0a..N N0,:c1f(N)

  • Constantac0influieneazmaipuincretereatimpuluideexecuiedectgradulpolinomuluip,motivpentrucarenumaiaparenexpresiacomplexitiialgoritmului.

    NotaiaOdoestimarealimiteisuperioareacomplexitiialgoritmuluiT(N),iar oestimarealimiteiinferioare.

    PentruestimareacomplexitiifolosindnotaiaOvomfolosiproprietile:

    O(c*f)=O(f)

    O(f*g)=O(f)*O(g)O(f/g)=O(f)/O(g)

    O(f+g)=Max[O(g),O(g)]

    O(f) O(g)dacinumaidacfdominpegPentru a aprecia influiena complexitii asupra timpului de execuie vom considera c o operaieelementardureaz106sec;nacestcazcomplexitateantimpvafipentruN=100:

    log2N 6.5/106=6.5*106secN 102/106=104sec

    Nlog2N 6.5*102/106=6.5*104secN2 104/106=102sec

    N3 106/106=1sec

    2N 2100/106sec 1024sec 3.1014secole

    Cretereraperformanelorcalculatoruluinusereflectnaceeaimsurasupraalgoritmuluirezolvat,ciestedependentdecomplexitateaalgoritmului:

    Astfeldaccretereavitezeicalculatoruluiestede103

    Complexitateaalgoritmului Cretereaperformaneloralgoritmului

    N 1000ori

    Nlog2N 140ori

    N2 31ori

    N3 10ori

    2N +10intrri

    3N +6intrri

    Complexitateaalgoritmuluiestedependentdeconfiguraiadatelordeintrare.Seintroducnoiuniledeceamaibuncomportareaalgoritmului, comportarenmedieaalgoritmuluii comportarensituaiaceamainefavorabil.Astfelceamaibuncomportareaalgoritmuluidecutaresecvenialcorespundegsiriivaloriicutateduposingurcomparaie;comportareansituaiaceamainefavorabilcorespundegsiriivaloriinultimapoziie,avndcomplexitateaO(N).

    Evaluarea comportrii n medie a unui algoritm se face mai greu deoarece trebuiesc consideratedistribuiilestatisticealedatelordeintrare.Incazulcutriisecvenialeaceastaeste:

    (1+2++N)/N=(N+1)/2=O(N)

    Evaluarea comportrii medii a unui grup de operaii (analiza amortizat) poate conduce la costurirezonabile,chiardacunadintreoperaiilegrupuluiestecostisitoare.

    Analizaalgoritmicareanumitelimitriianume: pentrualgorimicomplicaianalizaOpoatefiimposibilderealizat

    16

  • estedificildeterminareacazuluitipic analizaOesteomsurgrosier,carenupoatesurprindemicilediferenedintrealgoritmi analizaOnuesteconcludentpentruvolumemicialedatelordeintrare

    AstfelfunciiledecostT1(N)=10-3NiT2(N)=103NauambelecomplexitateaO(N)deiprimaestedeunmiliondeorimairapiddectceadeadoua.Funcia de cost T(N)=105N5 +103N4 are complexitate O(N5) numai cndprimul termenestepredominant,ceeacecorespundeluiN>108;pentruN Stiva modificatori: push: Stiva x Elem -> Stivapop: Stiva -/-> Stiva

    accesori:top: Stiva -/-> ElemisEmpty: Stiva -> boolean destructor:delete: Stiva ->- Semantici (axiome): top(push(S,x))=xpop(push(S,x))=S

    isEmpty(new())=trueisEmpty(push(S,x))=false- Precondiii: pop(S):not Empty(S)top(S): not Empty(S)

    Operaiile top(new()) i pop(new()) sunt incorecte. Dac argumentul este o stiv vid, operaiile top i pop sunt nedefinite. Un invariant al unei instane a unui TAD este o proprietate care se pstreaz ntre operaiile instanei Stpnirea aplicaiilor complexe se obine prin descompunerea n module. Un modul trebuie s fie simplu, cu complexitatea ascuns n interiorul lui. Modulele au o interfa simpl care permite folosirea, fr a cunoate implementareaIn C, se separ:implementarea modulului TAD ntr-un fiier .c care conine structura concret i definiiile funcilor, interfaa modulului, ntr-un fiier .h care conine definiri de tipuri i prototipurile funciilor exportate.

    Exemplu-structuri de date i algoritmi eficieni i siguri-implementare convenabil -ntreinere simpl-ndeplinirea obiectivelor urmrite-folosirea TAD fr efortul nelegerii detaliilor interne-s dispun de un set suficient de operaiiDescrierea interfeei formeaz un contract client-furnizor care:-d responsabilitile clientului. care trebuie s respecte precondiiile

    Criteriile de proiectare ale interfeelor Tipurilor Abstracte de Date- coeziune: toate operaiile trebuie s serveasc unei singure destinaii (s descrie o singur abstractizare)- simplitate: se evit facilitile care nu sunt necesare (o interfa mai mic este mai uor de folosit)- lipsa redundanei: se ofer un serviciu o singur dat- atomicitate: nu se combin operaiile necesare n mod individual. Operaiile trebuie s fie primitive, neputnd fi descompuse n alte operaii ale interfeei.- completitudine: toate operaiile primitive trebuie s asigure total abstractizarea- consisten: operaiile trebuie s fie consistente privind conveniile de nume, folosirea argumentelor i valorilor ntoarse- refolosire: TAD suficient de generale pentru a fi refolosite n contexte diferite- robustee la modificare: interfaa s rmn stabil chiar dac implementarea TAD se modific - comoditate: se prevd operaii suplimentare fa de setul complet care s asigure o funcionare comodAlocarea dinamic de memorie pentru o colecie se face:secvenial, printr-o zon de memorie contigu (tablou), alocat la crearea coleciei. Aceast zon poate fi realocat, dar operaia este costisitoare i se folosete rar.nlnuit, cu alocare dinamic pentru fiecare element nou adugat coleciei.Pentru dimensiuni mari ale problemei (N mare), n forma polinomial termenul c0Np este predominant n raport cu ceilali, care pot fi neglijai.Constanta c0 influieneaz mai puin creterea timpului de execuie dect gradul polinomului p, motiv pentru care nu mai apare n expresia complexitii algoritmului.