Sunteți pe pagina 1din 21

Organizarea i structurarea datelor

2-1

Capitolul 2: Organizarea i structurarea datelor


2.1 Date elementare i structuri de date
Data - desemneaz un model de reprezentare a informaiei accesibil unui procesor (om, unitate central, program) model cu care se poate opera pentru a obine noi informaii despre fenomene, procese, obiecte. Data elementar sau scalar - este o dat care apare ca o entitate indivizibil, att n raport cu informaia pe care o reprezint, ct i n raport cu procesorul care o prelucreaz. Data scalar poate fi privit ca model de reprezentare a informaiei: la nivelul unui procesor uman - nivel logic la nivelul calculatorului ca procesor - nivel fizic Din punct de vedere logic, data scalar poate fi definit ca un triplet de forma: <identificator, atribute, valori>. Din punct de vedere fizic (al reprezentrii interne) modelul corespunztor este o zon de memorie de o anumit mrime, situat la o anumit adres absolut, n care sunt memorate, n timp i ntr-o form specific, valorile datei. Identificatorul este un simbol (nume) care se asociaz datei scalare, pentru a o distinge de alte date i a o putea referi n procesele de prelucrare. Valorile datei pot fi numere reale, complexe, valori de adevr, iruri de caractere etc., care se pot preciza prin enumerare sau printr-o proprietate comun. Dac pe parcursul procesului de prelucrare data pstreaz aceeai valoare, ea este o dat constant, n caz contrar este o dat variabil. Atributele precizeaz proprieti ale datei i determin modul n care aceasta va fi tratat n procesul de prelucrare. Dintre atributele ce se pot asocia unei date sunt: atributele de tip, precizia reprezentrii interne, valoarea iniial, modul de alocare a memoriei pe parcursul prelucrrii (static, dinamic) etc. n majoritatea aplicaiilor datele se prezint sub forma unor mulimi sau colecii, a cror prelucrare nu poate fi conceput fr o organizare corespunztoare. ntre elementele unei colecii de date pot fi identificate i/sau introduse relaii care s determine pe mulimea respectiv o anumit structur. Natura relaiei poate diferi n funcie de nivele de abstractizare, putnd fi o relaie de ordine n mulimea elementelor coleciei, o relaie ce descrie mecanismul de acces la memorie. n acest mod se obine tipul de dat structurat sau structura de date. Structurile de date sunt colecii de date pe care s-a definit o structur i creia i este specific un anumit mecanism de selecie i identificare a componentelor; o structur de date este o entitate de sinestttoare, individualizabil prin nume, ale crei componente i menin proprietile. Componentele unei structuri de date pot fi individualizate i selectate prin nume (identificatori) sau prin poziia ce o ocup n structur conform cu relaia de ordine specificat. Structurile de date pot fi clasificate dup mai multe criterii: a. dup modul de selectare a componentelor, sunt: cu acces direct atunci cnd o component poate fi selectat fr a ine seama de celelalte componente ale structurii cu acces secvenial atunci cnd localizarea unui element se face printr-un proces de parcurgere a mai multor componente, conform cu ordinea acestora. Structura de date poate fi creat pentru memoria intern sau pentru un suport extern de memorie. b. dup suportul de memorie pe care se creeaz structura de date : structuri de date interne (ir, masiv, nregistrare, liste, arbori)

2-2 structuri de date externe (fiiere, baze de date)

Organizarea i structurarea datelor

Operaiile (operatorii) aplicate asupra elementelor unei structuri de date pot s afecteze valorile i/sau structura. c. dup variabilitatea structurii se pot considera: structuri de date dinamice, care i modific pe parcursul prelucrrii structura structuri de date statice, care pe tot parcursul existenei au acelai numr de componente i n aceeai ordine Structurile dinamice la rndul lor pot fi: cu cardinalitate finit, dac au un numr limitat de componente cu cardinalitate infinit, dac numrul de componente este nelimitat Asupra structurilor de date se pot efectua operaii care se refer la valorile elementelor i/sau la structur. Cele mai utilizate operaii sunt: crearea, adic memorarea structurii de date pe suportul de memorie; consultarea - accesul la elementele structurii pentru prelucrarea valorilor acestora actualizarea - schimbarea strii structurii prin adugarea, inserarea de noi elemente, tergerea elementelor, modificarea valorilor unor elemente sortarea - aranjarea elementelor dup anumite criterii ventilarea - desfacerea unei structuri n dou sau mai multe pri, conform unor criterii fuzionarea - combinarea a dou sau mai multe structuri ordonate ntr-o singur structur copierea - realizarea unei copii a structurii pe alt suport Operaiile la care este supus o structur de date n procesul prelucrrii i eficiena cu care se realizeaz aceste operaii depind de natura relaiilor de ordonare i de modul de materializare a acestor structuri pe supori de memorie. Apare deci evident necesitatea de definire a structurii logice (mod de ordonare, operatori de tratare), ct i a modului n care aceasta va fi implementat fizic (reprezentarea pe suport) ca aspecte ce se condiioneaz reciproc i sunt subordonate scopului urmrit prin prelucrarea datelor. Din acest motiv, n procesul de prelucrare organizarea i structurarea datelor presupune realizarea unui complex de activiti, care s asigure adecvarea structurilor rezultate la natura aplicaiilor concrete, i care sunt: identificarea, clasificarea i descrierea proprietilor datelor aplicaiei gruparea datelor n colecii stabilirea structurilor adecvate de date necesare prelucrrilor precizarea modalitilor de reprezentare pe supori de memorie definirea i realizarea procedurilor de prelucrare corespunztoare La orice nivel de abstractizare rezolvarea unei probleme, utiliznd calculatorul electronic, implic att date elementare, ct i date structurate, n sensul celor de mai sus. Componentele unei structuri de date pot fi date elementare sau la rndul lor structuri de date. n general, un tip de dat este o algebr T = (v, o), unde v este mulimea de valori i o este o mulime de operatori definii pe aceste valori. De exemplu, tipul de dat INTEGER este definit de perechea (Z, {+, , *, /}), unde Z este mulimea numerelor ntregi, iar {+, , *, /} este mulimea operatorilor. Principalele tipuri de date elementare sunt: tipul numeric, care include numere ntregi, reale, complexe (D,{ +, -, *, / }), D{Z, R, C} tipul logic (boolean): ({adevrat, fals}, {AND, OR, NOT}) tipul caracter: ({ succesiune finit de caractere}, {concatenare, ordonare etc.}) tipul pointer, date elementare ale cror valori sunt adrese, referine pentru alte date (N, {+, -}). n mod analog, dac se grupeaz mpreun date structurate i se nzestreaz aceast mulime cu anumite operaii, atunci se obine un tip de dat structurat sau un tip de structur de date. Un tip de

Organizarea i structurarea datelor

2-3

dat structurat este deci o mulime ordonat de date (elementare sau structuri de date) pe care s-a definit un grup de operatori de baz cu o anumit semantic. Principalele tipuri de structuri de date pentru memoria intern sunt: irul, masivul, nregistrarea, listele liniare, arborii de date, reele, iar pentru memoria extern sunt: fiierele i bazele de date.

2.2 Organizarea i prelucrarea datelor n memoria intern


Organizarea datelor este un proces complex care presupune identificarea, clasificarea i descrierea proprietilor acestora (statice, dinamice), gruparea lor n colecii, stabilirea structurilor adecvate de date, precizarea modalitilor de reprezentare pe supori de memorie, definirea i realizarea procedurilor corespunztoare de prelucrare. Definirea structurilor de date se bazeaz, n majoritatea aplicaiilor, pe structurile liniare, arborescente i de tip reea. Acestea sunt considerate ca structuri de baz, deoarece, prin combinarea lor convenabil, se pot construi structuri orict de complexe.

2.2.1 Tipuri de date n memoria intern


irul este o succesiune ordonat de elemente, care aparin unei mulimi de simboluri elementare. Lungimea irului este dat de numrul de caractere constitutive iar tipul irului este determinat de tipul simbolurilor elementare cruia i aparin elementele irului. nregistrarea (articolul) este o structur de date eterogen, static i cu cardinalitate finit. Componentele structurii, numite cmpuri, sunt individualizate prin nume iar relaia de ordine ierarhic este precizat prin numere de nivel. Cmpurile pot fi date elementare sau pot fi la rndul lor structuri de date numite, uneori, date de grup. O nregistrare are structura de arbore ordonat i stratificat n care cmpurile sunt componentele arborelui. Cmpurile din nodurile terminale sunt date elementare, iar datele de grup sunt constituite din cmpurile subarborelui respectiv. (fig. 2.1)
STOC

COD

DEN

INTRARI

IESIRI

IAN

FEB

MAR

IAN

FEB

MAR

8 A 4 H A R

T I

8 9

3 0 0

1 9

2 8

INTRARI

IESIRE

IAN

FEB MAR

IAN

FEB MAR

Fig. 2.1 nregistrarea

n memoria intern, reprezentarea se realizeaz prin liniarizare ntr-o zon compact astfel nct pentru orice subarbore componentele sale s se gseasc n poziii adiacente. Masivul (tabloul) este o structur intern cu cardinalitate finit, de date omogene. Relaia de structur este liniar, static i se d prin intermediul unei funcii bijective M definit pe mulimea de indexare I i cu valori n mulimea D a componentelor masivului: M : I D. Dac i I atunci M(i) este un element unic determinat din D. Dup modul de definire rezult c masivele sunt structuri cu acces direct.

2-4

Organizarea i structurarea datelor

Prin indexare se consider c I este produsul cartezian a K segmente de numere naturale de forma [1,nk] iar funcia M se spune c determin pe D un masiv k-dimensional n care fiecare element se identific prin M(i1,i2,...ik). n memoria intern masivele se reprezint sub form liniar. Liniarizarea se obine printr-o funcie injectiv f:IN, adresa fiecrui element fiind determinat relativ la nceputul zonei i pe baza unei deplasri pe care o d rangul elementului. De exemplu, pentru o matrice M cu n linii i m coloane, liniarizat pe coloane, locul elementului M(i,j) este dat de relaia f(i,j) = m * (j-1) + i iar deplasarea necesar n calculul adresei este d(i,j) = (f(i,j) - 1) * L unde L este lungimea zonei unui element. Liste liniare Prin list-liniar nelegem un ir de elemente n care distingem un prim i un ultim element, fiecare element n afar de acestea avnd unic determinate un element care l precede i unul care i succede; primul element are un unic element care i succede iar ultimul element are un unic element care l precede. Cele dou capete ale listei se numesc baz respectiv vrf. Listele sunt structuri de date liniare, dinamice, recursive, cu componente omogene sau eterogene. Ca secvene finite de elemente, componentele pot fi date elementare sau date structurate. Pentru definirea listelor liniare i a relaiilor de ordonare liniar sunt folosite variabile pointer, astfel nct elementele listei apar ca perechi sau triplete care, n afara elementului de dat conin referine ce indic locul succesorului, respectiv locul succesorului i predecesorului. Astfel, dac D = { di | 1 i n} este mulimea datelor i P = N { } este mulimea pointerilor n care desemneaz o valoare special (pointer nul) se pot defini mulimile: La = { <di,si> | di D; si P} Ls = { <pi,di,si> | diD; pi, si P} Fie o funcie injectiv fa : N La care asociaz unui numr k N un fa(k) = <di,si>k numit locul elementului considerat. Cu aceste notaii: mulimea La este o list asimetric dac sunt satisfcute urmtoarele condiii: (1) exist <d1,s1> unic, denumit baz sau element de nceput al listei (2) exist <dn,> unic denumit vrf sau element de sfrit al listei (3) oricare ar fi <di,si>k cu proprietatea c <di,si>k <d1,s1> i <di,si>k <dn, >, exist unic <dj,sj>m i unic <dl,sl>r astfel nct sj = k i si = r. Observaie: lista se numete asimetric sau list simplu-nlnuit deoarece pentru fiecare element se cunoate numai succesorul imediat. Fie funcia injectiv fs : N => Ls care asociaz unui k N un fs(k) = <pi,di,si>k numit locul elementului considerat. mulimea Ls este o list simetric dac: (1) exist < ,d1,s1> unic , denumit baz sau element de nceput al listei (2) exist <pn, dn, > unic denumit vrf sau element de sfrit (3) oricare ar fi < pi,di,si>k cu proprietatea c <pi,di,si>k < ,d1,s1> i < pi,di,si>k <pn,dn,>, exist unic <pj,dj,sj>m i unic <pl,dl,sl>r astfel nct pi = m i si = r. Observaie: lista se numete simetric sau dublu-nlnuit, deoarece fiind dat un element, de la acesta se pot gsi att predecesorul ct i succesorul su. Conform acestor definiii se pot face urmtoarele consideraii:

Organizarea i structurarea datelor

2-5

dac pentru o list asimetric si = i+1 pentru i n nseamn c succesorul imediat al elementului <di,si> este amplasat adiacent; lista se numete list dens i informaia de legtur este superflu; de asemenea, pentru listele dense, se spune c structura este implicit. dac pentru o list simetric si =i+1 pentru in i pi = i-1 pentru i 1 lista se numete list dens i informaia de legtur este superflu; ca i n cazul precedent, structura este implicit. n caz contrar, informaia de legtur este necesar, i att lista simetric ct i cea asimetric sunt o liste dispersate, cu structur explicit. Tipuri de liste liniare, considerate dup eficiena realizrii operaiilor sau dup specializarea anumitor operaii: Stiva sau lista LIFO (Last In First Out) este o list asimetric pentru care adugarea, tergerea i consultarea se fac la un singur capt, respectiv la sfritul ei. Coada sau lista FIFO (First In First Out) este o list asimetric la care operaiile de consultare i tergere se realizeaz la nceputul listei, iar operaia de adugare la sfritul listei. Decoada este o list simetric pentru care operaiile de adugare, consultare i tergere se fac att la nceputul, ct i la sfritul listei. Aceast list se mai numete i coad dubl. Lista circular este o list n care se modific modul de nlnuire punnd la partea de legtur a ultimului element adresa primului element. Deoarece la aceste liste dispare distincia dintre primul i ultimul element, se introduce un element special, numit cap de list, care nu conine date. Capul de list devine prim i ultim element i asigur posibilitatea de a parcurge lista n ambele sensuri. Lista circular dublu-nlnuit mbin calitile listelor precedente. Reprezentarea listelor liniare pe suportul de memorie, pornind de la definirea implicit sau explicit a acestor structuri, se poate face in mai multe moduri: Reprezentarea secvenial continu Reprezentarea dispersat Alocarea (repezentarea) secvenial const n a memora elementele listei n locaii succesive de memorie, conform ordinii acestor elemente din list; n acelai timp se memoreaz adresa de baz (adresa primului element). Alocarea (reprezentarea) dispersat presupune ca fiecare element s fie nlocuit cu o celul de forma | INF | LEG | n care INF este partea de informaie a elementului iar LEG este partea de legtur ce conine adresa urmtorului element din list. Partea de legtur a ultimei celule este pus pe valoarea (-1). Alocarea dublu nlnuit difer de cea dispersat (nlnuit) prin structura unei celule care este n acest caz | LEG1 | INF | LEG2 | unde LEG1 d adresa celulei din stnga, LEG2 furnizeaz adresa celulei din dreapta iar INF este partea de informaie. Fiecare dintre reprezentrile de mai sus prezint anumite avantaje i dezavantaje: reprezentarea dispersat necesit spaiu suplimentar de memorie fa de cea secvenial continu, dar permite realizarea cu uurin a operaiilor de adugare i tergere prin modificarea legturilor. reprezentarea dispersat permite realizarea unor structuri de date complexe, elementele unei liste fiind la rndul lor liste; pe liste nenlnuite se realizeaz mai uor operaiile de desfacere n pri (subliste) i de concatenare a mai multor liste reprezentarea dispersat permite folosirea unui spaiu de memorare comun pentru mai multe liste ceea ce implica o economie de memorie avnd in vedere diferitele operaii de introducere/scoatere din lista. reprezentarea dublu nlnuit necesita un spaiu de memorie mai mare dar permite refacerea cu uurin a drumului invers de la un element oarecare la primul element.

2-6

Organizarea i structurarea datelor

Alegerea uneia sau alteia dintre metodele de reprezentare depinde de natura aplicaiei i trebuie s se bazeze pe analiza unor factori precum: tipul de lista, operaiile la care va fi supusa lista, caracteristicile suportului, faciliti de realizare a algoritmului etc. Arbori de date Arborii de date sunt structuri dinamice, cu ordine ierarhic, a cror structur este, n general, explicit ceea ce presupune includerea prin definiie a informaiilor de legtur. Un arbore binar este un arbore orientat n care fiecare vrf are maximum doi descendeni. Arborele binar n care orice vrf are 0 sau 2 descendeni se numete arbore binar complet. Un arbore oarecare sau arbore multici este un arbore pentru care cel putin un vrf are mai mult de 2 descendeni. Fiind dat mulimea A2 = {<pi, di, si> | di D; pi, si P} i funcia de localizare f : N => A2 i se are n vedere recursivitatea structurii ierarhice, atunci A2 este un arbore binar, dac: (1) exist <p1,d1,s1> unic, numit rdcina arborelui; (2) A2 {<p1,d1,s1>} = A2sA2d cu A2sA2d = unde A2s reprezint subarborele stng iar A2d subarborele drept (3) Dac A2s = => p1 = iar dac A2s => exist <pi,di,si> k unic n A2s astfel nct p1=k; elementul <pi,di,si> este succesor stnga pentru <p1,d1,s1> (4) Dac A2d = => s1 = iar dac A2d => exist <pr,dr,sr>j unic n A22 astfel nct s1=j; elementul <pr,dr,sr> este succesor dreapta pentru <p1,d1,s1> (5) A2s i A2d sunt de asemenea arbori binari Forme de reprezentare ale arborilor binari Avnd n vedere natura structurii, forma general de reprezentare a arborilor binari este dispersat i nlnuit. Modalitile de reprezentare a arborilor binari sunt: Reprezentarea grafic Prin ansambluri incluse Prin paranteze incluse Prin indentare Reprezentarea standard Reprezentarea tat Pentru a ilustra aceste tipuri de reprezentri vom considera un exemplu de arbore binar i vom pleca de la reprezentarea lui grafic (Fig. 2.2.a). Acestei reprezentri grafice i corespunde o form simplificat n care s-a pstrat doar numerotarea nodurilor (Fig. 2.2.b)
p1 d1 s1 p2 d2 s2 p8 d8 s8 p5 d5 s5 p9 d9 s9 4 p4 d4 s4 p6 d6 s6 p7 d7 s7 3 5 6 7 9 2 1 8

p3 d3 s3

(a)
Fig.2.2 Reprezentarea grafic

(b)

Organizarea i structurarea datelor Reprezentarea prin ansambluri incluse este prezentat n figura 2.3.:
A B C
D

2-7

E
G

Fig.2.3. Reprezentarea prin ansambluri incluse

Reprezentarea prin paranteze incluse se construiete astfel: expresia ncepe cu rdcina arborelui, iar fiecare vrf care are descendeni este urmat de expresiile ataate subarborilor care au ca rdcin descendenii vrfului, desprite ntre ele prin virgul i cuprinse ntre paranteze. De exemplu pentru arborele din fig.2.2 reprezentarea prin paranteze incluse este 1(2(3(4,),5(6,7)),8(,9)). Prin s-a notat referina nul, care corespunde lipsei unui descendent. Reprezentarea standard este cea n care pentru fiecare vrf i se precizeaz descendentul su stng ST(i), descendentul su drept DR(i). Lipsa unui descendent este marcat prin 0. Pentru exemplul din fig.2.2 reprezentarea standard este: RAD = 1 ST(i) = (2,3,4,0,6,0,0,0,0) DR(i) = (8,5,0,0,7,0,0,9,0) Reprezentarea tat este aceea prin care fiecrui vrf i se memoreaz nodul tat. Pentru arborele din fig. 2.2 avem vectorul TATA(i) = (0,1,2,3,2,5,5,1,8), unde 0 semnific lipsa tatlui. O problem important legat de arborii binari este problema parcurgerii vrfurilor lor. Exist trei metode principale i anume: preordine, inordine i postordine. Algoritmii de parcurgere a arborilor binari n cadrul algoritmilor se folosete reprezentarea standard a arborilor binari precum i urmtoarele notaii: V - vector cu n componente (n - numrul de vrfuri ale arborelui) care va juca rolul de stiv cu alocare secvenial. k - variabil n care se va memora numrul elementelor din stiv Parcurgerea n preordine nseamn vizitarea rdcinii, apoi a subarborelui din stnga i apoi a subarborelui din dreapta. Pentru arborele din figura 2.2.b., parcurgerea n preordine a vrfurilor este: 1,2,3,4,5,6,7,8,9. O procedur de parcurgere n preordine este urmtoarea:
Procedure Preordine (rad) i rad ; k 0 continuare DA while continuare = DA if i 0 then Prel (i); k k + 1; V(k) i; i ST(i) else if k = 0 then continuare = NU else i V(k); k k 1; i DR(i) end if end if end while return

2-8

Organizarea i structurarea datelor Parcurgerea n inordine const n vizitarea subarborelui stng, vizitarea rdcinii i apoi parcurgerea subarborelui drept. n exemplul considerat, avem urmtoarea ordine de parcurgere n inordine: 4,3,2,6,5,7,1,8,9. Procedura de parcurgere n inordine este:
Procedure Inordine (rad) i rad; k 0 continuare DA while continuare = DA if i 0 then k k + 1; V(k) i; i ST(i) else if k = 0 then continuare = NU else Prel (i); i V(k); k k 1; i DR(i) end if end if end while return

Parcurgerea n postordine se face prin vizitarea subarborelui stng, apoi a celui drept i apoi vizitarea rdcinii. n exemplul din fig. 2.2 avem urmtoarea ordine de parcurgere: 4,3,6,7,5,2,9,8,1. Procedura de parcurgere n postordine este urmtoarea:
Procedure Postordine (rad) i rad; k 0 cont_dr DA continuare DA while continuare = DA while ST(i)0 k k + 1; V(k) i; i ST(i) end while while cont_dr = DA while DR(i)0 k k + 1; V(k) i; i DR(i) while ST(i)0 k k + 1; V(k) i; i ST(i) end while end while scr INF(i) if k = 0 then continuare = NU else j i; i V(k); k k 1 end if while j ST(i) scr INF(i) if k = 0 then continuare = NU else j i; i V(k); k k 1 end if end while end while end while return

Observaie: operaia Scrie INF(i) se nlocuiete, dup caz, cu operaia care se efectueaz asupra informaiei coninute n vrfuri, atunci cnd parcurgem arborele. Arborii binari se pot utiliza i pentru descrierea i calculul expresilor aritmetice, caz n care rdcinile subarborilor se gsesc operatori aritmetici iar n nodurile terminale se gsesc datele utilizate n expresia aritmetic. Ca exemplu fie expresia (a + b)/ c - (d + e)f. Ea se poate reprezenta sub form de arbore aa cum se poate vedea n figura 2.4.

Organizarea i structurarea datelor


* c b d + e f

2-9

/ + a

Fig. 2.4 Arborele unei expresii

Rezultatul este valabil n general: parcurgerea n preordine a vrfurilor arborelui ataat unei expresii aritmetice produce la ieire scrierea polonez prefixat a expresiei, iar parcurgerea n postordine produce scrierea polonez postfixat a expresiei aritmetice, dup cum se poate verifica foarte uor. Arbori oarecare (generali) Un arbore oarecare este un arbore n care fiecare vrf conine mai mult de dou informaii de legtur (pointeri). Structurile multiplu nlnuite constituie o generalizare natural a noiunilor de list simplu i dublu nlnuit, utilizate pentru a reprezentarea arborilor oarecare. n fiecare celul sunt mai multe cmpuri folosite pentru referine de legtur cu alte celule. S considerm un arbore i s folosim pentru reprezentarea lui dou tabele: T1-care conine pentru fiecare nivel, adresa celulei corespunztoare primului vrf de pe acel nivel; T2-n care fiecare celul are forma INFO, PRED, SUC, URM unde INFO este informaia ataat vrfului, PRED reprezint adresa predecesorului vrfului, SUC este adresa primului (celui mai din stnga) descendent al vrfului iar URM este adresa urmtorului vrf de pe acelai nivel care este tot descendent al lui PRED. Pentru arborele din fig. 2.5.a. tabelele T1 i T2 sunt prezentate n fig.2.5.b.:
1

Nivel Nivel Nivel


2 7 G 8 H 9

A 3

C 4

6 D

Fig. 2.5 Arbore

Tabel T1 Nivel Nr.nod 1 1 2 7 3 2

Nr.nod 1 2 3 4 5 6 7 8 9

Tabel T2 INFO A B C D E F G H I

PRED 0 7 1 3 3 1 1 7 3

SUC 7 0 9 0 0 0 2 0 0

URM 0 8 6 0 4 0 3 0 5

Fig 2.5.b. Tabele T1 i T2

Vom observa, de exemplu, c celula 7 din T2 conine referiri la celulele 1,2,3 care i succed n trei liste diferite.

2-10 Reprezentarea i parcurgerea arborilor oarecare

Organizarea i structurarea datelor

Reprezentarea arborilor oarecare cu ajutorul legturilor FIU-FRATE se realizeaz n felul urmtor: Pentru fiecare vrf i se memoreaz urmtoarele dou informaii: - FIU(i) primul dintre descendenii vrfului i (se presupune existena unei ordini ntre descendenii acestui vrf) - FRATE(i) descendentul tatlui lui i , descendent care urmeaz imediat lui i Lipsa fiului sau a fratelui se noteaz cu 0 De exemplu arborele oarecare reprezentat grafic n figura 2.6.a i corespunde reprezentarea FIUFRATE din figura 2.6.b.:
1

i FIU(I)
4

1 2 0

2 5 3

3 6 4
(b)

4 0 0

5 0 0

6 0 7

7 0 0

FRATE(I)

6 (a)

Fiecrui arbore general i se poate ataa un arbore binar identificnd FIU(i) cu ST(i) i FRATE(i) cu DR(i) (reprezentarea standard a arborilor binari), corespondena fiind biunivoc. Pentru arborele din figura 2.6, arborele binar corespunztor este cel din figura 2.7.
1 2

Fig. 2.6. Reprezentarea FIU-FRATE

6 7

Fig. 2.7. Arborele binar

Corespondena de mai sus reduce parcurgerea arborilor oarecare la parcurgerea arborilor binari: Preordine : 1, 2, 5, 3, 6, 7, 4 Inordine : 5, 2, 6, 7, 3, 4, 1 Postordine: 5, 7, 6, 4, 3, 2, 1 Reprezentarea cu ajutorul legturilor TAT. Se memoreaz pentru fiecare vrf i tatl su TAT(i). n exemplul de mai sus, reprezentarea este TATA(i) = (0,1,2,3,2,3,6). Reprezentarea prin lista de descendeni Pentru fiecare vrf se formeaz o list a descendenilor si, astfel: Fie N - numrul de vrfuri din arbore, INF - vector cu N componente n care se memoreaz informaia coninut n vrfuri, CAP - vector cu N componente, M - matrice cu 2 linii i N-1 coloane n care se memoreaz listele descendenilor vrfurilor, folosind alocarea nlnuit Pentru fiecare vrf i: M(1,i) reprezint un descendent al vrfului, M(2,i) reprezint numrul coloanei n care se va pune urmtorul descendent al vrfului i sau 0 dac nu exist un alt descendent. n acest ultim caz n coloana i+1 se va introduce primul descendent al vrfului i+1. Procedeul se repet pn se completeaz matricea M. CAP(i) conine numrul coloanei din matricea M la care se gsete primul descendent al vrfului i sau 0 dac vrful i este vrf terminal

Organizarea i structurarea datelor De exemplu fie arborele oarecare din figura 2.8:
1

2-11

Vrfurile arborelui au urmtorii descendeni: Vrf 1: descendeni 2, 3, 4 Vrf 2: descendent 5 Vrf 3: descendeni 5, 6 Vrfurile 4, 5, 6, 7 nu au descendeni

Fig. 2.8 Arbore oarecare

Matricea M va fi: coloana 1 M (1,i) 2 M(2,i) 2 iar vectorul CAP(i): Vrf i 1 CAP(i) 1

2 3 3 2 4

3 4 0 3 5

4 5 0 4 0

5 6 6 5 0

6 7 0 6 0 7 0

Metode de parcurgere a unui arbore oarecare Aceste metode presupun o ordine bine stabilit de parcurgere a vrfurilor unui arbore oarecare.

Metoda A preordine Se viziteaz rdcina apoi n ordine, subarborii care au ca rdcin descendenii si. Pentru arborele din figura 2.9. parcurgerea n A-preordine este: 1, 2, 5, 3, 6, 7, 4
1

Fig. 2.9. Parcurgerea n A-preordine

Algoritmul de parcurgere n A-preordine folosete reprezentarea prin list de descendeni. Se folosesc urmtoarele notaii: Vectorul CAP(i), matricea M, S - stiv care va conine perechi ( i, j ), unde i = numrul nodului curent, j = fratele urmtor al lui i (numrul coloanei din M care conine urmtorul descendent al tatlui vrfului i) sau 0 dac nu mai exist frai, adic exist un k cu M(1,k )= i, M(2,k)=j , procedura Visit(i) n care se prelucreaz informaia din vrful i.
Procedure APRE(CAP, M, N, RD) Integer CAP(N), M(2,N-1), RD STACK S i RD; j 0; S 0 do while CAP(i) 0 /* att timp ct exist descendeni ai vrfului i */ Call Visit(i) /* se prelucreaz informaia din vrful i */ (i,j)S /* se reine i i j n stiv */ j M(2, CAP(i)) /* se preia n j coloana din M n care se gsete urmtorul frate al lui i */ i M(1, CAP(i)) /* se preia n i descendentul lui i */

2-12
repeat Call Visit(i) while j = 0 / * adic FRATE(i) = 0 * / if S = 0 then return else (i,j) S endif repeat i M(1, j) j M(2, j) repeat end

Organizarea i structurarea datelor

Metoda A postordine

Se viziteaz subarborii avnd ca rdcini descendenii rdcinii arborelui, apoi rdcina arborelui. Pentru arborele din figura 2.9. parcurgerea n A- postordine este: 5, 2, 6, 7, 3, 4, 1
1

Fig. 2.10. Parcurgerea n A-postordine


Procedure APOST(FIU, FRATE, N, RD) Integer FIU(N), FRATE(N), RD STACK S i RD; S 0 do while FIU(I) 0 i S; i FIU(i) repeat Call Visit(i) while FRATE(i) = 0 if S = 0 then return else i S; Call Visit(i) endif repeat i FRATE(i) repeat end

Pdurea Pdurea reprezint un graf conex i fr ciclri. Componentele unei pduri se numesc arbori. Dac pentru fiecare arbore se stabilete o rdcin, pdurea poate fi considerat un graf orientat. Metode de parcurgere a unei pduri 1. Se viziteaz pe rnd, prin una din metodele cunoscute, arborii pdurii 2. Se definete direct, pentru o pdure, o P-preordine, P-inordine, P-postordine P-preordinea se definete astfel: - se viziteaz rdcina primului arbore al pdurii - se viziteaz n P-preordine subarborii primului arbore - se viziteaz n P-preordine pdurea format din ceilali arbori ai pdurii iniiale

Organizarea i structurarea datelor

2-13

P-inordinea i P-postordinea se obin din P-preordine schimbnd corespunztor momentul n care se viziteaz rdcina primului arbore i nlocuind cuvntul preordine cu inordine, respectiv postordine Grafuri oarecare Un graf oarecare este o mulime G(N,M) unde N este mulimea nodurilor i M mulimea arcelor. Reprezentarea i parcurgerea grafurilor oarecare Reprezentarea grafurilor oarecare prin arce presupune realizarea matricei A de adiacent a grafului, de ordin N (numrul de vrfuri) unde A(i,j) = 1 dac (i,j) este arc sau 0 n caz contrar De exemplu, grafului din figura 2.11 i corespunde matricea de adiacen din figuta 2.12.
I\j 1 2 3 4 5 6 7 8 Matricea de adiacen 1 2 3 4 5 6 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 1 7 0 0 0 0 1 1 1 0 8 0 0 0 0 0 1 0 1

Fig. 2.11. Graf oarecare

Fig. 2.12. Matricea de adiacen

Reprezentarea grafurilor oarecare prin lista vecinilor se face indicnd pentru fiecare vrf i lista vecinilor si ( lista vrfurilor j cu (i,j) arc ). De exemplu pentru graful din figura 2.11 lista vecinilor este urmtoarea: Vrf 1 2 3 4 5 6 7 8 Lista vecinilor 2, 3, 4 1, 5 1, 5 1, 6 2, 3, 7 4, 7, 8 5, 6 6

Reprezentarea grafurilor oarecare prin matrice se face pe baza numrului de vrfuri (N) i a numrului de arce (M). Matricea L(2,M) conine pe fiecare coloan extremitile unui arc. Acest mod de reprezentare nu se preteaz la parcurgerea rapid a vrfurilor, drept urmare este folosit mai rar, pentru rezolvarea problemelor n care muchiile se prelucreaz succesiv, nu sunt incluse ntr-o matrice, ele fiind citite i prelucrate secvenial. Listele cu vecini pot fi implementate uor folosind o matrice L cu 2 linii i 2M coloane, i un vector CAP cu N componente. n prima linie se memoreaz vrfurile, iar n cea de-a doua linie se memoreaz adresele i legturile). Valoarea fiecrui element i al vectorului CAP reprezint numrul coloanei din matricea L cu care ncepe lista vecinilor vrfului i.

2-14

Organizarea i structurarea datelor

Parcurgerea grafurilor oarecare presupune parcurgerea tuturor vrfurilor care pot fi atinse plecnd de la un vrf i dat) sunt: Metoda de parcurgere BF (Breadth First) Se parcurge graful n lime; se viziteaz vrful i, vecinii acestuia, apoi vecinii nc nevizitai ai acestora etc. n cazul particular al unui arbore, se viziteaz nti rdcina apoi vrfurile de pe nivelul 1, vrfurile de pe nivelul 2 etc. Pentru a se distinge vrfurile vizitate de cele nevizitate se folosete:

un vector VIZ cu N componente: VIZ(i) = 1 dac vrful i a fost vizitat sau 0 dac vrful i nu a fost vizitat, o coad C n care se introduc vrfurile care au fost vizitate dar nc nu au fost prelucrate (nu au fost cercetai vecinii lor), i vrful de la care se pleac.

Procedura BF const din a scoate cte un element din coad i de a introduce apoi n coad descendenii si nc nevizitai, vizitndu-i n acelai timp. Pentru arborele din figura 2.11 ordinea de parcurgere este 1 2 3 4 5 6 7 8 i algoritmul corespunztor este descries n procedura BF.
Procedura BF(i,N) Queue C; integer VIZ(N) For j=1, N VIZ(j) 0 Repeat Call VIZIT(i) VIZ(j) 1 ji C0 Do For [ toi k vecini ai lui j ] If VIZ (k) = 0 kC Call VIZIT(k) VIZ(k) 1 Endif Repeat If c = 0 then Return else j C Endif Repeat End

/* iniializare: nu a fost vizitat nici un nod */ /* viziteaz rdcina (vrful i) de plecare */ /* se marcheaz vrful i ca vizitat */ /*punct de plecare este vrful i, vizitat */ /* prelucreaz vrful j */ /* dac vrful k nu a fost vizitat */ /*numrul vrfului intr n coad */ /* se viziteaz vrful k */ /* se marcheaz ca vizitat */ /* dac nu mai exist vrfuri nevizitate */ /* scoate un element nevizitat din c */

Metoda de parcurgere D (Depth). Se deosebete de algoritmul BF prin aceea c prelucreaz mereu numai ultimul element la care s-a ajuns, deci se va nlocui coada C cu o stiv S. Ordinea de vizitare pentru arborele din figura 2.11 este: 1 2 3 4 6 7 8 5. Metoda de parcurgere DF (Depth First). Se merge n adncime ori de cte ori este posibil. Prelucrarea unui vrf const n prelucrarea primului dintre vecinii si nevizitai, trecndu-se de abia apoi la urmtorul su vecin nevizitat. n cazul arborilor, metoda corespunde vizitrii n preordine a vrfurilor.

Organizarea i structurarea datelor

2-15

Algoritmul este des prezentat ca algoritm pentru ieirea dintr-un labirint: vom merge spre stnga, spre vrfuri ( intersecii ) noi att timp ct este posibil. Cnd nu mai este posibil ne ntoarcem cu un pas i ncercm s mergem spre cel mai din stnga dintre vrfurile nvecinate i neatinse. Pentru arborele din figura 2.11 ordinea de vizitare este: 1 2 5 3 7 6 4 8.

2.2.2 Prelucrarea datelor din memoria intern


n practica programrii intervin i probleme relative la prelucrarea datelor din memoria intern. Acestea sunt legate de sortarea, cutarea sau dispersarea datelor. Sortarea. Fiind dat o mulime {a1, a2,...an} de numere reale, se cere ordonarea cresctoare a acestora adic determinarea unei permutri p de grad n astfel nct ap(1) < ap(2) < ...< ap(n). Vom dori, cu alte cuvinte, sortarea celor N componente ale unui vector A aflat n memoria intern, folosind metode ce utilizeaz arbori. Prima problem care se pune este gsirea celei mai mici componente a vectorului A. Numrul minim de comparaii a dou numere necesare determinrii minimului din A este N - 1. Numrul se calculeaz astfel: b1 = min (a1, a2); b2 = min (b1, a3);...; bN-1 = min (bN-2, aN) i se poate reprezenta grafic folosind arborele binar complet din figura 2.13 bn-1 bn-2 b2 b1 a1 a2
Fig. 2.13. Arborele de determinare a minimului

an an-1

a3

Se reiau comparrile celor N-1 numere rmase i se determin urmtorul element. O metod de sortare bazat pe algoritmul prezentat este: se determin ak = min { ai}, i = 1,2,...,n; se elimin din ir ak se determin minimul dintre elementele rmase. Numrul de comparaii este (n-1) + (n-2) + ... + 2+1 = n(n-1)/2. Strategia prezentat se transpune pe arbori astfel: se construiete arborele din figura 2.13, determinndu-se n rdcin minimul dintre cele N numere; se pune n eviden drumul care unete rdcina cu vrful terminal ak cu bN-1 = ak; se pune ak = + se refac valorile pe acest drum, obinndu-se n rdcin al doilea element din ir n ordine cresctoare; se repet acest pas de nc N-2 ori. Procedeul astfel descris poart numele de sortare arborescent. Cutare. Problema const n urmtoarele: se d o mulime {a1, a2,...aN} de numere reale i o valoare dat b; se cere s se determine dac b aparine multimii i dac da, se cere valoarea i pentru care ai=b. Cea mai simpl metod const din compararea lui b cu fiecare ai pn cnd gsim ai = b; pentru o cutare fr

2-16

Organizarea i structurarea datelor

succes numrul de cutri este n iar pentru o cutare cu succes numrul mediu de comparaii este n/2 iar cel maxim este n. Vom cerceta o alt metod, mai buna, care pornete de la faptul c vectorul A = (a1, a2,...,aN) este sortat strict cresctor: a1 < a2 < ...< aN. Problema cutrii const n a determina x si y dai de: Dup cum se observ, x = 1 indic o cutare cu succes iar x = 0 o cutare fr succes. (1,i) dac ai = b, (0,0) dac b <a1, (0,-i) dac ai < b < ai+1, (0,-N) dac b > aN.

(X,Y) =

Algoritmul de cutare este: p 1; q N; continuare =DA while continuare=DA if q<p then x 0; y (-q); continuare = NU else i [(p+q)/2] then q i-1 else if b= ai then x=1; y=i; continuare = NU else p i+1 end if end if end while Algoritmul se bazeaz pe "njumtirea" intervalului i poate fi reprezentat pe un arbore binar complet cu N+1 vrfuri terminale notate cu 0,-1,-2,...,-N. Vrfurile neterminale sunt etichetate cu 1,2,..,N astfel nct pentru fiecare subarbore vrfurile neterminale sunt etichetate cu p, p+1,...,q pentru anumii p i q, rdcina subarborelui fiind etichetat cu ai, i=[(p+q)/2]. Dispersare. Metodele de cutare depind, evident, de modul de repartizare a datelor n memorie. Problema care se pune este urmtoarea: pornind de la valoarea unui cmp din nregistrare, numit cheie, s se gseasc locaia n care se gsete (sau se va gsi) nregistrarea. Deci ceea ce cutm este o funcie de dispersare f care s ataeze fiecrei chei un numr natural ce reprezint o locaie de memorie. Funcia trebuie s aib proprietatea de a mpri pe ct posibil uniform informaiile n M clase (M este un numr utilizat ca baz a procesului de dispersare). Cu ct valoarea lui M este mai mare, viteza de regsire este mai mare. O metod frecvent utilizat pentru alegerea lui f este cea a claselor de resturi. Presupunnd c fiecare cheie K este un numr ntreg, se ia f(K) = K, unde clasa se ia modulo M. Se recomand ca M s fie numr prim.
end if if b<ai

2.3 Organizarea i prelucrarea datelor pe suport extern


Pe suport extern, datele pot fi organizate n fiiere sau n baze de date, in funcie de natura si complexitatea relaiilor dintre ele.

Organizarea i structurarea datelor 2.3.1. Fiiere, moduri de organizare i de acces

2-17

Fiierul de date reprezint un ansamblu organizat de date relativ omogene din punct de vedere al naturii i al criteriilor de prelucrare, memorate pe suporturi de unde pot fi utilizate n procesul de prelucrare. Pentru a da o definiie formalizat a acestei noiuni, s considerm mulimea finit de obiecte (entiti) O: O = { oi | i = 1,2,...,n i n > 1 } unde oi reprezint obiectele (elementele) mulimii O. Toate elementele oi sunt caracterizate printr-o mulime de atribute P = { p1,p2,...,pm | m | N*} . De exemplu, dac O este mulimea angajailor unei ntreprinderi atunci P poate fi P = {nume, data naterii, adresa, sex, profesie, vrst }. Dac se noteaz cu vik valoarea asociat atributului pk pentru obiectul oi atunci un fiier este o mulime F de forma: F = { (oi, pk, vik) | i = 1,2,...,n; k = 1,2,...,m }. Se consider mulimea Vk a valorilor atributului pk, adic Vk = { vik | i [1,ni]; ni < n } U { /\ } unde /\ este o valoare atribuit lui pk atunci cnd nu se cunoate pe moment valoarea acestuia pentru un obiect oi. Fie o funcie injectiv f : O --> V1 x V2 x...x Vm Un element f(oi) f(O) obinut ca o succesiune de elemente din V1,V2,...,Vm este numit nregistrare logic. De obicei nregistrrile logice sunt divizate explicit n cmpuri, fiecare cmp reprezentnd o valoare asociat unei proprieti. Dup natura lor cmpurile pot fi alfabetice, alfanumerice i numerice. Caracterul este elementul indivizibil i constitutiv al datelor dintr-un fiier (o liter, o cifr, un caracter special). Caracteristicile nregistrrilor logice sunt: lungimea (numrul caracterelor coninute) care poate fi variabil sau fix i formatul (fix: toate nregistrrile au aceeai lungime; variabil: nregistrrile au lungimi diferite). Legtura dintre datele organizate n vederea prelucrrii pe calculator i datele utilizate n aplicaii practice se pune n eviden prin urmtoarele dou asocieri: volum - fiier. Pot exista trei posibiliti: un volum conine un singur fiier, un volum conine mai multe fiiere i un fiier poate fi format din mai multe volume bloc - nregistrare. Un bloc poate fi compus din mai multe nregistrri (nregistrri blocate) sau poate fi identic cu o nregistrare (nregistrri neblocate). Numrul nregistrrilor dintr-un bloc este numit factor de blocare i este precizat de utilizator. Asupra fiierelor se pot realiza urmtoarele operaii de baz: crearea, care este operaia prin care nregistrrile logice sunt transpuse pe suportul tehnic de date; actualizarea, care este constituit din operaii de adugare, modificare i tergere; consultarea, care este operaia de regsire a nregistrrilor; interclasare, fuzionare; copiere. Accesul la nregistrrile unui fiier reprezint tehnica prin care se regsesc nregistrrile logice. Prin organizarea unui fiier se nelege punerea n coresponden a numrului de control a nregistrrilor din fiier cu adresele acestor nregistrri n unitatea de memorie, n vederea regsirii nregistrrilor. n funcie de modul de organizare se face i prelucrarea acestuia. Se disting trei tipuri de baz de organizare: secvenial, indexat secvenial i selectiv (relativ). Organizarea secvenial. Fiierul F este organizat secvenial dac : ntre nregistrri este definit o relaie de ordine " < " (care nu nseamn neaprat "mai mic sau egal") astfel ca r1 < r2 < ...< rn unde ri, i=1,2,...,n sunt nregistrrile fiierului F; nregistrrile sunt memorate pe suport, n ordinea definit, n zone succesive sau n zone nlnuite. De obicei, nregistrrile sunt memorate i ordonate n funcie de valoarea unor cmpuri din nregistrare numite chei.

2-18

Organizarea i structurarea datelor

n cazul acestui mod de organizare singurul mod de acces este cel secvenial care presupune accesul la nregistrarea rk numai dup parcurgerea nregistrrilor r1, r2, ..., rk-1. Dac fiecare din cele n nregistrri este solicitat cu aceeai probabilitate, atunci timpul de cutare este proporional cu (n-1)/2. Pentru minimizarea acestuia se utilizeaz metoda cutrii logaritmice (binare) care conduce la timpul proporional cu 1 + [log2n]. Organizarea indexat-secvenial. Un fiier indexat este un dublet F = ( R,I ) n care: R = { ri | i=1,2,...,n } este mulimea nregistrrilor, fiecare nregistrare ri fiind identificat printr-o cheie unic ki ; I = { ( ki,pi ) | i = 1,2,...,m } este mulimea de indeci asociat fiierului n care pi este un pointer spre nregistrarea ri, iar perechea ( ki, pi ) este numit index. Accesul la nregistrri poate fi secvenial sau direct. Acest ultim acces decurge astfel: fiind dat o cheie ki se caut mai nti n mulimea I perechea ( ki,pi ) care are prima component identic cu cheia dat, apoi se face accesul direct la nregistrare dup a doua component (pointerul pi). n unele situaii indexarea se poate realiza dup mai multe chei (nu neaprat identice), regsirea conducnd acum la o mulime de nregistrri. Mulimea de indeci I este memorat sub forma unei tabele numit tabel de indeci a crei dimensiune este direct proporional cu numrul de nregistrri din R. Organizarea selectiv. Fie R = {ri | i=1,2,...,n} mulimea nregistrrilor, fiecare ri fiind identificat prin cheia ki i fie K mulimea valorilor acestor chei. S considerm funcia surjectiva f : K--> I unde I = {I | i Z, i [0, m-1]}. Fiierul cu organizare selectiv este un dublet F = (R,f) dac: n mulimea R este definit o partiie {Ro, R1,...,Rm-1}; prin funcia f fiecrei nregistrri ri i se asociaz submulimea Ri din care face parte ; ntre nregistrrile fiecrei submulimi Ri este definit o relaie de ordine. Toate nregistrrile care aparin submulimii Ri se numesc sinonime iar funcia f este numit funcie de randomizare (dispersare). Numrul m trebuie astfel ales nct m < n pentru a evita ca unele submulimi Ri s fie vide. Modul de acces la nregistrarea ri este numai direct i decurge astfel: fiind dat cheia ki K, numrul j=f(ki) reprezint submulimea Rj din care face parte ri; ntre nregistrrile din Rj existnd o ordonare vor fi suficiente, n medie, (|Rj|-1)/2) comparri pentru a gsi pe ri (| Rj | este numrul elementelor mulimii Rj). La nivel fizic fiecrui submulimi Rj i se asociaz o zon de suport numit csu, celul sau caset. Celulele se numeroteaz, iar numrul de ordine al acestora poate fi asociat cu adresa real de pe suport. Cele m celule constituie zona principal. nregistrrile dintr-o celul sunt memorate (sau accesate) secvenial. n cazul n care o nregistrare nu mai ncape n Rj atunci apare o depire de capacitate i nregistrarea este memorat ntr-o zon de depire asigurndu-se legtura cu celula prin pointeri. Organizarea relativ Este un caz particular de organizare selectiv. Ea const din atribuirea pe suportul fizic a unor celule de lungime fix, fiecare purtnd un numr de ordine. n fiier exist celule pentru toate valorile numrului de ordine din intervalul [1,m] specificat de utilizator. Numrul de ordine constituie adresa relativ i servete ca element de adresare dinamic. Fiierele cu astfel de organizare pot avea acces direct, secvenial sau dinamic. Fiiere inverse. n cazul fiierelor de tip arhiv sau cataloage se pune problema cutrii nregistrrilor care conin o caracteristic de o anumit valoare. Pentru regsirea rapid a acestor nregistrri se construiete un alt fiier, numit "invers" n care fiecare nregistrare este o list a identitii nregistrrilor din fiierul catalog, posednd fiecare o caracteristic de o anumit valoare. Denumirea nu arat c

Organizarea i structurarea datelor

2-19

fiierele sunt organizate n sens invers ci c se inverseaz rolul nregistrrilor i al caracteristicilor. n loc de a lista caracteristicile unei nregistrri se listeaz nregistrrile avnd anumite caracteristici de o anumit valoare. De exemplu, fie un fiier catalog cu produsele unei ntreprinderi n care fiecare produs are caracteristicile: cod, nume, secie, depozit, pri componente etc. iar fiecare caracteristic are o valoare. Valorile caracteristicii "secie" pot fi: S1, S2, S3. Dac fiierul iniial conine nregistrrile din tabelul 2.1 se poate construi fiierul invers din tabelul 2.2:
Tabelul 2.1
Cod produs 8 12 20 24 42 50 Nume P1 P2 P3 P4 P5 P6 Secia S1 S1 S3 S2 S1 S2 Depozit D2 D1 D2 D2 D1 D1 Pri componente PC1 PC2 PC2 PC2 PC3 -

Tabelul 2.2
Identitatea nregistrrii inverse Secia = S1 Secia = S2 Secia = S3 Depozit= D1 Depozit= D2 Lista identificatorilor din Fiierul catalog 8 24 20 12 8 12 50 42 20 42 50 24

Se observ c un fiier invers construit astfel se poate folosi pentru exploatarea unui fiier organizat indexat-secvenial, identificarea nregistrrilor din fiierul catalog fcndu-se printr-un cod. Fiiere cu legturi (multiindexate). Un astfel de fiier este reprezentat sub forma unei liste multiindexate. Operaia de regsire se face dup mai multe chei. O cheie se descrie prin perechea kij = (pj vi) unde pj este un atribut de exploatare iar vi este o valoare a atributului pj. Dac organizarea fiierului are loc n raport cu atributele p1, p2,...,pn, fiecare nregistrare conine n chei pe lng celelalte informaii de prelucrare. Aceste chei particip la operaia de regsire. Dac la fiecare cheie (pj vi) a unei nregistrri se asociaz adresa unei alte nregistrri care conine aceast cheie, se obine o list relativ la cheie (pj,vi). Prin parcurgerea unei astfel de liste se obin toate nregistrrile care se refer la cheia considerat. Aceast parcurgere se poate realiza numai dac se cunoate adresa de nceput a listei. Pentru aceasta se creeaz un fiier director care conine pentru fiecare list adresa de nceput i eventual de sfrit. Deci, un fiier cu legturi const dintr-un fiier de baz construit din mai multe liste i dintr-un fiier director care conine adrese de legtur n fiierul de baz. Ambele fiiere trebuie s permit accesul selectiv i deci pot fi ori secvenial-indexate ori cu organizare selectiv. Regsirea n astfel de fiiere se poate efectua serial sau paralel, folosindu-se algoritmi de prelucrare corespunztori. 2.3.2 Baze de date Nivelul superior de organizare a datelor externe l constituie baza de date care este un sistem de organizare i exploatare a informaiei, constituit din elementele:

2-20

Organizarea i structurarea datelor

o colecie de date aflate n interdependen; descrierea datelor i a relaiilor dintre ele. Altfel spus, una sau mai multe colecii de date aflate n interdependen, mpreun cu descrierea structurii acestora i a relaiilor dintre ele, formeaz o baz de date. Includerea n baza de date a descrierii structurii acesteia o deosebete calitativ de fiierele de date, deoarece prin aceasta se asigur independena datelor din baz fa de programele de aplicaii i invers. Aceast independen poate fi fizic (memorarea datelor i tehnicile de memorare pot fi schimbate fr a necesita rescrierea programelor) i logic (se pot adaug nregistrri noi fr a fi necesar rescrierea programelor). n funcie de tipurile de structur abordate i concepia de definire a relaiilor dintre coleciile de date putem avea: baze de date ierarhice (modelul ierarhic) care opereaz cu mulimi de date structurate arborescent; baze de date tip reea (modelul reea) care opereaz cu mulimi de date structurate n reea; aici noiunea de element ierarhic dispare fiind nlocuit cu cea de predecesor; baze de date relaionale (modelul relaional) care opereaz cu mulimi de date structurate pe baza teoriei matematice a relaiilor dintre ansambluri. baze de date orientate obiect (modelul obiectual) destinate stocrii obiectelor utilizate in aplicaii concepute si realizate orientat obiect.

2.4 Criterii de alegere a structurilor de date


Definirea structurilor de date necesare ntr-o aplicaie, este o activitate complex ce condiioneaz, n mare msur, eficiena sistemului de prelucrare. Pentru realizarea ei este necesar s se in seama de o serie de factori cum ar fi: volumul datelor determin alegerea tipului de structur de date intern i/sau extern; operaiile de prelucrare si frecventa lor determin tipul de structur, natura suportului de memorie, modul de organizare, accesul; indicele de activitate pe operaii este definit ca raport ntre numrul de componente al structurii utilizate ntr-o operaie i numrul de componente exploatate pentru aceasta; el determin tipul de acces i implicit, suportul de memorie durata de via a structurii - pentru structuri permanente sau de lung durat, alegerea tipului de structur i de acces la suportul extern de memorie trebuie astfel realizat nct s evite cumularea efectelor negative n timp; pentru structurile temporare este preferabil s se fac concesii n privina performanelor, dac astfel se obin avantaje cum sunt: rapiditatea programrii, durata redus a operaiilor conexe etc. complexitatea programrii - se refer la complexitatea scrierii i testrii programelor pentru crearea i prelucrarea structurilor de date i poate fi privit din urmtoarele puncte de vedere: alegerea structurilor mai puin eficiente, dar cu algoritmi simpli i uor de programat, atunci cnd durata structurii este limitat alegerea unor structuri eficiente, dar mai greu de programat asigurarea integritii datelor - adic a posibilitilor de protecie mpotriva distrugerilor, precum i a posibilitilor de refacere a structurii n urma unor astfel de situaii; sistemele proprii de protecie i refacere sunt mai simple sau mai complexe, deci mai ieftine sau mai costisitoare, dup tipul structurii de date, i regimul de lucru cu aceasta. durata si complexitatea activitilor conexe - sunt criterii legate mai ales de structurile externe de date, de culegerea, transpunerea pe purttori, verificarea corectitudinii i de volumul acestor structuri; aceste operaii sunt mai simple sau mai complicate, dup tipul de structur. Deoarece neajunsurile unei soluii propuse apar de obicei dup ce sistemul a fost pus n funciune, cnd coreciile sunt extrem de costisitoare, dac nu imposibile, trebuie s se fac uz de experiena n domeniu.

Organizarea i structurarea datelor

2-21

Utilizarea eficient a spaiului de memorie - tipul de structur i forma de reprezentare sunt condiionate de tipul de memorie disponibil i de restriciile de utilizare a acesteia. Pentru utilizarea eficient a spaiului de memorie se folosesc metodele de comprimare a datelor, de blocare i segmentare, innd cont de caracteristicile tehnice ale suportului.

Menionm c , n afar de factorii amintii mai sus, pentru structurarea datelor ntr-o aplicaie, exist trei abordri posibile: Se pornete cu proiectarea structurilor de date pentru care se construiesc apoi algoritmii de prelucrare corespunztori; Se pornete cu definirea algoritmilor de prelucrare, care conduc la anumite structuri de date, care vor fi supuse prelucrrii; Se pornete cu definirea obiectelor, identificndu-se att datele corespunztoare lor ct i prelucrrile efectuate asupra acestor date . n aplicaii reale se poate adopta o variant mixt, pn la gsirea unui echilibru ntre alegerea algoritmilor i structurile de date implicate n prelucrarea cu calculatorul. Primele dou abordri amintite anterior, vor fi regsite ca principii de baz n diferitele metodologii de analiz i proiectare orientate pe funcii/date, iar varianta mixt, care presupune reiterarea n definirea concomitent a structurilor de date i de prelucrare, corespunde metodologiilor de analiz i proiectare orientate obiect. n capitolul referitor la metode de analiz i proiectare, aceste aspecte vor fi descrise pe larg.

S-ar putea să vă placă și