Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: structuri de date?  (Citit de 2870 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Andreid91
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 54



Vezi Profilul
« : Noiembrie 06, 2009, 22:23:25 »

Exista vreo structura de date care sa suporte un querry gen : a, b, x ? (cate elemente de pe un interval (a,b) sunt mai mici decat un x? nu este acelasi x pt toate intrebarile, am m intrebari, si pt fiecare,x-ul e diferit )  Huh

Ms fain  Smile

 
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #1 : Noiembrie 06, 2009, 23:19:18 »

Cred că se poate rezolva cu AIB în 2 dimensiuni. O dimensiune o consider valoarea și una poziția, iar când fac un query fac o interogare pe intervalul (a, 1), (b, x). Dezanatajul este că ai O(N * Valoarea_maxima) memorie, ceea ce în general este cam mult. Smile
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #2 : Noiembrie 07, 2009, 00:50:49 »

Poti sa faci offline. Citesti toate query-urile inainte si le sortezi dupa valoarea X. Acuma tii un AIB in care initial toate valorile sunt 0 si cum parcurgi query-urile iei toate elementele mai mici decat x si le faci 1. In felu asta un query pe intervalul [a...b] iti va da numarul de numere mai mici decat x. Complexitatea finala ar fi O(N + M log N). Singurul dezavantaj e ca trebuie sa citesti query-urile inainte.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #3 : Noiembrie 07, 2009, 03:19:17 »

Solutia data de devilkind este cea mai buna in cazul in care nu ai update-uri si poti citi query-urile dinainte. Altfel, poti sa faci cu arbori de intervale 2D, folosind O(N log N) memorie si avand complexitatea de O(log^2 N) pe query/update.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Andreid91
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 54



Vezi Profilul
« Răspunde #4 : Noiembrie 10, 2009, 16:19:02 »

Da... o memorie n* max_val ar fi destul de mult  Very Happy.  Destul de interesanta ideea cu AIB totusi... Think

Solutia lui devilkind e intradevar si mai usor de implementat, si ceva mai eficienta.  Ok

Am sa ma uit si peste un articol cu arbori bidimensionali...par destul de interesanti si utili  Smile


Ca tot veni vorba de intervale...m-am tot gandit si la problema asta, dar nu i-am dat de cap... Raised eyebrow
Cum pot rezolva un querry : determinati numarul de elemente distincte dintr-un interval (a,b) ? Am vazut ceva de genu si la baraj in a doua zi de concurs...
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #5 : Noiembrie 10, 2009, 17:39:27 »

Exista o problema foarte asemanatoare cu cea de care intrebi tu pe site. Solutia ei e prezentata in acest articol.
Memorat

Am zis Mr. Green
Andreid91
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 54



Vezi Profilul
« Răspunde #6 : Noiembrie 10, 2009, 17:51:35 »

mersi Paul  Very Happy 
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #7 : Noiembrie 10, 2009, 17:53:54 »

Eu am rezolvat problema de care zici (cea de la baraj) in O(NlogN) in mod asemanator cu solutia prezentata de devilkind. Am sortat query-urile si le-am rezolvat in ordine.
« Ultima modificare: Noiembrie 10, 2009, 18:46:18 de către Savin Tiberiu » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #8 : Noiembrie 11, 2009, 00:07:27 »

Eu am rezolvat problema de care zici (cea de la baraj) in O(NlogN) in mod asemanator cu solutia prezentata de devilkind. Am sortat query-urile si le-am rezolvat in ordine.

Inseamna ca trebuie sa schimb testele Tongue.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #9 : Noiembrie 11, 2009, 15:19:58 »

Cu parsarea citirii + câteva optimizări se pot scoate timpi sub 0,8 secunde, după cum se vede aici. Totuși, sunt curios de soluția in O(Nlog*N). Cum se face cu mulțimi disjuncte, fără a mai sorta intervalele?
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines