Intrebari
Intrebari
Liste
[Link] listelor ordonate linear
Listele ordonate liniar sunt structuri de date alcătuite dintr-o mulţime A={A1, A2, …, An }de
elemente (de obicei identice), între care există o relaţie determinată de poziţia lor relativă. Astfel,
fiecare element Ak are un predecesor A k-1 şi un succesor A k+1 (mai puţin elementele prim şi ultim).
secvenţial;
prin înlănţuirea elementelor
Avantaje:
-parcurgerea listei şi
se fac cu uşurinţă.
Dezavantaje:
inserarea, ştergerea de elemente din mijlocul listei sunt operaţii costisitoare, deoarece presupun
deplasarea unor elemente.
dacă numărul componentelor variază în limite largi în timpul execuţiei programului, memoria nu este
utilizată eficient, deoarece spaţiul alocat pentru tablou (static sau dinamic) este fix şi dimensiunea
alocată trebuie să fie acoperitoare.
[Link] listelor in funcţie de locul de acces la liste
În funcţie de locul de acces la liste
Lista FIFO (First In First Out ) – (coada) inserarea se face la un capăt al listei (la sfârşit), extragerea de
la celălalt capăt (din faţă).
Lista LIFO (Last In First Out) - (stivă) - operaţiile de inserare / extragere se fac de la acelaşi capăt al
listei, numit vârful stivei.
Folosind notaţiile:
I. -poziţia (indexul) în tablou de unde se face extragerea (primul element din listă) - prim;
-poziţia unde se va face înscrierea (după poziţia ultimului element din listă) – dupa ult.
Înaintea unei operaţii de adăugare se verifică dacă există spaţiu în tablou, deci dacă ncrt < N.
Exemplul 1:
# define N 100 /* lista FIFO de N numere întregi */
Typedef struct
{
tab [N]; /* tabloul de N elemente */ „Iniţial lista este vidă şi se înscrie numărul de elemente: ncrt = 0.
int prim; /* indexul primului element din listă */ Indexul primului element=0
int ncrt; /* numărul curent de elemente din listă */
} fifo;
[Link] înlănţuite
inserarea şi ştergerea unui element se reduc la modificări ale legăturilor elementelor vecine;
spaţiul de memorare poate fi alocat individual, pentru fiecare element al listei;
reordonarea unei liste nu mai necesită transferuri memorie-memorie pentru interschimbarea
elementelor.
Dezavantaje:
[Link] cu liste
[Link] se clasifica operatiile cu liste dpdv al gradului de complexitate
După gradul de complexitate, operaţiile cu liste se pot clasifica în:
-Operaţii primitive:
-Operaţii de caracterizare:
-Operaţii complexe:
Organizarea liniară de tip listă nu este întotdeauna cea mai adecvată pentru unele aplicaţii. Astfel,
dacă trebuie să descriem structura unui produs, de cele mai multe ori nu prezentăm o listă a tuturor
componentelor, ci utilizăm o descriere ierarhică. De exemplu, din punct de vedere constructiv, un
calculator este compus din unitate centrală, terminal, claviatură, alte periferice. Unitatea centrală are o
carcasă în care se află conectori şi plăci, pe fiecare placă fiind montate diverse componente - circuite
integrate, condensatori, etc.
De altfel, în vederea studierii unor proprietăţi, aproape orice obiect poate fi descompus în alte
obiecte, mai simple. Procesul de descompunere poate fi continuat pe mai multe niveluri, terminându-se
însă după un număr finit de etape, dependent de natura aplicaţiei. Fiecare obiect în parte este definit
printr-un set de atribute şi prin mulţimea obiectelor componente, care la rândul lor, sunt descrise în acelaşi
mod . Se observă că această definiţie este recursivă (un obiect este compus din mai multe obiecte) şi pune
în evidenţă o ierarhie a obiectelor.
Organizarea ierarhică este întâlnită în cele mai diverse domenii, de la organizarea administrativă a
unei ţări, la planificarea meciurilor în cadrul unui turneu sportiv, de la structurarea unei cărţi, până la
stabilirea ordinii de execuţie a operaţiilor efectuate pentru determinarea valorii unei expresii aritmetice.
Tot o structură ierarhică este şi cea a cataloagelor în care sunt grupate fişierele de pe discurile fixe
sau flexibile. Această organizare este impusă, in principal, de raţiuni de gestionare cât mai comodă a
fişierelor de diverse tipuri, aparţinând diverşilor utilizatori ai aceluiaşi sistem de calcul.
Generalizând, într-o viziune sistemică, orice entitate din natura sau societate poate fi reprezentată
ca un tot sau ca o ierarhie de componente.
O definiţie mai riguroasă a structurii de arbore este următoarea: un arbore A este fie vid, fie
format dintr-un nod rădăcină (R) , căruia îi este ataşat un număr finit de arbori. Aceştia sunt
denumiţi subarbori ai lui A, datorită relaţiei de “subordonare” faţă de rădăcină.
În concluzie, orice nod dintr-un arbore este rădăcina unui subarbore, iar orice arbore poate fi sau
poate deveni subarbore. Relaţia dintre doi subarbori nu poate fi decât de incluziune (unul este subarbore al
celuilalt) sau excluziune (cei doi subarbori nu au noduri comune, dar aparţin aceluiaşi arbore).
Nodurile fără descendenţi sunt denumite noduri terminale sau, prin analogie cu arborii din natură,
frunze .
Accesul de la rădăcina unui (sub)arbore nevid la oricare alt nod presupune parcurgerea unei căi formate
din a arce (a 0) pe care se găsesc n noduri (n = a +1). Valoarea n reprezintă nivelul pe care se găseşte
nodul faţă de rădăcină, al cărei nivel este, prin convenţie, 1.
Înălţimea unui arbore se poate defini ca maximul dintre nivelurile nodurilor terminale, deci înălţimea unui arbore
nevid este cel puţin 1 (în cazul în care arborele are un singur nod).
O altă definiţie, recursivă, este următoarea: înălţimea unui arbore este egală cu 1 + maximul dintre
înălţimile subarborilor săi. Numărul de descendenţi direcţi ai unui nod reprezintă ordinul nodului.
Observaţie: o listă este de fapt un arbore degenerat, în care toate nodurile, cu excepţia ultimului,
sunt de ordinul 1 (au câte un singur descendent direct).
Dacă toate nodurile dintr-un arbore au cel mult doi descendenţi direcţi (fii), atunci arborele este
denumit arbore binar, iar cei doi potenţiali subarbori ai unui arbore nevid sunt denumiţi subarbore stâng
şi subarbore drept. În cazul in care ordinul nodurilor nu este limitat, arborele este denumit arbore
multicăi. Totuşi, orice arbore multicăi poate fi privit ca arbore binar, dacă orice nod este considerat în
relaţie directă cu maximum alte două noduri - primul fiu şi următorul frate. Din acest motiv, în cele ce
urmează se va considera, dacă nu se precizează explicit altfel, cazul arborilor binari.
Numărul de noduri dintr-un arbore se situează între limitele determinate de ordinul şi înălţimea acestuia.
Astfel, în cazul unui arbore binar de înălţime H, numărul de noduri N este cuprins între H si 2 H-1. Rezultă
că înălţimea unui arbore binar cu N noduri poate varia între log2N şi N.
De exemplu, dacă memorăm într-o structură de arbore multicăi informaţiile despre organizarea unei
societăţi comerciale, acest arbore poate fi parcurs în mai multe moduri, în funcţie de prelucrarea dorită.
În cazul în care este solicitată lista personalului cu funcţii de conducere, aceasta poate fi tipărită in două
variante:
În prima variantă, parcurgerea arborelui se efectuează în lăţime (lărgime), iar în cea de-a doua în
adâncime.
[Link] sunt modurile particulare de parcurgere in adancime a unui arbore; detaliati
referindu-va la nodurile specifice
În cazul parcurgerii în lăţime, se tipăreşte mai întâi informaţia din nodul rădăcină, după care sunt
prelucrate, de la stânga spre dreapta, nodurile aflate pe primul nivel, apoi cele aflate pe al doilea
nivel, etc. Pentru a realiza parcurgerea, se poate folosi o coadă, iniţializată cu nodul rădăcină.
Apoi, cât timp există noduri în coadă, se repeta următoarele operaţii:
În cazul parcurgerii in adâncime, fiii unui nod sunt vizitaţi tot de la stânga spre dreapta, dar
trecerea de la fiul curent la fratele din dreapta se realizează numai după tratarea tuturor
descendenţilor fiului curent (deci a întregului subarbore dominat de acesta).
[Link]
a. Definitii graf, arc, cale
Printr-un graf se înţelege o mulţime de noduri (numite şi vârfuri) şi o aplicaţie definită pe această
mulţime cu valori în aceeaşi mulţime, care face legătura între aceste noduri, legături numite arce, care pot
fi sau nu orientate.
O cale este o succesiune de noduri aleasă astfel încât să existe arce care să reunescă nodurile respective.
O cale este simplă dacă toate nodurile, cu excepţia primului şi ultimului, sunt distincte între ele.
Un graf aciclic este un graf care nu conţine nici o cale de la un nod la el însuşi.
Un graf orientat sau digraf (prescurtare de la directed graf) G=(V,E) constă deci într-o mulţime V de
vârfuri (sau noduri) şi o mulţime E de arce. Un arc poate fi privit ca o pereche ordonată de vârfuri (v,w)
unde v este baza arcului iar w este vârful arcului. Se spune că w este adiacent lui v.
Un graf neorientat sau graf G=(N,R) este alcătuit dintr-o mulţime de noduri N şi o mulţime R de muchii.
O muchie este atunci o pereche ordonată de noduri (v,w)=(w,v).
Un graf este conex dacă oricare două noduri ale sale sunt conectate. Această proprietate este foarte
importantă, astfel într-o reţea de calculatoare este necesar ca oricare dintre ele să poată comunica cu toate
celelalte schimbând date direct sau prin intermediul altor noduri.
O componentă conexă a unui graf G este un subgraf conex indus maximal. Un graf conex aciclic este un
arbore numit arbore liber. El poate fi convertit într-un arbore orientat alegând un nod oarecare drept
rădăcină şi înlocuind fiecare muchie cu un arc orientat dinspre rădăcină.
Un graf conex G=(N,R) este biconex dacă prin omiterea oricărui nod v din N se obţine un graf G'=G-v
conex. O componentă biconexă a unui graf este un subgraf maximal conex. Un nod v din N este punct de
articulare al lui G dacă G-v nu este conex.
d. Moduri de reprezentare mai des utilizate pentru grafuri si cum trebuie sa fie
făcută alegerea unuia dintre ele
Pentru grafuri există două moduri de reprezentare mai des utilizate: matricea de adiacenţe şi listele de
adiacenţe. Alegerea uneia dintre ele trebuie fi făcută în funcţie de frecvenţa operaţiilor de acces la
nodurile şi muchiile grafurilor.
Ideea de bază a parcurgerii unui graf este simplă: se utilizează două mulţimi de noduri: vizitate şi
neexplorate cu următoarea semnificaţie:
La explorarea în lărgime, după vizitarea nodului iniţial, se explorează toate nodurile adiacente
lui, se trece apoi la primul nod adiacent şi se explorează toate nodurile adiacente acestuia.
b Explorarea în adâncime
[Link]
[Link] se mai numeste metoda Backtracking; justificati utilizarea acestei metode - in
general ineficiente - in contextul modularizarii
Modularizarea este o metodă cunoscută de descompunere într-un set de subprobleme. Metoda
Backtracking (a căutării cu revenire), în general ineficientă, având complexitate exponenţială,
poate fi utilizată la optimizarea procesului de căutare, evitând căile care nu duc la o soluţie.
[Link] de cautare
h. Ce este o regula euristica; justificati utilizarea acestei metode in cazul
algoritmilor de cautare
Cei mai mulţi algoritmi de acest tip au caracter euristic. O regulă euristică oferă o metodă de
rezolvare a problemelor, sau o metodă de căutare. Ea nu dă rezultate corecte la orice moment de timp şi
nu este garantată că găseşte cea mai bună soluţie, dar în acelaşi timp poate reduce timpul de căutare.
Metodele de acest tip pot fi folosite pentru reducerea mărimii arborilor de căutare în cazurile arborilor
foarte mari
i. Câteva dintre avantajele strategiei de căutare înapoi
Strategia de control înapoi
Prin aplicarea regulilor de descompunere problema se transformă în subprobleme de
complexitate mai mică.
Aceasta poartă şi denumirea de control dirijat prin obiectivul problemei sau control de sus în
jos. Datorită caracteristicilor sale, această metodă se mai numeşte şi reductive
Se pot menţiona câteva dintre avantajele strategiei de căutare înapoi, şi anume:
atunci când sunt necesare sau când toate posibilităţile au fost explorate, sistemul recurge la
întrebări adresate utilizatorului;
arborele de căutare este adesea mai puţin adânc decât cel aferent strategiei de căutare înainte;
procesul de raţionare este interactiv
Rezolvarea acestei probleme se bazează pe o tehnică “greedy” datorată lui E.W. Dijkstra. Ea
constă în păstrarea unei mulţimi Selectate de vârfuri ale căror distanţe minime faţă de sursă sunt
cunoscute. Iniţial, Selectate conţine doar vârful sursă; la fiecare pas, se adaugă la Selectate un
vârf a cărui distanţă faţă de un vârf din Selectate este minimă. În rezolvare se utilizează:
Algoritmul lui Dijkstra lucrează de fapt în felul următor. La fiecare pas al algoritmului, tabloul
Distanţe (notat mai departe cu D) conţine lungimea celui mai scurt drum special către fiecare vârf al
grafului. După ce adaugăm un vârf v la S, cel mai scurt drum special către v va fi de asemenea cel
mai scurt dintre toate drumurile către v. Când algoritmul se termină, toate vârfurile din graf sunt în
S, deci toate drumurile de la sursă către celelalte vârfuri sunt speciale şi valorile din D reprezintă
soluţia problemei.
8.2Cum se mai numeste metoda Kruskal si pe ce se bazeaza algoritmul
Kruskal
O metodă de asemeni des utilizată în calcule este aceea a arborelui minim de acoperire
(Kruskal). Algoritmul construieşte treptat mulţimea T a muchilor arborelui minimal adăugând la
fiecare pas muchia care nu formează cicluri cu muchiile aflate deja în T.
Dacă (v,w) aparţine lui R, atunci subgraful având nodurile v şi w şi muchia (v,w) este biconex.
Fiecare muchie a grafului aparţine unei singure componente biconexe. Altfel spus, componentele
biconexe ale unui graf induc o partiţie pe muchiile sale. Totodată, dacă există un ciclu simplu prin
nodurile u şi v atunci u şi v aparţin aceleiaşi componente biconexe.
[Link] pentru simulare 3D
Algoritmi "spaţiu-obiect"
Algoritmi "spaţiu-imagine
Primii iau în considerare faptul că la receptorul vizual ajung numai razele de lumină
reflectate de porţiunile de faţetă nemascate (între acestea şi observator nu se interpune nici o
altă faţetă). Deci se compară fiecare faţetă dintre cele NF existente cu toate celelalte faţete ale
corpului, în scopul de a elimina acele porţiuni care nu sunt vizibile (sunt mascate).
Subrutinele de comparare sunt parcurse de NF × NF ori.
Algoritmii "spaţiu-imagine" presupun analiza pixel cu pixel a zonei de lucru din ecran pentru
a determina care anume dintre faţete este vizibilă într-un anumit punct. Dacă ecranul are NP
pixeli, atunci subrutinel de comparare vor fi parcurse de NF × NP ori.
Se observă că NF2 << NF × NP. Am fi tentaţi să credem că efortul de calcul va fi mai important
în abordarea "spaţiu-imagine". În realitate, chiar pentru valori relativ mici ale NF, algoritmii
"spaţiu imagine" sunt mai rapizi, deoarece subrutinele de comparare individuală sunt mult mai
simple şi deci consumă mai puţin timp.
Pentru reprezentarea imaginii suprafeţei pe ecran s-a utilizat forma de reprezentare Hermite:
suprafaţa să treacă prin patru puncte din spaţiu, corespunzătoare valorilor extreme 0 şi 1 pentru
parametrii s şi t (notate cu P00, P01, P10, P11, ) şi să aibă trei tangente la suprafaţă, date în fiecare
dintre aceste puncte.