Sunteți pe pagina 1din 15

1. Structuri de date.

Clasificarea i caracteristica general


O structura de date este un set de operatii, care poate fi caracterizate ca un lucru, o
entitate noua.
O structur de date este o metod sistematic de stocare a informaiilor idatelor ntr-un calculator, n aa
fel nct ele s poat fi folosite n mod eficient.

O structura de date este un set de operatii, care poate fi caracterizate ca un lucru, o


entitate noua.
SD-1. SD liniare
2. SD neliniare
SD liniare- *tablou(uni-dimensional; multidimensional); *structura, record, inregistrare;
*liste lantuite liniare[unidimensionale(stiva- stack, coada-quene) multidimensionale]
SD neliniare-*liste lantuite neliniare multi-directionale; *graf[arbore(arbori de gradul
m>2; arbori binari)]
O lista liniara este un set finit de elemente ordonate liniar, adica exista unelement
considerat primul in lista, un element considerat ultimul si pentru orice altelement din
lista exista un element precedent si un element urmator. Principalele operatii cu liste
sunt:
accesarea sau modificarea unui element din lista
inserarea unui element in lista
eliminarea unui element din lista
Modul in care aceste operatii sunt efectuate depinde de modul in care
suntreprezentate listele. Exista doua feluri de reprezentari: secventiala si inlantuita
2. Structura de date, tipul de date i tipul de date abstract
Tip de date reprezinta un set de valori si operatiuni asupra lor. Tipurile de date n C pot
fi mprite n dou categorii: simple (elementare) i compuse (structurate) Sunt 2
tipuri de date:
*Tipuri de date predefinite
*Tipuri de date definite de programator utilizind conceptia tipului de date abstract
Tipulabstractdedatereprezintaunmodelmatematicalstructuriide
datestudiatesioperatiuniasupradatelor.
Structura este un grup de variabile de tipuri diferite reunite sub acelasi nume, ce pune
la dispozitia utilizatorului un mod convenabil de pastrare a informatiilor legate intre
ele.
Declararea unei structuri creeaza un nou tip de date ce poate fi folosit pentru a crea
variabile de acel tip. Variabilile unei structuri, pot fi denumite campuri,membri sau
elemnte sunt identificate prin nume simbolice, denumite selectori. Campurile unei
structuri pot fi de orice tip, simplu sau derivat, dar nu void sau functie.
Declararea structurilor se face folosind cuvantul cheie struct:
struct nume_generic{ // struct-cuvint rezervat numele tipului de date;
nume_generic-numele dat noului tip de date,optional;
tip nume_membru1;//tip-orice tip de data admis de C;
tip nume_membru2;//nume_membru_i-numele membrului structurii
.................................
tip nume_membrun;
}lista_variabile;//o lista de variabile de tip nume_generic daca apare sau anonim daca
nu apare, este optionala; nume_generic saulista_variabile pot lipsi, dar nu simultan.
3. Etape de implementare a tipului de date abstract n limbajul C

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

urmatorul articol, cit si cu precedentul .


Aceasta
figura indica modul de dispunere al acestor legaturi. Existent a doua legaturi in locul
uneia singure prezinta mai multe avantaje, din care poate cel mai important rezida in
faptul ca lista poate fi citita in ambele directii. Construirea unei liste dublu inlantuite
este un process asemanator celui de alcatuire a unei liste simplu inlantuite, cu
deosebirea ca sunt necesare doua legaturi. Structura trebuie sa asigure spatiu pentru
ambele.
Ca modalitate de implementare, putem defini un tip de date inregistrare in care partile
dinamice vor fi pointeri catre acelasi tip, pentru a retine adresa nodului din stanga,
respectiv adresa nodului din dreapta si vor fi numite in continuare "st", respectiv "dr"
iar partea statica va fi numita "info":
struct nod
{
< tip> info;
nod *st, *dr;
};
typedef struct nod *NOD;
8.Queue. Coada. Implementation of abstract data type Queue in C language
Implementarea tipului de date abstract "Coada" n limbajul C
O coada este o lista liniara in care stergerea si accesarea unui element se potface numai pe la un capat al cozii,
numit front, iar inserarea se face la celalalt capat alcozii, numit rear. Se poate face o analogie intre o coada
folosita in programare si, deexemplu, o coada pentru tiparirea mai multor fisiere text. Pentru tiparirea unui
noufisier va trebui sa asteptam pana cand toate fisierele sunt tiparite in ordinea in carecomenzile de tiparire au
fost efectuate.Cozile se mai numesc si liste FIFO (first in/first out) deoarece primul elementcare este extras
din coada este primul introdus
#define DimMax 100

//numarul maxim de elemente din coada

typedef int Coada[DimMax];

//tipul coada implementat ca vector

Coada C;

//coada

int Inc, Sf;

//inceputul si sfarsitul cozii

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.

10.Trees. Arbori. Classification and general characteristics Clasificarea i caracteristica general


Un graf neorientat conex fara cicluri se numeste arbore. Un tip special de arbore il
constituie un arbore, o structura arborescenta, similara cu un arbore din natura sau cu
un arbore genealogic, in care se pune in evidenta un nod, numit radacina. Deci putem
spune ca un arbore este o multime de noduri legate intre ele prin muchii ce indica
relatiile dintre noduri, relatii de tip tata-fiu, similare arborilor genealogici. Nodurile sunt
arajate pe nivele. Pe nivelul 0 se afla un singur nod, radacina. Nodurile fiecarui nivel al
aborelui sunt fii nodurilor nivelului precedent. Un nod care are fii se numeste tata. Fii
cu acelasi tata se numesc frati. Se numeste inaltime a unui arbore lungimea celui mai
lung drum de la radacina la un nod terminal din arbore Arbori pot fi: binari...
Un arbore in care orice nod nu are mai mult de 2 fii se numeste arbore binar.
Arborii binari pot fi de mai multe tipuri: a.b. adecvat si a.b.perfect

11.Different forms of tree representation in the memory of computer Diferite forme de reprezentare
a unui arbore n memoria calculatorului

Reprezentarea cu ajutorul vectorilor de tip tata


Reprezentarea cu ajutorul a doi vectori: stang si drept . Pentru fiecrare nod i stang[i] retine
numarul de ordine al nodului stang subordonat de i, iar drept[i] retine numarul de ordine al
nodului drept subordonat de i. Daca nu exista nod subordonat, retine 0.

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

Pentru fiecare nod al arborelui se precizeaza informatia si descendentii directi ca


elemente ale unei structuri definita astfel:
struct nodarbore
{
T info;
struct nodarbore *stang;
struct nodarbore *drept;
};
typedef struct nodarbore NODARB;
unde T este presupus definit anterior (eventual printr-o definitie typedef), stang este
pointer la subarborele stang al nodului, iar drept este pointer la subarborele drept al
nodului. Pentru identificarea radacinii arborelui vom defini NODARB rad; drept un
pointer la radacina arborelui. Daca unul din subarbori este vid, atunci pointerul la acel
subarbore este NULL

13.Binary Tree level by level and recursive traversals Arbore binar. Parcurgeri pe niveluri i
parcurgeri recursive

Parcurgerea pe niveluri S-D; D-S


Parcurgeri recursive:

in preordine: intai vizitam radacina arborelui, apoi subarborele stang urmat


de subarborele drept
o in inordine (simetrica): intai vizitam subarborele stang, , apoi radacina
arborelui si apoi subarborele drept
in postordine: intai vizitam subarborele stang si subarborele drept si ultima
data radacina arborelui
o

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.

17. Arbore binar de cutare. Algoritm pentru tergerea unui nod


Se caut nodul de ters i se terge nodul. Subarborele drept este avansat n locul
nodului ters, iar subarborele stng este mutat ca fiu al celui mai mic element din
subarborele drept

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

cutare, permind astfel ca ieirile de la calculator s poat fi adaptate cerinelor


umane. 0 caracteristic important a unui algoritm de sortare este stabilitatea. Este
util ca o metod de sortare sa fie stabil n cazul unei duble sau multi sortri. De
exemplu, dac avem o secven de nregistrri coninnd un cmp nume i un cmp
nota, secvena fiind sortat dup nume, i dac sortm secvena i dup nota, atunci
n secvena final pentru o sortare stabil nregistrrile cu aceeai valoare a cmpului
not vor fi nc n ordine alfabetic.
0 a doua caracteristic important a unei metode de sortare este naturaleea. 0
metod de sortare este natural dac timpul de execuie scade odat cu creterea
gradului de sortare iniial.
Prin calculul de complexitate, care se va face pentru fiecare algoritm, se nelege
analiza algoritmului din care s reias o dependen ntre dimensiunea datelor de
intrare i timpul de execuie. Se pot defini diferite msuri (metric) pentru intrare, dar
pentru problema sortrii cea mai natural msur este dat de numrul de elemente
de sortat.

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.

24. Algoritm de sortare rapid (quicksort)


Quicksort este un celebru algoritm de sortare, dezvoltat de C. A. R. Hoare i care, n medie, efectueaz
pentru a sorta n elemente. n cazul cel mai ru, efectueaz
ceilali algoritmi de sortare de complexitate

comparaii

comparaii. De obicei, n practic, quicksort este mai rapid dect


deoarece bucla sa interioar are implementri eficiente pe majoritatea

arhitecturilor i, n plus, n majoritatea implementrilor practice se pot lua, la proiectare, decizii ce ajut la evitarea cazului cnd
complexitatea algoritmului este de

. Quicksort efectueaz sortarea bazndu-se pe o strategie divide et

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

qsort - sorteaza un masiv


bsearch - cautare binara ntr-un masiv sortat
#include <stdlib.h>
void qsort(void *base, unsigned nel,
unsigned size, int (*comp)
(const void *, const void *));
void *bsearch(const void *key, const void
*base, unsigned nel, unsigned size, int

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.

28.Algorithm techniques. Tehnici de programare. Classification and general characteristics


Clasificarea i caracteristica general
O clasificare a cunoasterii importanta pentru programare n general se refera la
continutul acesteia, existnd urmatoarele trei categorii: cunoastere procedurala,
declarativa sitacita.
Cunoasterea procedurala se refera la a sti cum sa faci ceva, adica a sti mijloacele
pentru a
ajunge la un anume rezultat
Cunoasterea declarativa se refera la a sti daca un enunt este adevarat sau fals
(o asemenea cunoastere ar trebui sa se foloseasca n justitie!).
Cunoasterea tacita (denumita uneori si neconditionata, datorata inconstientului) este
cunoasterea ce nu poate fi exprimata prin limbaj (un exemplu de acest fel este
cunoasterea privind mersul pe bicicleta).
Tehnici de programare:
Clasa limbajelor procedurale se bazeaza pe notiunea de algoritm. Acesta este o
metoda de
a rezolva o problema ntr-un numar finit de pasi, folosind o multime finita de operatii
(instructiuni)
cunoscute, care executate ntr-o ordine bine stabilita, pornind de la un set de valori
(intrarile), produc
n timp finit un alt set de valori (iesirile).
Limbajele imperative sau orientate pe instructiune (n engleza statement-oriented)
au ca o
caracteristica esentiala aceea ca programul este un sir de instructiuni - comenzi,
preciznd
calculatorului operatiile pe care trebuie sa le execute la momente succesive de timp.
Aceste limbaje

au fost dezvoltate pentru a elibera programatorul de lucrul n cod masina si n acest


sens au fost
prevazute cu facilitati privind manipularea variabilelor, operatiile de atribuire si
asigurarea repetarii
unor secvente.
Programarea functionala este centrata pe notiunea de functie. Aici programul este
vazut ca
o functie, care se obtine din compunerea mai multor functii simple, fie functii sistem,
fie definite de
utilizator.
O alta trasatura pe care au dorit sa o realizeze limbajele functionale este asa numita
transparenta referentiala. Aceasta este o caracteristica a limbajului folosit n
matematica si care nu
a fost respectata n limbajele imperative. Ea se refera la faptul ca ntelesul unui ntreg
este complet
determinat de ntelesul partilor, neputnd apare efecte parazite datorita combinarii
partilor sau unor
relatii de ordine dintre ele.

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.

30.Dynamic programming algorithm technique. Tehnica de programare Backtracking i


programarea dinamic.Examples Exemple
Deseori n practica trebuie s rezolvm probleme care au un numar foarte mare de soluii posibile.
De cele mai multe ori nsa, nu ne intereseaza toate soluiile, ci numai o parte dintre ele, care
ndeplinesc anumite condiii specifice problemei.
Pentru astfel de probleme este indicat folosirea metodei backtracking care evit generarea soluiilor
inutile. Backtracking este numele unui algoritm general de descoperire a tuturor soluiilor unei probleme de
calcul, algoritm ce se bazeaz pe construirea incremental de soluii-candidat, abandonnd fiecare candidat
parial imediat ce devine clar c acesta nu are anse s devin o solu ie valid. [1][2][3]
Exemplul de baz folosit n numeroase manuale de liceu i de nivel universitar este problema reginelor, care
cere s se gseasc toate modurile n care pot fi a ezate pe o tabl de ah opt regine astfel nct s nu se
atace. n abordarea backtracking, candidatele pariale sunt aranjamente de cte k regine pe primele k rnduri
ale tablei, toate pe rnduri i coloane diferite. Orice solu ie par ial ce con ine dou regine care se atac
poate fi abandonat, deoarece n mod clar restul de regine nu pot fi a ezate ntr-o solu ie valid.
Tehnica backtracking se poate aplica doar pentru probleme ce admit conceptul de candidat par ial de
soluie i ofer un test relativ rapid asupra posibilitii ca un astfel de candidat s fie completat ctre o solu ie
valid. Cnd se poate aplica, ns, backtrackingul este adesea mult mai rapid dect cutarea prin metoda
forei brute prin toi candidaii, ntruct este capabil s elimine dintr-un singur test un mare numr de
candidai.
Backtrackingul este util la rezolvarea unor probleme de satisfacere a constrngerilor, cum ar fi cuvintele
ncruciate, jocuri de sudoku i alte probleme similare. Ea st la baza unei serii de limbaje de programare
logic, cum ar fi Icon, Planner i Prolog.

Programarea dinamic rezolv problemele prin descompunerea lor n subproblemei


prin combinarea rezolvrilor acestora. Programarea dinamic se aplic n general
problemelor de optimizare, atunci cnd dorim s determinm rapid soluia optim
pentru o problem. De fapt, aplicnd aceast tehnic determinm una din soluiile
optime, problema putnd avea mai multe soluii optime.
Aplicarea acestei tehnici de programare poate fi descompus n urmtoarea secven
de pai:
1. Descoperirea structurii i "msurii" pe care o are o soluie optim.
2. Definirea recursiv a valorii care caracterizeaz o soluie optim.
3. Calcularea "de jos n sus" a acestei valori.
4. Construirea soluiei optime pornind de la calculele efectuate anterior

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