Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 002 Carte  (Citit de 14386 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Teodor94
Echipa infoarena
Nu mai tace
*****

Karma: 63
Deconectat Deconectat

Mesaje: 558



Vezi Profilul
« : Decembrie 14, 2013, 18:13:58 »

Aici puteţi discuta despre problema Carte.
Memorat
stocarul
Nu mai tace
*****

Karma: 49
Deconectat Deconectat

Mesaje: 203



Vezi Profilul
« Răspunde #1 : Decembrie 16, 2013, 11:56:30 »

Cum aţi rezolvat această problemă?

Eu am încercat mai multe soluţii, dar toate fără succes:
  • Cu un trie: MLE
  • Cu hash-uri folosind set: TLE
  • Cu hash-uri de mână: MLE sau TLE (în funcţie de numărul de bucket-uri)
Memorat
visanr
Nu mai tace
*****

Karma: 168
Deconectat Deconectat

Mesaje: 213



Vezi Profilul
« Răspunde #2 : Decembrie 16, 2013, 12:10:29 »

KMP, ca sa vezi pentru fiecare cuvant din dictionar unde se potriveste in sirul mare + bitset, ca sa poti tine minte potrivirile si sa intre in memorie Smile


LE: Eu am Match[ i ][ j ] - 1 daca exista vreun cuvant in dictionar care se potriveste pe subsecventa [i...j] in sirul mare, de aceea am nevoie de bitset.
« Ultima modificare: Decembrie 16, 2013, 12:47:54 de către Visan Radu » Memorat
Vman
Echipa infoarena
Vorbaret
*****

Karma: 45
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #3 : Decembrie 16, 2013, 12:36:30 »

merge si fara bitset, o matrice LxN char[3000][1000] in care bifezi daca pe pozitia L se potriveste sirul N, si acopera intervalul [L, L + lungime[N]].
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #4 : Decembrie 16, 2013, 13:19:33 »

Hashurile erau mult prea incete (de 3-4 ori mai incete decat limita de timp, de 8 ori mai incete decat solutia oficiala). Cu trie complexitatea crestea, devenea N^2 * sigma. Solutia oficiala e cea pe care a spus Radu. Eu tineam vector<bool>, tot 1 bit pe element consuma.
Memorat
Andrei1998
De-al casei
***

Karma: 26
Deconectat Deconectat

Mesaje: 112



Vezi Profilul
« Răspunde #5 : Ianuarie 19, 2014, 17:26:49 »

Eu nu pot sa inteleg de ce la problema asta nu ar intra cu hash-uri. Think Pana la urma KMP-ul parcurge ambele siruri pentru fiecare sir mic. Asta ar insemna ca face in jur de 3000*1000 + 3000 operatii adica in jur de jumatate din limita de timp. Hash-urile ar procesa fiecare sir o singura data (adica (3000+3000) operatii * operatii cu hash-uri (care mi-e greu sa cred ca sunt de 8000 de ori mai incete decat un O(1) curat)). Chiar daca am lua mod-ul 666013 presupun ca ar intra si in timp si in memorie. Ca sa imi garantez ca minimizez sansa unei coliziuni de valori hash o sa-mi tin 2 valori hash eventual. De asemenea, nu inteleg cum de intra sa iti initializezi o matrice de 3000 pe 3000 la fiecare test (cum zice Visan Radu). De accord ca o matrice de 3000 pe 1000 intra (asa este, de altfel, si solutia mea). Daca cineva cunoaste ceva mai bine astfel de insight-uri si ar vrea sa imi raspunda as fi foarte recunoscator.  Thumb up

P.S.: Cel mai ciudat lucru este ca daca pun bitset in loc de bool la matricea mea de 3000 pe 1000, merge mai incet. Confused
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #6 : Ianuarie 25, 2014, 21:39:28 »

Numarul mediu de coliziuni daca ai sa calculezi e mic. Problema nu sunt colinziunile ci operatiile modulo care sunt mult mult mai incete. In cazul de fata degeaba aveai complexitatea buna. Sursele cu hashuri erau mult mai incete de 3-4. Sursa cu kmp a mea avea cam jumate din limita de timp. Sursa cu hashuri originala avea in jur de 4 secunde pe testul maxim. Si optimizata nu ar fi intrat in timp nici daca dublam limita de timp.
Memorat
stoianmihail
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #7 : Iulie 15, 2015, 22:52:01 »

  Pentru cei interesati de metoda cu hash, dupa ce mi-am trimis sursa ca un copil constiincios (KMP + dinamica)  Thumb up
m-am uitat peste sursele celorlalti si am gasit sursa aceasta : http://www.infoarena.ro/job_detail/1065650, si altele ca si ea din aceeasi
zi. Dar aceasta sursa m-a impresionat!!! Shocked Shocked Shocked (112 ms, 424 kb). O solutie cu KMP scoate fix dublu ca timp, iar ca memorie de 8 ori mai mult!
  Habar nu am ce sunt hash-urile, dar propozitia aceasta: "Sursa cu hashuri originala avea in jur de 4 secunde pe testul maxim"  Whistle m-a facut sa caut un curajos care a reusit sa faca cu aceasta metoda.
  Spor!
Memorat
alex.grigoras
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #8 : Noiembrie 07, 2016, 17:40:47 »

Salut. Am avut o pățanie rezolvand problema asta. Codul care determina pozitia fiecarui cuvant in carte nu gasea pozitiile care se suprapuneau.

Spre exemplu, daca aveam cartea aaaa si cuvantul aa identificam cuvintele aaaa  si aaaa dar nu si pe aaaa.

Conform solutiei oficiale, trebuie identificat si cuvantul aaaa dar nu am reusit sa gasesc un exemplu in care are vreo importanta faptul ca algoritmul meu rateaza cuvantul asta.

Voi ce ziceti? Imi puteti arata unde am gresit?
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #9 : Noiembrie 08, 2016, 22:39:08 »

Dacă ai cartea baaaac și cuvintele ba, aa respectiv ac răspunsul este 0. Dar singura soluție care îți permite să obții este 0 este cea în care detectezi potrivirea din mijloc.

Ai luat 100 cu greșeala asta?
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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