Documente Academic
Documente Profesional
Documente Cultură
SDA (Examen)
SDA (Examen)
EtapeleimplementariiTDAinlimbajulC:1.Creareafisieruluicuextensia
(.h)carecontine:descriereaproprietatilorSD2.prototipurilefunctiilor
pentruoperatiuniasupradatelor3.Creareafisieruluicuextensia(.cpp)
carecontinemainul.
4. Implementarea tipului de date abstract Tablou de structuri n limbajul C
Structurile la fel ca si celelalte tipuri de date pot fi aranjate in tablouri. De ex
urmatoarea declaratie creeaza un tablou unidimensional CARTE[20] de structuri de
tip carte, ce contin 20 elemente:
Pentru a accesa o anumita structura din tablou, numele tabloului trebuie indexat.
CARTE[0]-permite accesul la prima componenta a tabloului de structuri, sau
CARTE[19]-permite accesul la ultima componenta a tabloului de structuri.
Pentru a accesa un cimp al unei anumite structuri din tablou, indexul trebuie urmat
de punct si de numele cimpului dorit. De exemplu:
gets(CARTE[3].nume_autor);
CARTE[3].data_ap=1998;
5. Liste nlanuite. Clasificarea i caracteristica general
O lista circulara este o lista in reprezentarea inlantuita care are proprietatea ca ultimul
nod pointeaza la primul nod al listei in loc sa aiba drept componenta pointerul NULL.
Info
adresa
info
adresa
...
Listele inlantuite se clasifica in: Liste liniare dublu inlantuite si Liste circulare.
O lista liniara dublu inlantuita este caracterizata prin faptul ca pe multimea
elementelor sunt definite doua relatii de ordine totala inverse una alteia (inainte si
inapoi). Rezulta doua secventializari ale listei Ordinea elementelor pentru o astfel de
lista este specificata prin doua cimpuri de informatie care sunt parte componenta a
fiecarui element si indica elementul urmator si respectiv elementul precedent, conform
cu relatiile de ordine definite pe multimea elementelor listei.
O lista circulara simplu/dublu inlantuita este o lista liniara simplu/dublu inlantuita
modificata astfel
incat ultimul element pointeaza spre primul element din lista.
6. Lista simplu nlanuit. Implementarea tipului de date abstract Lista simplu
nlanuit n limbajul C
Lista simpla inlantuita este o SD in care elementele (nodurile) sunt legate printr-un
singur cimp ce reprezinta adresa elementului urmator. Elementele sunt definite in
diferite locatii in memorie. Primul element al listei este numit corpul listei-head. Spre
deosebire de masive, listele nu sunt alocate ca blocuri omogene de memorie, ci ca
elemente separate de memorie. Pentru accesarea listei trebuie cunoscuta adresa
primului elemen; elementele urmatoare sunt accesate parcurgand lista.
Typedef struct lelement {
Int info;
Struct element *next;
}element;
Element *head=NULL;
7.Doubly Linked List. Lista dublu nlanuit. Implementation of abstract data type Doubly Linked
List in C language Implementarea tipului de date abstract Lista dublu nlanuit n limbajul C
Lista este dublu inlantuita daca intre nodurile ei sunt definite doua relatii de ordine. In
general, o lista este n-inlantuita daca intre nodurile ei sunt definite n relatii de ordine.
Listele dublu inlantuita sunt alcatuite din date la care se adauga atit legaturi cu
Coada C;
//coada
9.Stack. Stiva. Implementation of abstract data type Stack in C language Implementarea tipului
de date abstract "Stiva" n limbajul C
Stiva este o lista liniara in care inserarile si stergerile din lista se pot facenumai pe la
un capat al listei, numit varful stivei. Singurul element care poate fiaccesat la un
moment dat este cel din varful stivei. Se poate face o analogie intre ostiva folosita in
programare si o stiva de carti. Adaugarea unei carti se poate facenumai in varful stivei
de carti, peste cartile existente si singura carte ce poate fiaccesata, eventual eliminata
din stiva este cea din varful stivei.Stivele se mai numesc si liste LIFO (last in/first out)
deoareceprimul element care este extras din stiva este ultimul introdus in stiva.
11.Different forms of tree representation in the memory of computer Diferite forme de reprezentare
a unui arbore n memoria calculatorului
12.Binary Tree. Arbore binar. Implementation of abstract data type Binary Tree in C language
Implementarea tipului de date abstract "Arbore binar" n limbajul C
Un arbore binar este un arbore in care orice nod are cel mult doi descendenti facanduse distincatie clara intre descendentul drept si descendentul stang. Radacina unui
arbore binar are doi subarbori, subarborele stang, cel care are drept radacina fiul stang
si subarborele drept, cel care are ca radacina fiul drept. Orice aubarbore al unui arbore
binar este el insusi arbore binar.
Reprezentarea secventiala Pentru fiecare nod al arborelui se precizeaza informatia si
descendentii directi ca elemente a trei vector diferiti, INFO[i], ST[i] si DR[i], unde i este
indicele asociat unui nod. Cei trei vectori au dimensiunea egala cu numarul de noduri
din arbore.
Reprezentarea inlantuita
13.Binary Tree level by level and recursive traversals Arbore binar. Parcurgeri pe niveluri i
parcurgeri recursive
14.Binary Search Tree and its implementation in C language Arbore binar de cutare.Implementarea
tipului de date abstract"Arbore binar de cutare" n limbajul C
In domeniul calculatoarelor un arbore binar de cautare (ABC) este o structura de
datenumita arbore, si care detine urmatoarele proprietati:
* Fiecare nod are o valoare.* Ordinea totala este definita pe aceste valori.* Subarborele stang al unui nod oarecare contine numai valorile mai mici decat
valoarenodului respectiv.* Sub-arborele drept al unui nod oarecare detine numai
valorile mai mari sau egale cunodul respectiv.
Avantajul major al arborilor binari de cautare consta in relatarea algorimilor de sortare
sialgoritmilor de cautare care folosesc metoda traversarii arborilor in ordine, poate fi
foarteeficienta.
Toate operatile intr-un arbore binar realizeaza mai multe operatii ce se folosesc de
uncomparator, care este o subrutina care calculeaza ordinea totala a oricaror doua
valori.Inimplementatiilre simple a arborilor binari de cautare, un program de cele ami
multe oritrimite un raspuns catre comparator cand acesta creeaza un arbore, sau altfel
explicand, inlimbajele de programare care suporta tipul polimorfism parin folosirea
valorilor ca fiindde tip comparabil.
15. Crearea arborelui binar de cutare. Algoritm pentru inserarea unui nod
Prin crearea unui arbore de cautare intelegem de fapt crearea radacinii, restul nodurilor
fiind adaugate prin operatia de inserare.
16.Algorithms for searching a node and determining the maximal /minimal node of Binary Search
Tree Arbore binar de cutare. Algoritmi pentru cutarea unui nod i pentru determinarea nodului
max/min
Cautarea unei valori date intr-un arbore binar de cautare este un proces care poate
firealizat recursiv in ordinea valorilor care sunt stocate.Se incepe prin axaminarea
noduluiradacina.Daca valoarea care este cautata este egala cu valoare nodului
radacina, atunciinseamna ca valoarea exista in arbore.Daca valoarea ce trebuie
cautata este mai micadecat valoarea nodului radacina, atunci aceasta trebuie sa fie in
sub-arborele stang, astfel printr-o cautare recursiva se va cauta valoarea in structura
acestui sub-arborestang.Asemenator,daca valoarea care trebuie cautata este mai mare
decat valoareadetinuta de nodul radacina, atunci aceasta trebuie sa fie in structura
sub-arboreluidrept.Daca procedura de cautare a ajuns la un nod curent si valoarea
cautata nu s-a gasit,atunci valoarea nu se afla in arbore.O compararatie ar putea fi
executata cu o cautare binara, care efectueaza o cautarea a valorii printr-o metoda
foarte asemanatoare, insaabordeaza un acces aleator in tabloul valorilor prin urmarirea
legaturilor.
18.Sequantial and binary search algorithms for 1-D arrays Algoritmi de cutare secvenial i binar
pentru tabloul unidimensional
Cautarea binara (logaritmica)
Se aplica pentru tablouri ordonate, principiul ei constind in injumatatirea repetata a
intervalului in care se cauta elementul dorit. Aceasta tehnica are avantajul rapiditatii:
numarul de comparatii necesare este cel mult log2(N). Necesitatea ca tabloul sa fie
ordonat implica faptul ca elementele sale au o componenta (cheie) ce apartine unui tip
scalar, iar cautarea se face dupa aceasta component.
Cautarea secventiala- urmrete s verifice apartenena unui element la un ir de
elemente de aceeai natur, n spe a unui numr la un ir de numere. Pentru
aceasta se parcurge irul de la un capt la cellalt i se compar numrul de cutat cu
fiecare numr din ir. n cazul n care s-a gsit coresponden (egalitate), un indicator
flag este poziionat. La sfritul parcurgerii
irului, indicatorul ne va arta dac numrul cutat aparine sau nu irului.
19.Sorting algorithms. Algoritmi de sortare. Classification and general characteristics
Clasificarea i caracteristica general
Sortare- Se dorete ca pornind de la o secven de nregistrri coninnd fiecare o
cheie, secvena s fie reordonat astfel nct cheile s fie ntr-o anumit relaie de
ordine. Pentru chei numerice poate fi cresctoare sau descresctoare, iar pentru chei
alfanumerice poate fi ordinea alfabetic. Sortarea este un mijloc ajuttor pentru
20.Selection sort algorithm for 1-D array and its modifications Algoritmi de sortare prin selecie i
prin selecie i interscimbri
Considerm un vector de elemente comparabile ntre ele i dorim s le ordonm
cresctor. Pentru aceasta comparm primul element cu toate elementele care urmeaz
dup el. Dac gsim un element mai mic dect primul atunci le interschimbm pe cele
dou. Apoi continum cu al doilea element al irului,
pe care, de asemenea l comparm cu toate elementele care urmeaz dup el i n caz
de inversiune interschimbm cele dou elemente. Apoi procedm la fel cu al treilea
element al irului iar procesul continu astfel pna la penultimul element al irului care
va fi comparat cu ultimul element din ir.
21.Insertion sort and bubble sort algorithms for 1-D array Algoritmi de sortare bubble i prin
inserie
Succesul algoritmului este asigurat de trecerea succesiv prin tablou, pn cnd
acesta este sortat, cu specificaia c, la fiecare trecere, elementele succesive i i i+1
pentru care a[i]>a[i+1], vor fi interschimbate.
Metoda poate fi imbuntit dac, dup fiecare trecere, se va reine ultima poziie din
tablou n care a avut loc o interschimbare, iar trecerea urmtoare se va efectua doar
pin la acea poziie. n cazul n care la o
trecere nu a avut loc nici o interschimbare algoritmul se va incheia. Pentru o i mai
bun optimizare se poate nlocui trecerea prin tablou ntr-un sens cu trecerea n dublu
sens. n acest caz, dac la dou treceri
succesive, ntre dou elemente i i i+1 nu a avut loc o interschimbare, atunci nici la
trecereile urmtoare nu se vor nregistra interschimbri. Cu toate optimizrile aduse
acestei sortari, ea se dovedete a fi cu
mult mai lent dect sortarea prin inserie, fiind ns preferat de unii datorit
simplitii, ce nu ridic probleme de implementare. Pentru valori suficient de mari ale
dimensiunii vectorului ce urmeaz a fi sortat se recomand utilizarea unor algoritmi ce
au o complexitate mai redusa i, prin urmare, ofer un timp de calcul mai mic.
- Inseria direct. Este cea mai simpl implementare a algoritmului i se face n felul
urmtor: Se consider c primele i elemente al vectorului sunt deja sortate. Pentru
elementul al (i+1)-lea, din tabloul iniial, se va
gsi poziia n care trebuie inserat printre primele i elemente. Toate elementele
tabloului de la aceast poziie i pn la i vor fi deplasate cu o poziie mai la dreapta
iar poziia eliberat va fi ocupat de elementul i+1.
- Inserarea rapid. Deoarece vectorul destinaie este un vector ordonat cresctor,
cutarea poziiei n care va fi inserat a[i] se poate face nu secvenial (ca n cazul
inserrii directe) ci prin algoritmul de cutare
binar. Subvectorul destinaie este mprit n doi subvectori, se examineazrelaia de
ordine dintre elementul de la mijlocul subvectorului i elementul a[j] i se stabilete
dac elementul a[i] va fi inserat n prima jumtate sau n a doua jumtate. Operaia de
divizare a subvectorului continu pn se
gsete poziia n care urmeaz s fie inserat a[i].
22.Shaker and Shell sort algorithms for 1-D array Algoritmi de sortare shaker i Shell
Elementul cheie al algoritmului l reprezinta alegerea valorilor pasului h.Pentru
alegeri adecvate ale secventei hk se poate obtine un algoritm de complexitate mai
mica (de exemplu O(n3/2) n loc de O(n2) cum este n cazul algoritmului clasic de
sortare prin insertie). O astfel de secventa de pasi este hk= 2k1 pentru 1 k
IlgnI.
Sortarea prin interschimbarea elementelor vecine asigura, la fiecare pas al ciclului
exterior, plasarea cate unui element (de exemplu maximul din subtabloul tratat la
etapa respectiva) pe pozitia finala. O varianta ceva mai eficienta ar fi ca la fiecare
etapa sa se plaseze pe pozitiile finale cate doua elemente (minimul
respectiv maximul din subtabloul tratat la etapa respectiva). Pe de alta parte prin
retinerea indicelui ultimei interschimbari efectuate, atat la parcurgerea de la
stanga la dreapta cat si de la dreapta la stanga se poate limita regiunea analizata
cu mai mult de o pozitie atat la stanga cat si la dreapta (cand tabloul contine
portiuni deja sortate). Aceasta varianta (cunoscuta sub numele deshaker sort)
23.Merge sort recursive algorithm for 1-D array Algoritm de sortare prin interclasare (mergesort)
Aceasta metoda de ordonare are la baza interclasarea a doi vectori: fiind dati doi
vectori ordonati se obtine un al treilea vector ordonat care va contine elementele din
cei doi vectori.
In cazul sortarii prin interclasare vectorii care se interclaseaza sunt doua secvente
ordonate din acelasi vector
Sortarea prin interclasare utilizeaza metoda Divide et Impera:
-se imparte vectorul in secvente din ce in ce mai mici., astfel incat fiecare secventa sa
fie ordonata la un moment dat si interclasata cu o alta secventa din vector
corespunzatoare.
-practic interclasarea va incepe cand se ajunge la o secventa formata din doua
elemente. Aceasta odata ordonata se va interclasa cu o alta corespunzatoare. Cele
doua secvente vor alcatui in subsir ordonat din vector mai mare care la randul lui se va
interclasa cu subsirul corespunzator samd.
comparaii
arhitecturilor i, n plus, n majoritatea implementrilor practice se pot lua, la proiectare, decizii ce ajut la evitarea cazului cnd
complexitatea algoritmului este de
impera. Astfel, el mparte lista de sortat n dou subliste mai uor de sortat. Paii algoritmului sunt:
1. Se alege un element al listei, denumit pivot
2. Se reordoneaz lista astfel nct toate elementele mai mici dect pivotul s fie plasate naintea
pivotului i toate elementele mai mari s fie dup pivot. Dup aceast parti ionare, pivotul se afl n
poziia sa final.
3. Se sorteaz recursiv sublista de elemente mai mici dect pivotul i sublista de elemente mai mari
dect pivotul.
O list de dimensiune 0 sau 1 este considerat sortat.
25.Heap Tree and Priority Queue algorithms Arbore binar heap i coada de prioritate
Heap-ul, este un arbore binar care respect proprietile de structur i de ordonare.
Fiecare nod al arborelui trebuie s conin o valoare asociat numit cheie i poate
conine alte informaii suplimentare.
Cheia trebuie s permit definirea unei relaii de ordine total pe mulimea nodurilor. n
funcie de obiectivul urmrit, heap-ul poate fi organizat sub form de max-heap sau
min-heap. Cele dou tipuri de heap sunt echivalente. Transformarea unui max-heap n
min-heap, sau invers, se
poate realiza prin simpla inversare a relaiei de ordine.
Structura heap este preferat pentru multe tipuri de aplicaii. Cele mai importante
utilizri sunt:
implementarea cozilor de prioritate utilizate pentru simularea pe baz de
evenimente sau algoritmi de alocare a resurselor;
implementarea seleciei n algoritmi de tip greedy cum ar fi algoritmul lui Prim
pentru determinarea arborelui de acoperire minim sau algoritmul lui Dijkstra pentru
determinarea drumului minim;
sortarea masivelor utiliznd algoritmul HeapSort
Cozile de prioritate sunt structuri de date care suport urmtoarele dou operaii de
baz:
inserarea unui element cu o prioritat e asociat;
extragerea elementului cu prioritate maxim.
Cele mai importante aplicaii ale cozilor de prioritate sunt: simularea bazat pe
evenimente, gestionarea resurselor partajate (lime de band, timp de procesare) i
cutare n spaiul soluiilor.
Structura de date de tip Heap este una dintre cele mai eficiente modaliti de
implementare a cozilor de prioritate. Prioritatea elementelor este dat de relaia de
ordine existent ntre valorile asociate nodurilor.
26.Priority Queue and Heap sort algorithms for 1-D array Algoritmi de sortare utiliznd coada de
prioritate i arbore binar heap
O alt aplicaie a structurii heap este implementarea algoritmului de sortare Heapsort.
Sortarea presupune extragerea elementelor din heap i stocarea acestora, n ordine
invers, la sfritul masivului utilizat pentru
memorarea structurii.
Algoritmul de filtrare presupune parcurgerea urmtoarelor etape, ncepnd cu nodul
rdcin:
se determin maximul dintre nodul curent, fiulstnga i fiul dreapta (dac exist);
dac maximul se afl n nodul curent, atuncialgoritmul se oprete;
dac maximul se afl ntr-unul dintre fii, atunci se interschimb valoarea din nodul
curent cu cea din
fiu i se continu execuia algoritmului cu nodul fiu.
27.Standard functions queue( ) and bsearch( ) in C language Funcii standard qsort ( ) i bsearch
( ) n limbajul C
Functia qsort sorteaza un masiv de nel elemente, fiecare de marime size. Argumentul base indica spre
nceputul masivului.
Elementele masivului sunt sortate n ordine crescatoare n concordanta cu functia de comparare referita
de comp, apelata cu doua argumente care indica spre obiectele ce se compara. Functia de comparare
trebuie sa returneze un ntreg mai mic dect, egal cu, sau mai mare dect zero daca primul argument
este considerat a fi mai mic dect, egal cu, respectiv mai mare dect al doilea. Daca cele doua
elemente comparate sunt egale, ordinea n masivul sortat este nedefinita.
Functia bsearch cauta ntr-un masiv de nel elemente, fiecare de marime size, un membru care coincide
cu obiectul indicat de key. Argumentul base indica spre nceputul masivului.
Continutul masivului trebuie sa fie sortat crescator n concordanta cu functia de comparare referita de
comp, apelata cu doua argumente care indica spre obiectele ce se compara. Functia de comparare se
defineste ca n cazul qsort. Primul argument este adresa cheii, al doilea este adresa unui element din
masiv.
Valoare returnata
Functia bsearch returneaza un pointer la un membru al masivului care coincide cu obiectul
indicat de key, sau NULL daca nu se gaseste nici un membru. Daca exista mai multe elemente care
coincid cu key, poate fi returnat oricare element cu aceasta proprietate.
29.Divide and conquer algorithm technique. Tehnica de programare Fora brut i tehnica de
programare Divide et empera. Examples Exemple
Divide et impera este o clas de algoritmi care funcioneaz pe baza tacticii divide et impera. Divide et impera se bazeaz pe principiul
descompunerii problemei n dou sau mai multe subprobleme (mai uoare), care se rezolv, iar solu ia pentru problema ini ial se ob ine
combinnd soluiile subproblemelor. De multe ori, subproblemele sunt de acela i tip i pentru fiecare din ele se poate aplica aceea i
tactic a descompunerii n (alte) subprobleme, pn cnd (n urma descompunerilor repetate) se ajunge la probleme care admit
rezolvare imediat.
Nu toate problemele pot fi rezolvate prin utilizarea acestei tehnici. Se poate afirma c numrul celor rezolvabile prin "divide et impera"
este relativ mic, tocmai datorit cerinei ca problema s admit o descompunere repetat.
Divide et impera este o tehnic ce admite o implementare recursiv. Principiul general prin care se elaboreaz algoritmi recursivi este:
"ce se ntmpl la un nivel, se ntmpl la orice nivel" (avnd grij s asigurm condi iile de terminare). Aadar, un algoritm prin divide et
impera se elaboreaz astfel: la un anumit nivel avem dou posibiliti:
1.
s-a ajuns la o problem care admite o rezolvare imediat (condiia de terminare), caz n care se rezolv i se revine din apel;
2.
nu s-a ajuns n situaia de la punctul 1, caz n care problema curent este descompus n (dou sau mai multe) subprobleme,
pentru fiecare din ele urmeaz un apel recursiv al funciei, dup care combinarea rezultatelor are loc fie pentru fiecare
subproblem, fie la final, naintea revenirii din apel.