infoarena

Comunitate - feedback, proiecte si distractie => Blog => Subiect creat de: Cosmin Negruseri din Iunie 07, 2011, 22:25:55



Titlul: SQL query - rezolvare
Scris de: Cosmin Negruseri din Iunie 07, 2011, 22:25:55
Comentarii la postul http://infoarena.ro/blog/sql-query-rezolvare


Titlul: Răspuns: SQL query - rezolvare
Scris de: Savin Tiberiu din Iunie 08, 2011, 13:59:21
Pe oracle exista o chestie, ma rog, total ineficienta, insa exista si e bine de stiut pentru alte cazuri :). Poti sa folosesti comenzile START WITH si CONNECT BY PRIOR parent.column = children.column si iti va da un tabel cu parcurgerea in adancime a arborelui determinat de relatia din CONNECT BY si radacina data de START WITH.

Exemplu
Cod:
SELECT employee.id
FROM employees
START WITH employee.id = "id"
CONNECT BY PRIOR employee.id = employee.manager_id

Si asta o sa iti dea un tabel cu toti subordonatii angajatului cu id-ul "id". Din pacate nu am reusit sa gasesc un echivalent pentru Mysql.


Titlul: Răspuns: SQL query - rezolvare
Scris de: Daniel Baluta din Iunie 08, 2011, 14:38:38
Problema de interviu (posibil clasică): Cum putem determina minimul și maximul dintr-un șir de N elemente folosind cel mult 3N/2 comparații.


Titlul: Răspuns: SQL query - rezolvare
Scris de: Cosma Adriana Elena din Iunie 08, 2011, 19:27:24
Se dau doi vectori de numere naturale a si b. a are dimensiunea n+m si n elemente, iar b are dimensiunea m si m elemente. Sa se interclaseze cei doi vectori.


Titlul: Răspuns: SQL query - rezolvare
Scris de: Cosma Adriana Elena din Iunie 08, 2011, 19:33:27
Am uitat sa spun ca vectorii sunt ordonati si ca dupa interclasare trebuie sa se obtina un vector, evident, ordonat.


Titlul: Răspuns: SQL query - rezolvare
Scris de: Paul-Dan Baltescu din Iunie 08, 2011, 19:42:36
Daca cunoasteti probleme interesante care credeti ca se potrivesc pentru "problema saptamanii", puteti sa le trimiteti la adresa: [email protected] si pe cele mai interesante le vom publica pe blog! :)


Titlul: Răspuns: SQL query - rezolvare
Scris de: Andrei Misarca din Iunie 09, 2011, 13:19:34
La problema cu minimul si maximul din 3N/2 comparatii ma gandesc la ceva de genul: Parcurg sirul din 2 in 2 elemente, iar la fiecare pas se pot afla minimul si maximul dintre elementul curent si cel imediat urmator dintr-o singura comparatie, si din inca 2 comparatii putem vedea daca minimul este mai mic decat minimul global, si daca maximul este mai mare decat maximul global. Deci la fiecare pas se fac 3 comparatii, si cum in total sunt N/2 pasi => in total se fac 3N/2 comparatii.


Titlul: Răspuns: SQL query - rezolvare
Scris de: Cont de teste din Iunie 10, 2011, 21:30:26
La problema cu minimul si maximul nu ar merge si o solutie recursiva gen:
Comparam elementele vecine 2 cate 2 => N/2 comparatii, N/2 maxime, N/2 minime
Comparam maximele, si minimele din fiecare perechi 2 cate 2=> N/4+N/4=N/2 comparatii si raman N/4 maxime si N/4 minime
Comparam din nou maximele si minimele din fiecare cvadrupluri=> N/8 comparatii la maxime + N/8 la minime=N/4 camparatii si raman N/8 maxime si N/8 minime
Comparam grupurile de maximele si minimele din grupurile de cate 8=>N/16 +N/16 = N/8 comparatii si raman N/16 maxime si N/16 minime si tot asa.
Ar veni N/2+N/2+(N/4+N/8+N/16+...+1)=3N/2

pair functie(int st,int dr)
{
   pair ret;
   if(st==dr)
   { ret.min=a[st];
     ret.max=a[st];
   }
   else
   {m=(st+dr)/2;
   pair pst=functie(st,m);
   pair pdr=functie(m+1,dr);
   
   ret.min=min(pst.min,pdr.min);
   ret.max=max(pst.max,pdr.max);}
   
   return ret;
   
}


Titlul: Răspuns: SQL query - rezolvare
Scris de: cont cu nume gresit sau fals din Iunie 10, 2011, 21:56:54
da, e corect, dar practic e exact ce a zis mishu inainte. :eyebrow:
tu faci asa cum a zis el pana la faza cu n/2 maxime si n/2 minime.
dupa asta in n/2 operatii afli care e maximul dintre cele n/2 maxime si minimul din cele n/2 minime (in loc sa iei numerele la rand tu le iei mai complicat  :D)


Titlul: Răspuns: SQL query - rezolvare
Scris de: Cont de teste din Iunie 10, 2011, 22:35:26
Da ai dreptate.

Eu asa am gandit, nu stiu daca este mai complicat dar asta mi-a venit in minte.