Documente Academic
Documente Profesional
Documente Cultură
P: 1
I: Sortarea stabila este acea sortare care
V1: pastreaza, pe tot parcursul executarii sale toate inregistrarile in memoria
interna a calculatorului
V2: poate ordona o anumita clasa de obiecte concrete sau abstracte, dupa unul sau
mai multe criterii impuse
V3: in urma executarii sale face ca inregistrarile cu chei egale sa isi
pastreze pozitiile relative
V4: nu pastreaza toate inregistrarile in memoria interna a calculatorului ci foloseste
pentru memorare si spatii pe memoriile externe
R: 3
P: 1
I: Sortarea interna este aceea sortare care
V1: nu pastreaza toate inregistrarile in memoria interna a calculatorului ci foloseste
pentru memorare si spatii pe memoriile externe
V2: pastreaza, pe tot parcursul executarii sale toate inregistrarile in
memoria interna a calculatorului
V3: in urma executarii sale face ca inregistrarile cu chei egale sa isi pastreze
pozitiile relative
V4: poate ordona o anumita clasa de obiecte concrete sau abstracte, dupa unul sau
mai multe criterii impuse
R: 2
P: 1
I: Sortarea externa este aceea sortare care:
V1: pastreaza, pe tot parcursul executarii sale toate inregistrarile in memoria
interna a calculatorului
V2: in urma executarii sale face ca inregistrarile cu chei egale sa isi pastreze
pozitiile relative
V3: poate ordona o anumita clasa de obiecte concrete sau abstracte, dupa unul sau
mai multe criterii impuse
V4: nu pastreaza toate inregistrarile in memoria interna a calculatorului ci
foloseste pentru memorare si spatii pe memoriile externe
R: 4
P: 1
I: Structurile de date reprezinta:
V1: modalitati in care datele sunt dispuse in memoria calculatorului
V2: colectii organizate de date
V3: tipuri de variabile de memorie
V4: tipuri de date definite de utilizator cuprinzand variabile multiple
R: 1
P:1
I: Algoritmii reprezinta
V1: succesiuni de pasi bine definiti scrisi pentru rezolvarea unei probleme
V2: metode de calcul alcatuite din pasi elementari necesari rezolvarii unor probleme
V3: metode generale de rezolvare a unui anumit tip de problema
V4: procedurile pe care programele le efectueaza pentru a manipula
datele din structurile de date
R: 4
P: 1
I: Care din urmatoarele reprezinta avantaje ale tablourilor?
V1: Inserarea si stergerea sunt rapide, iar accesul este foarte rapid
V2: Cautarea si stergerea sunt rapide, iar accesul la celelalte elemente este rapid
V3: Inserare este rapida, iar accesul este foarte rapid daca indexul este
cunoscut
V4: Cautarea, inserarea si stergerea sunt rapide, iar accesul este rapid
R: 3
P: 1
I: Care din urmatoarele reprezinta avantaje ale tablourilor ordonate?
V1: Cautarea este mai rapida decat in cazul tablourilor nesortate
V2: Inserarea, stergerea si accesul la elementul maxim sunt rapide
V3: Accesarea este foarte rapida pe baza unei chei
V4: Inserarea este rapida, iar accesul este foarte rapid daca indexul este cunoscut
R: 1
P: 1
I: Care din urmatoarele reprezinta avantaje ale listelor nlantuite?
V1: Cautarea, inserarea si stergerea sunt rapide
V2: Inserarea si stergerea sunt rapide
V3: Accesarea este foarte rapida
V4: Inserarea este rapida
R: 2
V4: obisnuita care are in plus o referinta catre prima legatura din lista
R: 3
P: 2
I: Urmatorul cod reprezinta inserarea unui element
[pre][code]public void insert(long dd) {
Link newLink = new Link(dd);
if( isEmpty() )
last = newLink;
newLink.next = first;
first = newLink;
}
}[/code][/pre]
V1: inaintea ultimului element din lista cu doua capete
V2: dupa primul element din lista cu doua capete
V3: la sfarsitul listei cu doua capete
V4: la inceputul listei cu doua capete
R: 4
P: 2
I: Urmatoarea secventa de instructiuni reprezinta inserarea unui element
[pre][code]public void insert(long dd) {
Link newLink = new Link(dd);
if( isEmpty() )
first = newLink;
else
last.next = newLink;
last = newLink;
}
}[/code][/pre]
V1: la sfarsitul listei cu doua capete
V2: dupa primul element din lista cu doua capete
V3: inaintea ultimului element din lista cu doua capete
V4: la inceputul listei cu doua capete
R: 1
P: 2
I: Urmatorul cod reprezinta stergerea
[pre][code]public long delete() {
long temp = first.dData;
if(first.next == null)
last = null;
first = first.next;
return temp;
}
}[/code][/pre]
V1: celui de-al doilea element din lista cu doua capete
V2: primului element din lista cu doua capete
V3: celui de-al treilea element din lista cu doua capete
V4: ultimului element din lista cu doua capete
R: 2
R: 3
P: 2
I: Urmatoarea secventa de instructiuni reprezinta inserarea unui element
[pre][code]public void insert(long dd) {
Link newLink = new Link(dd);
if( isEmpty() )
first = newLink;
else {
last.next = newLink;
newLink.previous = last;
}
last = newLink;
}[/code][/pre]
V1: la sfarsitul listei cu doua capete
V2: la sfarsitul listei dublu inlantuite
V3: la inceputul listei cu doua capete
V4: la inceputul listei dublu inlantuite
R: 2
P: 2
I: Urmatorul cod reprezinta stergerea
[pre][code]public Link delete() {
Link temp = first;
if(first.next == null)
last = null;
else
first.next.previous = null;
first = first.next;
return temp;
}[/code][/pre]
V1: primului element din lista dublu inlantuita
V2: ultimului element din lista cu doua capete
V3: primului element din lista cu doua capete
V4: ultimului element din lista dublu inlantuita
R: 1
P: 2
I: Urmatoarea secventa de instructiuni reprezinta stergerea
[pre][code]public Link delete() {
Link temp = last;
if(first.next == null)
first = null;
else
last.previous.next = null;
last = last.previous;
return temp;
}[/code][/pre]
V1: ultimului element din lista dublu inlantuita
V2: primului element din lista cu doua capete
V3: ultimului element din lista cu doua capete
V4: primului element din lista dublu inlantuita
R: 1
P: 2
I: Urmatorul cod reprezinta inserarea unui element
[pre][code]public boolean insert(long e, long dd) {
Link current = first;
while(current.dData != e) {
current = current.next;
if(current == null)
return false;
}
Link newLink = new Link(dd);
if(current==last) {
newLink.next = null;
last = newLink;
}
else {
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
}[/code][/pre]
V1: inaintea unei valori date de la tastatura in cadrul unei liste dublu inlantuite
V2: dupa o cheie data de la tastatura in cadrul unei liste dublu inlantuite
V3: dupa o valoare precizata in cadrul unei liste dublu inlantuite
V4: inaintea unei chei precizate in cadrul unei liste dublu inlantuite
R: 2
P: 2
I: Urmatoarea secventa de instructiuni reprezinta stergerea elementului
[pre][code]public Link delete(long e) {
Link current = first;
while(current.dData != e) {
current = current.next;
if(current == null)
return null;
}
if(current==first)
first = current.next;
else
current.previous.next = current.next;
if(current==last)
last = current.previous;
else
current.next.previous = current.previous;
return current;
}[/code][/pre]
V1: aflat dupa o cheie data de la tastatura intr-o lista dublu inlantuita
V2: cu o valoare data de la tastatura intr-o lista dublu inlantuita
V3: cu cheia precizata intr-o lista dublu inlantuita
V4: care se gaseste inaintea unei valori precizate intr-o lista dublu inlantuita
R: 3
(Capitolul 4 Coada)
P: 1
I: Care este avantajul cozilor?
Accesul se face dup metoda
V1: ultimul sosit, primul servit
V2: primul sosit, ultimul servit
V3: ultimul sosit, ultimul servit
V4: primul sosit, primul servit
R: 4
P: 1
I: Coada este o lista liniara simplu inlantuita, de tip special, pentru care toate
inserarile
V1: si toate stergerile sunt facute la un singur capat
V2: sunt facute la unul din capete, iar toate stergerile la celalalt capat
V3: si toate stergerile sunt facute la inceput
V4: si toate stergerile sunt facute la sfarsit
R: 2
P: 1
I: Coada functioneaza pe principiul
V1: [code]FIFO[/code]
V2: [code]LIFO[/code]
V3: [code]FILO[/code]
V4: [code]LILO[/code]
R: 1
P: 1
I: Spre deosebire de coada obisnuita, intr-o coada cu prioritati:
V1: elementele sunt ordonate crescator, astfel incat elementul cu cheia minima sa
se gaseasca intotdeauna in fata
V2: este permisa insertia unui nou element si suprimarea celui mai mare element
dintre cele existente
V3: elementele sunt ordonate dupa valoarea unei chei, astfel incat
elementul cu cheia minima sau maxima sa se gaseasca intotdeauna in fata
V4: fiecare element are asociata o anumita prioritate
R: 3
P: 2
I: Urmatoarea secventa de instructiuni realizeaza adaugarea unui element intr-o
[pre][code]public void insert(long item) {
int j;
if(nItems==0)
queArray[nItems++] = item;
else {
for(j=nItems-1; j>=0; j--) {
if( item > queArray[j] )
queArray[j+1] = queArray[j];
else
break;
}
queArray[j+1] = item;
nItems++;
}
}[/code][/pre]
V1: lista cu doua capete
V2: coada cu prioritati
V3: lista dublu inlantuita
V4: stiva
R: 2
(Capitolul 5 Stiva)
P: 1
I: Care este avantajul stivelor?
Accesul se face dupa metoda
V1: primul sosit, ultimul servit
P:1
I: Sortarea prin meteoda bulelor este o metoda de sortare eficienta pentru un
numar
V1: de zeci de mii de elemente
V2: de maxim 300 de elemente
V3: mare de elemente
V4: mic de elemente, mai putin de 15 elemente
R: 4
P: 2
I: Presupunand ca sortam valorile crescator, sortarea prin metoda bulelor
V1: cicleaza printre valorile tabloului, comparand valori vecine si
deplasand valorile cele mai mari in partea dreapta
V2: cauta in tablou pana gaseste valoarea minima, apoi plaseaza valoarea minima
in primul element, schimband pozitia minimului gasit cu elementul aflat in capatul
din stanga, in pozitia 0. La fiecare pas, algoritmul gaseste elementul minim din
partea nesortata si il adauga la finalul partii sortate. Cand partea nesortata ramane
goala, algoritmul se opreste
V3: lucreaza in iteratii. In prima iteratie compara elemente aflate la distanta s1 mai
mare decat 1. Asta inseamna ca fiecare element din sirul initial este deplasat spre
stanga cu cate s1 pozitii atat timp cat intalneste elemente mai mari decat el. Se
repeta asemenea iteratii cu salturi din ce in ce mai mici, s3, s4, etc. Ultima iteratie
se face cu saltul 1
V4: presupune impartirea tabloului imaginar intr-o parte sortata si una nesortata. La
inceput, partea sortata contine primul element al tabloului si partea nesortata
contine restul tabloului. La fiecare pas, algoritmul ia primul element din partea
nesortata si il insereaza in locul potrivit al partii sortate. Cand partea nesortata nu
mai are nici un element, algoritmul se opreste
R: 1
P: 2
I: Urmatoarea secventa de instructiuni reprezinta sortarea
[pre][code]public void Sort() {
int out, in;
for(out=nElems-1; out>0; out--) {
for(in=0; in<out; in++)
if( a[in] > a[in+1] )
swap(in, in+1);
}
}[/code][/pre]
V1: prin selectie
V2: prin metoda bulelor
V3: onor obiecte
V4: prin insertie
R: 2
P: 2
I: Urmatorul cod
[pre][code]public void functie() {
int s=0;
long c=a[0];
for(int jq=0;jq<nElems;jq++)
if(c > a[jq]) {
c=a[jq];
s=jq;
}
System.out.println("Valoarea este: "+c);
System.out.println("Modificam.....");
System.out.println("Vectorul dupa modificare: ");
a[s]=a[0];
a[0]=c;
}[/code][/pre]
V1: ordoneaza crescator tabloul si il afiseaza
V2: gaseste cel mai mare element din tablou si interschimba maximul gasit cu
primul element din tablou
V3: ordoneaza descrescator tabloul si il afiseaza
V4: selecteaza cel mai mic element din tablou si interschimba minimul
gasit cu primul element din tablou
R: 4
V1: presupune impartirea tabloului imaginar intr-o parte sortata si una nesortata. La
inceput, partea sortata contine primul element al tabloului si partea nesortata
contine restul tabloului. La fiecare pas, algoritmul ia primul element din partea
nesortata si il insereaza in locul potrivit al partii sortate. Cand partea nesortata nu
mai are nici un element, algoritmul se opreste
V2: cauta in tablou pana gaseste valoarea minima, apoi plaseaza valoarea
minima in primul element, schimband pozitia minimului gasit cu elementul
aflat in capatul din stanga, in pozitia 0. La fiecare pas, algoritmul gaseste
elementul minim din partea nesortata si il adauga la finalul partii sortate.
Cand partea nesortata ramane goala, algoritmul se opreste
V3: cicleaza printre valorile tabloului, comparand valori vecine si deplasand valorile
cele mai mari in partea dreapta
V4: gaseste un anumit element intr-un tablou ordonat, utilizand un numar minim de
comparatii
R: 2
P: 2
I: Urmatoarea secventa de instructiuni reprezinta sortarea
[pre][code]public void Sort() {
int out, in, min;
for(out=0; out<nElems-1; out++) {
min = out;
for(in=out+1; in<nElems; in++)
if(a[in] < a[min] )
min = in;
swap(out, min);
}
}[/code][/pre]
V1: onor obiecte
V2: prin metoda bulelor
V3: prin selectie
V4: prin insertie
R: 3
(Capitolul 8 Sortarea prin insertie)
P: 1
I: Care din urmatoarele reprezinta avantaje ale metodei de sortare prin insertie?
V1: Numarul de pasi efectuati este acelasi cu numarul de comparari si este
[code]N(N+1)/2[/code] indiferent de structura datelor de intrare
V2: Algoritmul este, pentru date alese la intamplare de doua ori mai rapid
decat metoda bulelor si mai rapid decat sortarea prin selectie
I: Metoda Greedy
V1: se refera la o clasa de algoritmi care au ca principale caracteristici faptul ca
impart problema in subprobleme similare cu problema initiala dar mai mici ca
dimensiune, rezolva subproblemele recursive obtinanduse solutiile acestora si apoi
combina solutiile subproblemelor obtinanduse solutia problemei
V2: lucreaza in iteratii. In prima iteratie se aplica un insertionSort cu salt s1 mai
mare decat 1. Asta inseamna ca fiecare element din sirul initial este deplasat spre
stanga cu cate s1 pozitii atat timp cat intalneste elemente mai mari decat el. Se
repeta asemenea iteratii cu salturi din ce in ce mai mici, s3, s4, etc. Ultima iteratie
se face cu saltul 1. Aceasta ultima iteratie este practic un insertionSort clasic
V3: se utilizeaza in cazul in care se face construirea unei solutii prin
parcurgerea in etape a unor solutii partiale. La fiecare pas se alege o
solutie partiala, pe baza careia se va face cautarea in pasul urmator.
Metoda pleaca de la ideea ca, daca in fiecare pas se alege o solutie optima
pentru pasul respectiv exista, o sansa buna de obtinere a unei solutii
optime in final
V4: construieste solutia progresiv, prin adaugarea cate unei componente la o solutie
partiala care reprezinta o selectie din primele oferte, astfel incat sa reprezinte de
asemeni o solutie partiala
R: 3
P: 2
I: In metoda Backtracking
V1: algoritmul imparte tabloul in doua, observand in care dintre cele doua jumatati
este valoarea cautata, imparte apoi din nou acea jumatate in doua. La fiecare pas,
algoritmul compara valoarea cautata cu valoarea din mijlocul vectorului. Daca se
potrivesc atunci indicele sau pozitia valorii in vector este returnata. In caz contrar se
cauta in subvectorul din stanga valorii din mijloc, daca valoarea cautata este mai
mica decat cea din mijloc, sau in subvectorul din dreapta, daca este mai mare.
Operatia de cautare consta in identificarea subvectorului in care se poate gasi
elementul, prin compararea valorii cautate cu cea din mijloc, dupa care se divizeaza
acest subvector in doi subvectori s.a.m.d. pana cand se gaseste elementul, sau
pana cand nu se mai poate face impartirea in subvectori, ceea ce inseamna ca nu sa gasit elementul
V2: solutia este construita in mod progresiv, prin adaugarea cate unei
componente la o solutie partiala care reprezinta o selectie din primele
oferte, astfel incat sa reprezinte de asemeni o solutie partiala
V3: la fiecare pas se alege o solutie partiala, pe baza careia se va face cautarea in
pasul urmator. Metoda pleaca de la ideea ca, daca in fiecare pas se alege o solutie
optima pentru pasul respectiv exista, o sansa buna de obtinere a unei solutii optime
in final
V4: se lucreaza in iteratii. In prima iteratie se aplica un insertionSort cu salt s1 mai
mare decat 1. Asta inseamna ca fiecare element din sirul initial este deplasat spre
stanga cu cate s1 pozitii atat timp cat intalneste elemente mai mari decat el. Se
repeta asemenea iteratii cu salturi din ce in ce mai mici, s3, s4, etc. Ultima iteratie
se face cu saltul 1. Aceasta ultima iteratie este practic un insertionSort classic
R: 2
V4: <= cu pivotul, iar cea dea doua partitie, elementele > decat pivotul. Pivotul
este primul element din tablou. In momentul in care se blocheaza extinderea
ambelor partitii se interschimba elementele partitiilor, dupa care extinderea
partitiilor continua pana la atingere
R: 2
P: 2
I: Urmatoarea secventa de instructiuni reprezinta
[pre][code]public int functie(int left, int right, long pivot) {
int leftPtr = left - 1;
int rightPtr = right + 1;
while(true) {
while(leftPtr < right && theArray[++leftPtr] < pivot);
while(rightPtr > left && theArray[--rightPtr] > pivot);
if(leftPtr >= rightPtr)
break;
else
swap(leftPtr, rightPtr);
}
return leftPtr;
}[/code][/pre]
V1: cautarea binara
V2: sortarea prin metoda shellsort
V3: partitionarea
V4: sortarea rapida
R: 3
P:2
I: Metoda de alegere a pivotului pentru partitionarea cu schema mediei in trei este
alegerea valorii
V1: mediane intre primul si ultimul element
V2: mediane intre valoarea minima si valoarea maxima a tabloului
V3: mediane a tabloului
V4: mediane intre primul, ultimul si elementul din mijlocul tabloului
R: 4
P: 3
I: Urmatorul cod reprezinta
[pre][code]public int Sort(int left, int right) {
int size = right - left + 1;
if (size <= 3)
fSort(left, right);
else {
long q = functie(left, right);
P: 1
I: Nivelul unui anumit nod reprezinta
V1: gradul nodului respectiv
V2: numarul de muchii parcurse pentru a ajunge de la radacina la acel nod
V3: raportul dintre numarul de elemente din arbore si inaltimea arborelui
V4: numarul de noduri parcurse pentru a ajunge la acel nod
R: 2
P: 1
I: Caracteristica esentiala a unui arbore binar de cautare este
V1: urmatoarea: cheia fiului stang trebuie sa fie mai mica decat cea a
parintelui, iar cheia fiului drept trebuie sa fie mai mare sau egala cu cea a
parintelui
V2: aceea ca, parcurgand nodurile sale in inordine, secventa cheilor este monoton
descrescatoare
V3: urmatoarea: cheia fiului stang trebuie sa fie mai mare decat cea a parintelui, iar
cheia fiului drept trebuie sa fie mai mica sau egala cu cea a parintelui
V4: aceea ca, parcurgand nodurile sale in preordine, secventa cheilor este ordonata
R: 1
P: 1
I: Care din urmatoarele este o proprietate a arborilior binari?
V1: Un arbore binar cu inaltimea [code]h[/code] are cel mult [code]2^(h+1)[/code]
noduri
V2: Daca [code]a[/code] este numarul nodurilor terminale si [code]c[/code]
este numarul nodurilor care au exact 2 descendenti, atunci
[code]a=c+1[/code]
V3: Un arbore binar de inaltime [code]h[/code] are cel mult [code]2^h+1[/code]
noduri pe ultimul nivel. Ultimul nivel este [code]h[/code]
V4: Exista cel mult [code]2i[/code] noduri pe nivelul [code]i[/code] al arborelui
R: 2
P: 1
I: Care din urmatoarele reprezinta proprietatile arborilior binari?
V1: Daca [code]a[/code] este numarul nodurilor terminale si [code]c[/code] este
numarul nodurilor care au exact 2 descendenti, atunci [code]a=c-1[/code]
if(current == null)
return false;
}
Node successor = getSuccessor(current);
if(current == root)
root = successor;
else if(isLeftChild)
parent.leftChild = successor;
else
parent.rightChild = successor;
successor.leftChild = current.leftChild;
return true;
}[/code][/pre]
V1: nu are fiu stang
V2: are doi fii
V3: nu are fiu drept
V4: nu are fii
R: 2
P: 3
I: Urmatoarea secventa de instructiuni sterge nodul cu cheia data, pentru cazul in
care nodul:
[pre][code] public boolean delete(int key) {
Node current = root;
Node parent = root;
boolean isLeftChild = true;
while(current.iData != key) {
parent = current;
if(key < current.iData) {
isLeftChild = true;
current = current.leftChild;
}
else {
isLeftChild = false;
current = current.rightChild;
}
if(current == null)
return false;
}
if(current.leftChild==null && current.rightChild==null) {
if(current == root)
root = null;
else if(isLeftChild)
parent.leftChild = null;
else
parent.rightChild = null;
}
}[/code][/pre]
V1: are doi fii
V2: nu are fiu stang
V3: nu are fiu drept
V4: nu are fii
R: 4
P:3
I: Urmatorul cod sterge nodul cu chia data, pentru cazul in care nodul
[pre][code]
public boolean delete(int key) {
Node current = root;
Node parent = root;
boolean isLeftChild = true;
while(current.iData != key) {
parent = current;
if(key < current.iData) {
isLeftChild = true;
current = current.leftChild;
}
else {
isLeftChild = false;
current = current.rightChild;
}
if(current == null)
return false;
}
if(current.rightChild==null)
if(current == root)
root = current.leftChild;
else if(isLeftChild)
parent.leftChild = current.leftChild;
else
parent.rightChild = current.leftChild;
}[/code][/pre]
V1: are doi fii
V2: nu are fiu stang
V3: nu are fiu drept
V4: nu are fii
R: 3
P: 3
I: Urmatorul cod:
[pre][code]public void functie(int id, double dd) {
Node newNode = new Node();
newNode.iData = id;
newNode.dData = dd;
if(root==null)
root = newNode;
else {
Node current = root;
Node parent;
while(true) {
parent = current;
if(id < current.iData) {
current = current.leftChild;
if(current == null) {
parent.leftChild = newNode;
return;
}
}
else {
current = current.rightChild;
if(current == null) {
parent.rightChild = newNode;
return;
}
}
}
}
}[/code][/pre]
V1: insereaza un element intr-un arbore binar
V2: sterge un element intr-un arbore binar
V3: cauta un element cu o anumita cheie intr-un arbore binar
V4: determina nodurile care se gasesc pe un nivel dat
R: 1
P: 3
I: Urmatoarea secventa de instructiuni determina:
[pre][code]private Node getF(Node delNode) {
Node qParent = delNode;
Node q = delNode;
Node current = delNode.rightChild;
while(current != null) {
qParent = q;
q = current;
current = current.leftChild;
}
if(q != delNode.rightChild) {
qParent.leftChild = q.rightChild;
q.rightChild = delNode.rightChild;
}
return q;
}[/code][/pre]
V1: daca nodul cautat are doi fii
V2: succesorul unui nod precizat
V3: parintele unui nod dat
V4: predecesorul unui nod dat
R: 2
P: 3
I: Urmatoarea secventa de instructiuni sterge nodul cu o cheie data, pentru cazul in
care nodul
[pre][code ]public boolean delete(int key) {
Node current = root;
Node parent = root;
boolean isLeftChild = true;
while(current.iData != key) {
parent = current;
if(key < current.iData) {
isLeftChild = true;
current = current.leftChild;
}
else {
isLeftChild = false;
current = current.rightChild;
}
if(current == null)
return false;
}
if(current.leftChild==null)
if(current == root)
root = current.rightChild;
else if(isLeftChild)
parent.leftChild = current.rightChild;
else
parent.rightChild = current.rightChild;
}[/code][/pre]
V1: nu are fiu drept
Brez
1)P: 1
I: Inaltimea arborelui este
V1: diferenta dintre nivelul maxim din arbore si nivelul 1
V2: cel mai mare nivel pe care se afla un nod al sau
V3: lungimea drumului dintre radacina si lungimea penultimului varf
V4: maximul dintre inaltimile subarborilor sai -1
R: 2
2)P:1
I: Un nod este vizitat atunci cand
V1: drumul dintre alte doua noduri trece prin acel nod
V2: are gradul 1
V3: controlul programului este transmis acelui nod, in scopul executarii
unor operatii asupra nodului, cum ar fi verificarea valorii unuia din
campurile sale, sau afisarea informatiei utile a nodului
V4: permite existenta mai multor informatii si a mai multor fii pentru nodul respectiv
R: 3
3) P: 1
I: Care din urmatoarele reprezinta proprietatile arborilior binari?
V1: Un arbore binar de inaltime [code]h[/code] are cel mult [code]2h[/code] noduri
pe ultimul nivel. Ultimul nivel este [code]h[/code]
V2: Un arbore binar cu inaltimea [code]h[/code] are cel mult [code]2^h-1[/code]
noduri
V3: Daca a este numarul nodurilor terminale si c este numarul nodurilor care au
exact 2 descendenti, atunci a=c-1
V4: Exista cel mult [code]2^i[/code] noduri pe nivelul [code]i[/code] al
arborelui
R: 4
4) P: 1
I: Care din urmatoarele reprezinta proprietatile arborilior binari?
V1: Un arbore binar cu inaltimea [code]h[/code] are cel mult [code]
[2^(h+1)]-1[/code] noduri
V2: Exista cel mult [code]2^i-1[/code] noduri pe nivelul [code]i[/code] al arborelui
V3: Daca [code]a[/code] este numarul nodurilor terminale si [code]c[/code] este
numarul nodurilor care au exact 2 descendenti, atunci [code]a=c-1[/code]
V4: Un arbore binar de inaltime [code]h[/code] are cel mult [code]2h+1[/code]
noduri pe ultimul nivel. Ultimul nivel este [code]h[/code]
R: 1
5) P: 3
I: Urmatorul cod:
[pre][code]public void functie(int id, double dd) {
Node newNode = new Node();
newNode.iData = id;
newNode.dData = dd;
if(root==null)
root = newNode;
else {
Node current = root;
Node parent;
while(true) {
parent = current;
if(id < current.iData) {
current = current.leftChild;
if(current == null) {
parent.leftChild = newNode;
return;
}
}
else {
current = current.rightChild;
if(current == null) {
parent.rightChild = newNode;
return;
}
}
}
}
}[/code][/pre]
V1: determina nodurile de pe un nivel dat
V2: sterge un element intr-un arbore binar
V3: cauta un element cu o anumita cheie intr-un arbore binar
V4: insereaza un element intr-un arbore binar
R: 4
6) P: 3
I: Urmatoarea secventa de instructiuni sterge nodul cu o cheie data, pentru cazul in
care nodul
[pre][code ]public boolean functie(int key) {
Node current = root;
Node parent = root;
boolean isLeftChild = true;
while(current.iData != key) {
parent = current;
if(key < current.iData) {
isLeftChild = true;
current = current.leftChild;
}
else {
isLeftChild = false;
current = current.rightChild;
}
if(current == null)
return false;
}
if(current.leftChild==null)
if(current == root)
root = current.rightChild;
else if(isLeftChild)
parent.leftChild = current.rightChild;
else
parent.rightChild = current.rightChild;
}[/code][/pre]
V1: nu are fiu drept
V2: are fii
V3: nu are fiu stang
V4: nu are fii
R: 3
7) P: 2
I: Traversarea in preordine trebuie sa efectueze doar trei operatii. Care este ordinea
acestora?
V1: Vizitarea nodului curent, varful. Apelul recursiv pentru a traversa
subarborele stang al nodului. Apelul recursiv pentru a traversa
subarborele drept al nodului.
V2: Apel recursiv pentru a traversa subarborele stang al nodului. Apel recursiv
pentru a traversa subarborele drept al nodului. Vizitarea nodului current, varful.
V3: Un apel recursiv pentru a traversa subarborele stang al nodului. Vizitarea
nodului current, varful. Un apel recursiv pentru a traversa subarborele drept al
nodului.
V4: Apel recursiv pentru a traversa subarborele drept al nodului. Apel recursiv
pentru a traversa subarborele stang al nodului. Vizitarea nodului current, varful.
R: 1
8) P: 2
I: Urmatorul cod traverseaza arborele binar in:
[pre][code] private void traverse(Node localRoot) {
if(localRoot != null) {
System.out.print(localRoot.iData + " ");
traverse(localRoot.leftChild);
traverse(localRoot.rightChild);
}
}[/code][/pre]
V1: inordine
V2: preordine
V3: postordine
V4: adancime
R: 2
9) P: 2
I: Urmatorul cod intoarce
[pre][code]public Node() {
Node current, last;
current = root;
while(current != null) {
last = current;
current = current.rightChild;
}
return last;
}[/code][/pre]
V1: nodurile frunza din arbore binar de cautare
V2: nodul cu valoarea maxima din arborele binar de cautare
V3: nodul cu valoarea minima din arborele binar de cautare
V4: nodurile tata din arbore binar de cautare
R: 2
10)P:3
I: Urmatoarea secventa de instructiuni determina numarul:
[pre][code]public void functie() {
displayTree();
int n = 0;
int nv=0;
int d = 0;
Stack globalStack = new Stack();
globalStack.push(root);
boolean isRowEmpty = false;
while (isRowEmpty == false) {
Stack localStack = new Stack();
isRowEmpty = true;
while (globalStack.isEmpty() == false) {
Node temp = (Node) globalStack.pop();
if (temp != null) {
localStack.push(temp.leftChild);
localStack.push(temp.rightChild);
if (temp.leftChild == null && temp.rightChild == null) {
++n;
System.out.println("Nodul
cu
cheia:
"+
temp.iData+ " de pe nivelul "+nv);
d += temp.iData;
}
if (temp.leftChild != null || temp.rightChild != null)
isRowEmpty = false;
}
else {
localStack.push(null);
localStack.push(null);
}
}
while (localStack.isEmpty() == false)
globalStack.push(localStack.pop());
nv++;
}
System.out.println("Numar : " + n);
System.out.println("Afiseaza: " + d);
}
V1: frunzelor din arborele binar, afiseaza cheile frunzelor arborelui binar si
suma cheilor frunzelor arborelui binar
V2: nodurilor de pe un nivel dat, afiseaza cheile nodurilor de pe nivelul precizat si
calculeaza suma cheilor de pe nivelul precizat
V3: nodurilor frati din arborele binar, afiseaza cheile acestor noduri si suma cheilor
nodurilor frati din arborele binar
V4: nodurilor tata si sa se precizeze daca nodul cu cheia data este fiu stang sau fiu
drept
R: 1
V3: numarul legaturilor catre fii egal cu numarul elementelor plus unu
V4: cu doi fii mai mult decat numarul de elemente pe care il contine
R: 3
13) P: 2
I: Urmatorul cod:
[pre][code]public Node (int childNum) {
Node tempNode = childArray[childNum];
childArray[childNum] = null;
return tempNode;
}[/code][/pre]
V1: cauta fiul corespunzator unui nod
V2: deconecteaza un fiul de la un nod, intorcandu-l
V3: cauta un nod cu o cheie precizata
V4: conecteaza un fiu la nodul current, intorcandu-l
R: 2
14) P: 2
I: Urmatorul cod
[pre][code] public int functie(long m) {
Node curNode = root;
int childNumber;
while(true) {
if(( childNumber=curNode.findItem(m) ) != -1)
return childNumber;
else if( curNode.isLeaf() )
return -1;
else
curNode = getNextChild(curNode, m);
}
}[/code][/pre]
V1: cauta un anumit element cu o anumita cheie
V2: insereaza un element
V3: cauta o frunzele din arbore
V4: insereaza un nou element in nod, deplasand elementele deja existente, dc este
cazul
R: 1
15) P: 1
I: Urmatoarea secventa de instructiuni
[pre][code]public Node functie(Node theNode, long theValue) {
int j;
int numItems = theNode.getNumItems();
Arborii de tip B
16) P: 2
I: operatia de inserare intr-un arbore de tip B
V1: nu difera de inserarea in arborii 2-3-4
V2: B difera de inserarea in arborii 2-3-4 prin trei aspecte: Divizarea unui nod
imparte elementele in mod egal: jumatate sunt distribuite nodului nou creat, iar
cealalta jumatate raman in cel vechi. Divizarile din noduri se efectueaza atat de sus
in jos cat si de jos in sus. Elementul care va fi inserat in nodul parinte nu este cel din
mijlocul nodului divizat, ci cel din mijlocul secventie formate din elementele nodului
si noul element.
V3: B difera de inserarea in arborii 2-3-4 prin doua aspecte: Divizarile din noduri se
efectueaza atat de sus in jos cat si de jos in sus. Elementul care va fi inserat in
nodul parinte este cel partea dreapta a nodului divizat.
V4: B difera de inserarea in arborii 2-3-4 prin trei aspecte: Divizarea unui
nod imparte elementele in mod egal: jumatate sunt distribuite nodului nou
creat, iar cealalta jumatate raman in cel vechi. Divizarile din noduri se
efectueaza de jos in sus si nu invers. Elementul care va fi inserat in nodul
parinte nu este cel din mijlocul nodului divizat, ci cel din mijlocul secventie
formate din elementele nodului si noul element.
R: 4
Tabele de dispersie
17) P: 2
I: Forma polinomiala consta in:
tablou
V2: raportul dintre numarul de elemente dintr-o tabela de dispersie si dimensiunea
tabelei este mai mare decat 1
V3: se inlocuiesc celule distribuite pe o arie ceva mai larga cu celulele imediat
adiacente locului in care trebuie efectuata inserarea
V4: algoritmul de sondaj patratic genereaza intotdeauna aceiasi pasi
R: 1
19) P: 2
I: Sondajul este
V1:
V2:
V3:
V4: procedeul de cautare a celulei potrivite, in urma unei coliziuni
R: 4
20) P: 1
I: Urmatoarea secventa de instructiuni
[pre][code] public DataItem functie(int m) {
}[/code][/pre]
V1: cauta un element cu o valoare data intr-un arbore 2-3-4
V2: insereaza un element cu o cheie precizata intr-o tabela de dispersie
V3: cauta elementul cu cheia data intr-o tabela de dispersie
V4: insereaza un element cu o valoare precizata intr-un arbore 2-3-4
R: 3
21) P: 2
I: Acumularea secundara se produce din cauza faptului ca
V1: algoritmul de sondaj patratic genereaza intotdeauna aceiasi pasi
V2: raportul dintre numarul de elemente dintr-o tabela de dispersie si dimensiunea
tabelei este mai mare decat 1
V3: se inlocuiesc celule distribuite pe o arie ceva mai larga cu celulele imediat
adiacente locului in care trebuie efectuata inserarea
V4: se trece cheia prin functia de dispersie pentru a doua oara, cu o alta functie de
dispersie, utilizand rezultatul obtinut ca pas de deplasare
R: 1