Afişează mesaje
|
Pagini: [1] 2 3
|
2
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: SQL query
|
: Iunie 21, 2011, 13:34:51
|
Nu stiu daca asta e solutia sau nu, dar mi se pare o idee destul de buna. Este oarecum asemanatoare cu una din ideile prezentate anterior. Fiecarei persoana din baza de date i se atribuie o valoare in plus care va ajuta la identificarea lantului ierarhic( not. lantIerarhicValue) . Pe langa aceasta valoare, pentru a usura operatiunea de inserare este necesar sa retinem pentru fiecare Angajat cine este - superiorul - ultimul angajat dinaintea lui care se afla in aceeasi echipa cu el. (not. previousEmployee ) (ex. A este seful lui B, C si D - pentru C valoarea este B, pentru D valoarea este C) lantIerarhicValue se determina asa. Pentru radacina (let's call it CEO), avem o valoare destul de mare X fiecare subordonat direct primeste o valoare mai mica decat X ex. Daca CEO are subordonati pe A,B,C,D acestora le dam valori - A.lantIerarhicValue= 1 * 1/maximumNumberOfDirectSubordinates * X;
- B.lantIerarhicValue= 2 * 1/maximumNumberOfDirectSubordinates * X;
- C.lantIerarhicValue= 3 * 1/maximumNumberOfDirectSubordinates * X;
- D.lantIerarhicValue= 4 * 1/maximumNumberOfDirectSubordinates * x;
Acum pentru a raspunde la interogari de genul: este A subordonat indirect al lui B putem verifica daca A. lantIerarhicValue este intre B. lantIerarhicValue si .B. previousEmployee.lantIerarhicValue. Una din problemele care ar putea sa para ar fi sa nu cunoasteam valoarea lui maximumNumberOfDirectSubordinates Dar putem veni cu o solutie pentru aceasta problema: Setam maximumNumberOfDirectSubordinates cu o valoare destul de mare. Daca la un anumit moment un sef are mai multi subordonati directi decat aceasta valoare(putem sa o dublam), crestem valoarea si actualizam intreg arborele.
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 387 Distincte
|
: Aprilie 12, 2008, 12:40:11
|
Am 2 rezolvari cu acelasi rationament una implementata cu arbori de intervale, si una cu arbori indexati binar si la niciuna nu iau mai mult de 25 de P (Wrong Answer). Rationamentul meu este urmatorul : Cu un arbore determin suma primelor i numere. Cu un altul determin suma primelor x numere care au cel mai apropiat element egal cu el din partea stanga pe o pozitie mai mica sau egala cu x ( in cazul in care nu exista un astfel de element am pozitia 0 ) ; Ordonez query-urile dupa capatul dreapta; for(i = n; i; i--) { cat timp am capat dreapta egal cu i { calculez suma elementelor care au cel mai apropiat element, din partea stanga egal cu el, pe o pozitie mai mica sau egala cu capatul stanga din care scad suma elementelor pana la capatul stanga } elimin din al 2lea arbore valoarea reprezentanta pentru pozitia i }
Banuiesc ca rationamentul meu este gresit, dar nu reusesc sa imi dau seama care parte ? Daca aveti careva vreo idee ... help please
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 387 Distincte
|
: Aprilie 11, 2008, 18:49:39
|
Am citit solutia la problema, si nu prea reusesc sa imi dau seama cum se poate face suma elementelor dintr-un dreptunghi in timp logaritmic ? Imi puteti da vreo idee va rog ? [...] De fapt nu imi dadeam seama cum pot sa calculez suma valorilor atribuite fiecarui punct ... In range query 2D trebuie sa afli doar numarul lor ... dar cred ca m-am prins ... tks
|
|
|
|