-
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.