Sunteți pe pagina 1din 8

1.

Aratati prin ce se deosebesc succesiv urmatoarele metode de programare:divide-et-


impera,programare dinamica si greedy.

Metoda divide et impera imparte problema in subprobleme disjuncte care sunt rezolvate recursiv, iar
apoi solutiile acestora sunt combinate pentru a rezulta solutia problemei initiale. In contrast,
programarea dinamica imparte problema in subprobleme care au parti comune, fiecare fiind
rezolvata o singura data, solutia fiind salvata intr-o tabela cu solutii. Solutiile optime pot fi multiple.
Metoda Greedy face alegerea care pare a fi optima la momentul respectiv, rezultand astfel un optim
local, ales in speranta ca acesta va conduce la un optim global.

2.Prezentati si explicati doua operatii posibile de efectuat pe arbori binari de cautare care
pastreaza proprietatile arborelui si in acelasi timp contribuie la echilibrarea acestora

LEFT-ROTATE(T, x)
Y=x.right
x.right=y.left
if y.left=/=T.nil
y.left.p=x
y.p=x.p
if x.p==T.nil
T.root=y
Else if x==x.p.left
x.p..left=y
else x.p.right=y
y.left=x
x.p=y
*Rotatia spre dreapta pe un nod y-presupunem ca fiul stang al acestuia,y, este != NULL
-rotatia pivoteaza in jurul legaturii de la y la x,transforma pe x in radacina a subarborelui,
pe y in fiu drept a lui x si pe fiul drept a lui x in fiu stang a lui y ; -daca executam arbore-insereaza si
arbore sterge,se modifica arborele si se poate incalca prop rosu negru ; este o operatie locala intr-un
arobore
de cautare ce conserva ordonarea cheilor -executie O(1),se modifica numai pointerii prin rotatie
RIGHT-ROTATE(T,x)
y=x.left
x.left = y.right
if y.right != NULL
y.right.p=x
y.p = x.p
if x.p == NULL
T.root=y
else if x == x.p.left
x.p.left = y
else x.p.right = x
y.right = x
x.p = y
3.Realizati o paralela intre algoritmul lui Dijkstra pe un graf echipat cu o functie de cost ne-negativa
si una din parcurgerile posibile alea grafului

4.Comparati algoritmii lui kruskal si prim

Comparati algoritmii lui kruskal si prim

-fiecare foloseste o regula specifica pentru determinarea unei muchii sigure

-in kruksal multimea A este o padure,muchia sigura adaugata la A, este intotdeauna

o muchie de cost minim din graf care uneste 2 puncte distincte

-in Prim multimea A formeaza un singur arbore, muchia sigura este intotdeauna, o muchie de cost
minim

care uneste arborele cu un varf care nu se afla in el

-ambele folosesc o strtegie greedy, deoarece arborelui ii este adaugata la fiecare pas o muchie care
adauga cel mai

mic cost la costul total al arborelui

5.Comparati implementarile ADT lista prin siruri(arrays) sau pointeri

6.Fie urmatoarea problema.Sa se explice si analizeze solutia acestei probleme,furnizand inclusiv a


justificare a corectitudinii si complexitatii acesteia. Matrix-Chain-Order(p)

7.Definiti in mod formal problema drumurilor de cale minima in grafe,prezentati ideea unui

algoritm generic de rezolvare a acestei probleme si aratati modul in care

acest algoritm generic se particularizeaza intr-unul din algoritmii Bellman-Ford sau Dijkstra

Costul minim al drumului dintre doua noduri este minimul dintre costurile drumurilor existente intre
cele doua noduri. Deși, in cele mai multe cazuri, costul este o funcție cu valori nenegative, exista
situații in care un graf cu muchii de cost negativ are relevanta practica. O parte din algoritmi pot
determina drumul corect de cost minim inclusiv pe astfel de grafuri. Totuși, nu are sens căutarea
drumului minim in cazurile in care graful conține cicluri de cost negativ – un drum minim ar avea
lungimea infinita, intricat costul sau s-ar reduce la fiecare reparcurgere a ciclului.

Relaxarea unei muchii v1 - v2 consta in a testa daca se poate reduce costul ei, trecând printr-un nod
intermediar u. Fie w12 costul inițial al muchiei de la v1 la v2, w1u costul muchiei de la v1 la u, si wu2
costul muchiei de la u la v2. Daca w > w1u + wu2, muchia directa este înlocuita cu succesiunea de
muchii v1 - u, u - v2.

Algoritmul lui Dijkstra

Dijkstra poate fi folosit doar in grafuri care au toate muchiile nenegative.Algoritmul este de tip
Greedy: optimul local căutat este reprezentat de costul drumului dintre nodul sursa s si un nod v.
Pentru fiecare nod se retine un cost estimat d[v], inițializat la început cu costul muchiei s → v, sau cu
+∞, daca nu exista muchie.

8.Aratati ca metoda de sortare quicksort este o forma de aplicare a metodei de programare

divide-et-impera.

Metoda de sortare quicksort este o forma de aplicare a metodei de programare divide et impera
deoarece imparte sirul care trebuie sortat in 2 subsiruri, urmand apoi ca acestea sa fie sortate
recursiv, iar apoi sa fie combinate formand sirul initial sortat.

Fie sirul a[p...r]

Quicksort(a, p, r)

If p<r
Q=partition(a, p, r)
quicksort(a, p, q-1)
quicksort(a, q-1, r)
Partition(a, p, r)
x=a[r]
i=p-1
for j=p to r-1
if a[j] <= x
i=i+1
exchange a[i] with a[j]
exchange a[i+1] with a[r]
return i+1
9.Explicati diferenta dintre un sir de numere si un dictionar.Prezentati o modalitate
prin care se poate implementa un dictionar

10.Descrieti metoda programarii dinamice


Se imparte problema in subprobleme care au parti comune, se rezolva fiecare problema o singura
data si se salveaza rezultatul acestora intr-o tabela cu rezultate.
Pasi:
1.Se caracterizeaza structura unei solutii optime
2.In mod recursiv, se defineste valoarea unei solutii optime
3. Se calculeaza valoarea unei solutii optime pornindu-se de sus in jos
4.Se calculeaza solutia optima pe baza informatiei obtinute pana in acest pas.
11.Explicati rolul santinelei in realizarea operatiilor pe arbori binari de cautare
Rolul santinelei este de a face mai simple conditiile la limita din cod.Vom folosi santinela pentru a
reprezenta NULL.Santinelele se folosesc pentru a trata unitar toate nodurile arborelui: un fiu NUL
al unui nod x se va putea considera ca si nod obisnuit al carui parinte este x.Folosim santinela
pentru a reprezenta toate nodurile NUL.

12.Pentru un graf reprezentat prin matrice de adiacenta,furnizati un alg care sa

parcurga nodurile grafului in latime

13.Dynamic-0-2-Knapsack(v,w,nW).Explicati algoritmul.Care este complexitatea.Un hot..

14.Greedy
Greedy face intodeauna alegerea care pare cea mai buna in fiecare moment, in speranta ca aceasta
va conduce la solutia optima. Greedy nu conduce, induce la alegerea optimala.
Strategii greedy
1. Determinăm structura optimală a problemei
2. Dezvoltăm o soluție recursivă pe baza soluției optimale
3. Arătăm că dacă se efectuează o alegere greedy, rămâne doar o subproblemă
4. Arătăm că alegerea greedy este sigură
5. Dezvoltăm un algoritm recursiv pentru rezolvarea problemei greedy
6. Convertim algoritmul recursiv intr-unul iterativ
Proprietatea alegerii greedy: alegem alternativa care apare ca si cea mai promitătoare la problema
curentă, fără a rezolva subproblemele.

15.Backtracking
Brute force search: se caută in setul tuturor solutiilor posibile
Backtracking: reprezintă o reformulare a căutării de tip brute force
1. Presupunem că o solutie este formată din vectorul S={𝑣_1,𝑣_2,…,𝑣_𝑚 }. Prin backtracking vom
traversa în adâncime domeniile vectorilor 𝑣_𝑖 până când identificăm o solutie
2. Pornim de la solutia vidă 𝑆=∅
3. La pasul pasul 𝑖 introducem în soluție o un element din spațiul 𝑆_𝑖 de elemente posibile pentru 𝑣_𝑖
4. Dacă un vector construit partial{𝑣_1,𝑣_2,…,𝑣_𝑖 } nu poate conduce la o soluție, atunci revenim și
realizăm următoarea alegere posibilă pentru 𝑣_𝑖∈𝑆_𝑖
5. Dacă toate elementele din 𝑆_𝑖 s-au epuizat, atunci se revine la 𝑆_(𝑖−1)
Esentiale sunt conditiile de continuare Φ care ne spun dacă un vector parțial {𝑣_1,𝑣_2,…,𝑣_𝑖 } poate
conduce la o solutie
16.Arbore rosu negru
Arbore roșu-si-negru: arbore binar de căutare la care fiecare nod are bit suplimentar, reprezentând
culoarea: roșu sau negru.
Fiecare nod de arbore conține următoarele campuri: cheia, culoarea, nodul stâng, nodul drept și
părintele
Proprietăți arbore roșu-negru:
1. Fiecare nod este sau roșu sau negru
2. Rădăcina este negru
3. Fiecare frunză (NIL) este neagră
4. Dacă un nod este roșu, atunci amândoi copii sunt negrii
5. Pentru fiecare nod, toate căile simple de la nodul respectiv la frunzele descendente conțin același
număr de noduri negre

17.Ciclu hamiltonian
Ciclul Hamiltonian-Având un graf orientat G=(V,E) ;este un ciclu simplu care conţine toate nodurile
din G ; Dacă G conţine un c. Hamiltonian atunci G este graf Hamiltonian . Nu există noduri cu gradul ;
Dacă un nod are gradul 2 atunci ambele muchii incidente lui trebuie să fie într-un circuit Hamiltonian;
Graful trebuie să conţină un subgraf H cu prop:
H să conţină toate nodurile grafului;
H să fie conex ;
H are număr de noduri egal cu numărul de muchii.
Toate nodurile din H au gradul 2 ;
Fie G un graf conex cu cel puţin 3 noduri; Dacă fiecare nod din G este adiacent cu cel puţin jum
din nr nodurilor rămase în G, atunci graful conţine un ciclu Hamiltonian. (Teorema lui Dirac)

18.Pentru o lista dublu inlantuita,circulara cu santinela=>Search si insert


LIST-SEARCH(L, K)
x=L.nil.next
while x!=L.nil and x.key !=k
x = x.next
return x

LIST-INSERT(L, x)
x.next = L.nil.next
L.nil.next.prev=x
L.nil.next=x
x.prev=L.nil

19.Rotatia spre dreapta a unui arbore

20.Graf repr prin matr de adiacenta ->Algoritm care sa identifice comp tare-conexe ale grafului
21.Programare dinamica

Programare dinamică: se imparte problema in subprobleme care au părți comune:


Subproblemele partajează cel putin o sub-subproblemă comună
PD rezolvă fiecare sub-subproblemă o singură dată si salvează rezultatul intr-o tabelă cu rezultate.
Pasi:
1.Se caracterizează structura unui soluții optime
2.In mod recursiv, se definește valoarea unui soluții optime
3.Se calculează valoarea unei soluții optime pornindu-se de jos în sus
4.Se calculează soluția optimă pe baza informației obtinute până în acest pas

23.Alg Deterministic/nedeterministic.Determinacy race + exemple

Daca la fiecare executie asupra acelorasi intrari se produc aceleasi iesiri indiferent de modul in care
instructiunile sunt programate pe calculatorul multicore = deterministic.
Daca comportamentul algoritmului poate sa difere de la o executie la alta = nedeterministic
Determinancy race = atunci cand doua instructuri logic paralele acceseaza aceeasi locatie de
memorie, si una din
instructiuni realizeaza o operatie de write.
Pentru a nu avea problema competitiei intre secventele paralele, presupunem ca acestea sunt
independente: nu au
race determinancy intre ele.
RACE-EXAMPLE()
1. x = 0
2. Parallel for i = 0 to 2 (creare 2 fire paralele) ;
3. x = x + 1 (fiecare fir incrementeaza x) ;
4. Print x
24.Procedura care gaseste predecesorul unui el intr-un arbore binar de cautare
tree-predecessor(x)
if x.left != NULL then
return TREE-MAXIMUL(x.left)
y=x.p
while y!= NULL and x = y.left do
x=y
y=y.p
return y
*tree-successor(x)
if x.right != NULL then
return Tree-Minimum(x.right)
y=x.p
while y!=NULL and x=y.right do
x=y
y<-y.p
return y
25. Complexitate
*Complexitatea algoritmilor repr puterea de calcul necesara impl unui algoritm.Ea are două comp
principale, și anume comp în timp și cea în spațiu.Compl în spațiu se referă la vol de memorie
necesar calculelor,iar cea în timp se referă la timpul necesar efectuării calculelor.Este utila pentru a
compara
2 alg din pct de vedere al eficientei.Tot timpul v-om alege alg mai eficient,cel care se executa in cel
mai scurt timp si cel care se foloseste de cea mai putina memorie. Ordinul de complexitate il repr
timpul de executie. O(n) algoritm liniar,O(n la m) polinomial, O(k la n) alg exponenential ;
O(log n)-algoritmic, O(nlogn) algoritm liniar logaritmic . Pot determina complexitatea unui alg
pe mai multe cazuri:cazul defavorabil,cel mai bun, fiecare caz si cazul mediu.

26.Prezentati conceptul de sortare topologica si furnizati un alg care sa realizeze aceasta sortare

27.Descrieti spawn,sync,parallel pe calculatoare multi-procesor

28.Ce este o componenta tare conexa si ce este un arbore de acoperire minim

29.Implementarea paralela a alg Quick Sort

30.Suma el unui sir Divide and conquer

31.Pentru un graf repr prin matrice de adiacenta furnizati un alg care sa parcurga nodurile grafului
in latime

37.Ce este un heap si ce prop indeplinesc el lui? Ce este un arbore binar de cautare?

Un heap este un sir de obiecte care pot fi văzute ca și un arbore binar aproape complet.Ultimul rand
al arborelui se completează
de la stânga la dreapta.Un sir A care reprezintă un heap are 2 atribute: A.length: Lungimea heapului –
ne furnizează nr de elemente din sir

A.heap-size: ne spune câte elemente din heap sunt stocate in sirul A. Pentru un nod i avem:
PARENT(i) = i/2 - imparțire intreagă ;
LEFT(i) = 2i ;
RIGHT(i) = 2i+1

*HEAPSORT(A)
BUILD-MAX-HEAP(A)
for i <- length[A] downto 2;
do
exchange A[1] cu A[1];
heap-size[A] <- heap-size[A] -1;
MAX-HEAPIFY(A,1)
*BUILD-MAX-HEAP(A) heap-size[A] <- length[A]; for i <- [length[A]/2] downto 1; do MAX-HEAPIFY
(A,i);
*MAX-HEAPiFY(A,i) l <- LEFT(i) ; r <- RIGHT(i); if l <= heap-size[A] and A[l] > A[i]; then largest <- l else
largest <- i;
if r <= heap-size[A] and A[r] > A[largest] then largest <- r; if largest != i ; then exchange A[i] cu
A[largest]; MAX-HEAPIFY(A,largest)

38.Definiti problema arborilor minimali de acoperire si furnizati sol generica a aceste probl.

42.Furnizati un alg pentru metoda de cautare backtracking

45.Prezentati asemanari si diferente intre tabele de dispersie si arbori binari de cautare

46.Cum se poate gasi calea cea mai scurta intre doua noduri ale unui graf neorientat

47,Prezentati dif dintre bellman si dijkstra

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