C1-Colectii de Date
-
Upload
leslie-nelson -
Category
Documents
-
view
246 -
download
3
description
Transcript of C1-Colectii de Date
-
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.