|
•mugurelionut
|
 |
« Răspunde #1 : Februarie 27, 2008, 20:25:43 » |
|
Misto ideea cu arhiva educationala. Anyway, daca tot ati atins subiectul arborilor de intervale, as vrea sa propun, in scop educational, sa facem (si m-as implica si eu aici, daca va fi cazul) niste probleme care pun in evidenta mai bine ceea ce pot face arborii de intervale. M-am lovit de cateva ori de situatia in care elevi care ziceau ca stiu bine arbori de intervale nu au reusit sa ii extinda pentru a suporta niste query+update-uri mai "smechere". De exemplu, pare "inradacinata" ideea ca update-ul sau query-ul sunt aplicate pe un interval, iar operatia cealalta este aplicata asupra unui element (adica: update pe interval si query pe element sau update pe element si query pe interval).
Arborii de intervale sunt mult mai flexibili si suporta cel putin urmatoarele 4 situatii care apar prin probleme:
* creste valoarea fiecarui element dintr-un interval cu x (update) si intreaba care e suma elementelor dintr-un interval (query) * creste valoarea fiecarui element dintr-un interval cu x (update) si intreaba care e minimul/maximul elementelor dintr-un interval (query) * seteaza valoarea fiecarui element dintr-un interval la x (update) si intreaba care e suma elementelor dintr-un interval (query) * seteaza valoarea fiecarui element dintr-un interval la x (update) si intreaba care e minimul/maximul elementelor dintr-un interval (query)
Nu o sa mai mentionez utilizarea altor tipuri de update-uri si query-uri (de exemplu, bazate pe operatii pe biti sau query-uri pentru minimul sumelor partiale sau pentru subsecventa de suma maxima - ultima problema aflandu-se si in arhiva infoarena).
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #2 : Februarie 27, 2008, 20:39:46 » |
|
desi nu are legatura cu arbori de intervale, ar fi frumos sa se dea niste punctaje partiale (si sa fie mentionata in "indicatii de rezolvare" ) si ideea cu impartirea in bucati de sqrt(n) a vectorului.
|
|
|
Memorat
|
|
|
|
•filipb
|
 |
« Răspunde #3 : Februarie 27, 2008, 20:41:09 » |
|
Ar fi foarte utile problemele pe care le-ai specificat. Am completat tabelul (nu am stiut cum sa trec mai concis, am scris arbori de intervale aplicatie 1, etc ). Am adaugat problema separata pentru bucati de sqrt N. 
|
|
|
Memorat
|
|
|
|
•Cosmin
|
 |
« Răspunde #4 : Februarie 27, 2008, 21:30:37 » |
|
Ar merge puse operatii de update diferite ca sa tinem tot in acelasi loc. Practic fiecare problema e un articol, nu are rost sa le dispersam prea tare.
|
|
|
Memorat
|
|
|
|
•raduzer
Client obisnuit

Karma: 62
Deconectat
Mesaje: 71
|
 |
« Răspunde #5 : Februarie 29, 2008, 12:19:08 » |
|
Cred ca limita de timp ar putea fi scazuta la 0.3 sec.  Cu toate ca nu e chiar asa de important, ca daca face cineva cu arbori de intervale oricum intra in 0.3, iar daca face brut iese din 0.4...
|
|
|
Memorat
|
|
|
|
•Cosmin
|
 |
« Răspunde #6 : Februarie 29, 2008, 12:20:29 » |
|
Cartesian tree se poate face in O(n) ... si nu iti trebuie arbori de intervale. Poti citi rezolvarea in cartea lui Catalin Francu.
|
|
|
Memorat
|
|
|
|
•amadaeus
Client obisnuit

Karma: 28
Deconectat
Mesaje: 93
|
 |
« Răspunde #7 : Aprilie 23, 2008, 19:59:17 » |
|
Vad ca solutia cu AIB-uri pentru maxime pe intervale, de complexitate teoretica O(log 2 N) pe update si query, se comporta mai bine in practica decat cea cu arbori de intervale (cu O(log N) pe fiecare operatie). Cel putin in implementarile mele 
|
|
|
Memorat
|
"one of these days I'm going to cut you into little pieces..."
|
|
|
•wefgef
|
 |
« Răspunde #8 : Aprilie 23, 2008, 20:00:22 » |
|
Nu doar in implementarile tale  . AIB ruleaza! 
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•gogu
Client obisnuit

Karma: 42
Deconectat
Mesaje: 98
|
 |
« Răspunde #9 : Aprilie 24, 2008, 21:10:27 » |
|
un AIB e mult mai cache-friendly decat un arbore de intervale. cum in ultimii ani viteza procesoarelor a crescut mult mai repede ca viteza memoriilor, e din ce in ce mai important cache-ul. Stiu ca multi din cei ce fac jocuri pentru Xbox / PS3 transforma in array-uri simple multe structuri de date avansate mai rapide asimptotic dar care sparg des cache-ul pentru ca au procesoare foarte rapide dar RAM mult mai incet. In concluzie, folositi varianta in O(sqrt(N)) http://infoarena.ro/job_detail/154183
|
|
|
Memorat
|
|
|
|
•CezarMocan
|
 |
« Răspunde #10 : Aprilie 24, 2008, 21:18:55 » |
|
Stiti vreun articol mai pe intelesul tuturor in legatura cu cacheul? Ca nu prea inteleg cum sta treaba cu asta...
|
|
|
Memorat
|
|
|
|
•gogu
Client obisnuit

Karma: 42
Deconectat
Mesaje: 98
|
 |
« Răspunde #11 : Aprilie 29, 2008, 23:27:53 » |
|
As baga eu un articol despre cache si ceva optimizari in general, daca se ofera cineva sa-l formateze frumos. 
|
|
|
Memorat
|
|
|
|
•stef2n
|
 |
« Răspunde #12 : Aprilie 29, 2008, 23:39:46 » |
|
Da, sigur. Hai ca ma ocup eu de aspect. Redacteaza-l. 
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•runnaway90
Strain
Karma: -7
Deconectat
Mesaje: 25
|
 |
« Răspunde #13 : Aprilie 30, 2008, 12:05:10 » |
|
Stiu ca a fost prezentat acum cativa ani la Lot ceva legat de cache ... ( sper sa nu ma insel ) ...
|
|
|
Memorat
|
|
|
|
•vizitator
Strain
Karma: 0
Deconectat
Mesaje: 5
|
 |
« Răspunde #14 : Septembrie 08, 2008, 14:29:05 » |
|
Cum pot creste la un arbore de intervale in care retin minimul de ex. toate elementele dintr-un interval cu un anumit numar (update-ul) ?
|
|
|
Memorat
|
|
|
|
•toni2007
|
 |
« Răspunde #15 : Septembrie 08, 2008, 14:45:31 » |
|
in o(n)...
gandeste-te ca tu tre sa faci update si la frunzele din arbore (elem cele mai de jos, la care intervalul are doar un elem) si pierzi pe alea o(n)
|
|
« Ultima modificare: Septembrie 08, 2008, 20:47:17 de către Pripoae Teodor Anton »
|
Memorat
|
|
|
|
•vizitator
Strain
Karma: 0
Deconectat
Mesaje: 5
|
 |
« Răspunde #16 : Septembrie 08, 2008, 14:55:09 » |
|
la O(n) ma gandeam si eu....da e cam mare limita
am vazut si o problema pe infoarena......biscuiti......la care trebuie facut update pe un interval, si nu incape daca faci in O(n)
|
|
|
Memorat
|
|
|
|
•astronomy
|
 |
« Răspunde #17 : Septembrie 08, 2008, 15:17:49 » |
|
Se poate O(logN), sunt mai multe detalii chiar in forum la problema biscuiti.
|
|
|
Memorat
|
|
|
|
•vladiana
Strain
Karma: 0
Deconectat
Mesaje: 10
|
 |
« Răspunde #18 : Octombrie 20, 2008, 21:29:15 » |
|
cum pot face sa folosesci un vector de numa 2*n-1 elemente? ce conditii trebuie sa pun in plus? normal un arbore de intervale are numa 2*n-1 noduri.....
|
|
|
Memorat
|
|
|
|
•Prostu
|
 |
« Răspunde #19 : Octombrie 21, 2008, 10:01:03 » |
|
cum pot face sa folosesci un vector de numa 2*n-1 elemente? ce conditii trebuie sa pun in plus? normal un arbore de intervale are numa 2*n-1 noduri.....
Cand declari tabloul in care tii arborele de intervale, acesta nu trebuie sa aibe dimensiunea 2*n, ci mai degraba cea mai mica valoare mai mare sau egala cu 2*n care este si putere a lui 2. Adica pentru un n = 100000, ar trebui sa declari tabloul de 262144 ( 2 18 ). Asta datorita codificarii pe care o faci nodurilor si a faptului ca arborele tau nu este un arbore complet binar. Pe penultimul nivel nu toate nodurile o sa aibe 2 noduri ca fii, ci multe o sa aibe un singur fiu. Indicile nodului curent poate insa sa ajunga pana la 2 ceil(log(n))+1-1, pentru ca arborele are ceil(log(n)) + 1 niveluri. Asta se intampla in cele mai multe implementari, si in sursa ta, poti sa folosesti si numai 2*n noduri, insa codificarea lor este mult mai dificila.
|
|
|
Memorat
|
|
|
|
•florin_marius90
Strain
Karma: -15
Deconectat
Mesaje: 17
|
 |
« Răspunde #20 : Aprilie 02, 2009, 23:06:07 » |
|
salut . ce optimizari pot sa fac la nivel de program pascal ca sa mi iasa in timp, pt imi depasheshte timpu cu 0.02, si nush ce sa fac. plus ca treaba e relativa, pe aceiashi sursa iau punctaje diferite, plus ca la unele teste timpul in care iese programu e mai mic decat cel impus de problema si totushi imi zice timp depashit......
si inca ceva : in pascal daca declaram un vector de intregi. si apoi il afisham pe ecran de ex, fara a face nici o modificare asupra lui. sau nu neaparat un vector: normal ar trebui sa apara valoarea nula adica 0 nu? ms
|
|
|
Memorat
|
|
|
|
•philip
Strain
Karma: 5
Deconectat
Mesaje: 39
|
 |
« Răspunde #21 : Octombrie 29, 2009, 23:21:08 » |
|
Au fost schimbate testele la problema asta? Rezolvarea mea (in pascal) nu reuseste nicicum sa intre in timp. Am reintrodus si niste surse mai vechi, tot in pascal, care au luat 100 p cu cateva luni in urma, si nici ele nu scot mai mult de 50 p.
LE: Trebuia folosit "shl" si "shr" in loc de "*2", "/2", si in pascal trebuie parsata si citirea, altfel nu intra in timp.
LE2: Inca ceva... La testele 1 si 7 este cate un spatiu (" ") in plus la sfarsitul liniei cu elementele vectorului.
|
|
« Ultima modificare: Noiembrie 02, 2009, 15:04:00 de către Philip »
|
Memorat
|
|
|
|
•alexandru92
|
 |
« Răspunde #22 : Ianuarie 28, 2010, 20:51:56 » |
|
Imi putei spune, va rog frumos, cum as putea rezolva query-ul folosind aib-uri ? 
|
|
|
Memorat
|
|
|
|
•Mishu91
|
 |
« Răspunde #23 : Ianuarie 28, 2010, 21:18:22 » |
|
Păi nu prea poți. Cu aib poți face query-uri doar pe intervalul [1, x], iar la minim/maxim nu prea mai merge treaba. Totuși, dacă citești toate posturile acestui topic vei afla că există o abordare a problemei cu aib în O(log2N) pe query.
|
|
|
Memorat
|
|
|
|
•alexandru92
|
 |
« Răspunde #24 : Ianuarie 28, 2010, 21:23:11 » |
|
Totuși, dacă citești toate posturile acestui topic vei afla că există o abordare a problemei cu aib în O(log2N) pe query.
M-am uitat peste sursa lui @Lucian si nu inteleg cum face acel query 
|
|
|
Memorat
|
|
|
|
|