Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 023 Trie  (Citit de 13884 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« : Decembrie 06, 2008, 19:51:13 »

Aici puteti discuta despre problema Trie.
Memorat
mika17
Strain
*

Karma: 8
Deconectat Deconectat

Mesaje: 33



Vezi Profilul
« Răspunde #1 : Decembrie 30, 2008, 18:40:50 »

pt cei ce folositi streamuri si eventual nu luati 100 aveti grija la citire ... ceva genul
Cod:
while(!fin.eof()) 
 fin>>op>>cuv
poate cauza buguri de ex daca nu gaseste cifre/caractere compatibile sau ajunge la sf fisierului si atunci citirea nu mai are loc si raman vechile valori si algoritmul le foloseste pe acelea / calc de 2 ori pt aceleasi valori ... pt aceasta prob puteti folosi ceva gen
Cod:
if( fin.good() ) { op1() op2() etc}
acest mic detaliu a facut la mn dif dintre 30p si 100p

[edit] e o idee buna sa faci bucatile de cod vizibile folosind tagul "[ code ]"
« Ultima modificare: Decembrie 30, 2008, 18:48:16 de către Sima Cotizo » Memorat
Bit_Master
Vorbaret
****

Karma: -49
Deconectat Deconectat

Mesaje: 159



Vezi Profilul
« Răspunde #2 : Martie 21, 2010, 12:56:53 »

De ce nu s-au reglat restrictiile problemei sa suporte cei 50MB limita, pt ca testele de evauare sa fie de toate genurile, nu neaparat omogene. Mi se pare ciudat sa favorizezi o metoda de rezolvare prin intermediul testelor.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #3 : Martie 21, 2010, 13:12:24 »

Aceasta problema este in scop educational. Este normal sa fie evidentiata o anumita rezolvare pe care le-o propunem ca exercitiu utilizatorilor.
Memorat

Am zis Mr. Green
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #4 : Iulie 04, 2010, 21:11:31 »

A mai luat cineva 100 folosind '\n' in afara de Lucian?
Eu iau 0 puncte asa si 100 daca folosesc strlen() sau '\0'.
« Ultima modificare: Iulie 04, 2010, 21:29:33 de către Dragos » Memorat
amadaeus
Client obisnuit
**

Karma: 28
Deconectat Deconectat

Mesaje: 93



Vezi Profilul
« Răspunde #5 : Iulie 04, 2010, 22:25:39 »

Te referi, probabil, la caracterul in functie de care te opresti din recursivitate, iar asta e un detaliu strict legat de implementarea algoritmului tau.
Trebuie sa te uiti mai atent peste notiunile de null-terminated string si line break si vei vedea ca iti vei putea face sursa, cu cateva modificari minore de indici, sa functioneze si cu '\n'  wink
Memorat

"one of these days I'm going to cut you into little pieces..."
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #6 : Iulie 05, 2010, 11:20:12 »

Te referi, probabil, la caracterul in functie de care te opresti din recursivitate, iar asta e un detaliu strict legat de implementarea algoritmului tau.
Trebuie sa te uiti mai atent peste notiunile de null-terminated string si line break si vei vedea ca iti vei putea face sursa, cu cateva modificari minore de indici, sa functioneze si cu '\n'  wink

Am inteles de ce mergea la tine, fgets citeste si '\n', iar .getline() citeste '\n' dar il da afara dupa.
La ce te referi prin "indici"?
Memorat
amadaeus
Client obisnuit
**

Karma: 28
Deconectat Deconectat

Mesaje: 93



Vezi Profilul
« Răspunde #7 : Iulie 05, 2010, 15:20:22 »

Nu m-am uitat atent peste funcia ta de citire, imi pare rau.
Initial crezusem ca e vorba despre cum accesezi caracterele in array-ul in care le memorezi, facand un pas suplimentar pentru a trece de la '\n' la '\0'.
Memorat

"one of these days I'm going to cut you into little pieces..."
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #8 : Iulie 05, 2010, 16:03:28 »

Nu m-am uitat atent peste funcia ta de citire, imi pare rau.
Initial crezusem ca e vorba despre cum accesezi caracterele in array-ul in care le memorezi, facand un pas suplimentar pentru a trece de la '\n' la '\0'.

Nu-i nici o problema!  Ok
Memorat
nicolaetitus12
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #9 : Iulie 19, 2010, 22:13:42 »

La metoda bruta stergerea nu e O(L*N) ?
Memorat
zsee
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #10 : Iulie 22, 2010, 14:36:29 »

"Pentru toate operatiile, cuvantul w este format din maxim 20  de caractere din intervalul 'a'..'z'"
Ar trebui corectat, ca testele contin si numere...
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #11 : Iulie 22, 2010, 15:12:07 »

M'am uitat peste cateva teste si nu am vazut cifre in interiorul cuvintelor. Care teste contin cifre?
Memorat
zsee
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #12 : Iulie 22, 2010, 18:13:49 »

scz am gresit eu... miam dat seama care era problema...
Asa apare la mine in notepad: 0 ab0 abac3 qfksxe2 (...) De fapt notepadul era de vina, ca in alte aplicatii se vede normal...
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #13 : Septembrie 20, 2010, 19:08:34 »

La problema iau 30 de puncte cu multe sigsegv si incorecturi. Banuiesc ca e din cauza citirii deoarece atunci cand nu am newline la sf fis. merge orice test. Citesc asa:
Cod:
for( ;!f.eof();f.get()) {
        f>>ce;
        f.getline(cuv,50);
        if(cuv[strlen(cuv)]!='\0')
            cuv[strlen(cuv)]='\0';
        if(!ce) t->insert(t,cuv);
        else if(ce==1) t->del(t,cuv);
        else if(ce==2) g<<t->query(t,cuv)<<'\n';
        else if(ce==3) g<<t->prefix_comun(t,cuv,0)<<'\n';
    }

sursa e asta:http://infoarena.ro/job_detail/486230?action=view-source

Ma poate ajuta cineva sa o fac sa mearga de 100?

Nu mai am nevoie. Celor carora nu le iese sa foloseasca
Cod:
if(fin.good){
switch (op) etc
}
(daca fol streamuri de c++)
« Ultima modificare: Septembrie 20, 2010, 19:27:33 de către Trimbitas Petru » Memorat
livium
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 21



Vezi Profilul
« Răspunde #14 : Februarie 04, 2011, 14:01:11 »

Stie cineva ce face *s - 'a' ?
Ca eu nu inteleg.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #15 : Februarie 04, 2011, 20:51:32 »

Inseamna a cata litera din alfabet e caracterul catre care indica pointer-ul s.
Memorat

Am zis Mr. Green
livium
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 21



Vezi Profilul
« Răspunde #16 : Februarie 05, 2011, 15:53:55 »

Merci!
Mi-am dat si eu seama de asta la scurt timp dupa ce am pus intrebarea.
Memorat
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #17 : Iulie 08, 2011, 22:42:52 »

Salut Smile !

Ma puteti ajuta si pe mine va rog, sa inteleg care este problema implementarii mele? Iau numai 10 puncte, cu toate ca am luat cateva teste, le-am comparat si toate rezultatele imi dau ok Smile .

Multumesc!

L.E. : Multumesc frumos PlayLikeNeverB4 ca ai incercat sa ma ajuti! Se pare ca nu initializam o valoare din Trie cu 1, cea care pastra numarul de prefixe din fiecare elemnt!
« Ultima modificare: Iulie 09, 2011, 01:08:41 de către Lambru Andrei Cristian » Memorat
razyelx
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #18 : Octombrie 13, 2011, 00:46:33 »

rog pe cineva care are putin timp sa se uite peste sursa mea. in mare parte am segmentation fault si incorect. merge pe exemplu.
 Thumb down
Memorat
algotroll
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #19 : Martie 24, 2012, 23:29:08 »

Va rog frumos daca poate cineva sa isi dea seama ce nu e in regula cu implementarea mea, ma streseaza de mai mult de o ora.
Mai precis, pentru
Cod:
struct nod
{
    nod* nlist[26];
    int ap;
    nod()
    {
        memset(nlist,0,sizeof(nlist));
        ap=0;
    }
};
void insert(nod* pN, string &a)
{
    for (int i=0;i<a.size();i++)
    {
        if (pN->nlist[alf(a[i])]==0)
        {
            nod* pTmp = new nod;
            pN->nlist[alf(a[i])]=pTmp;
            pN=pTmp;
        }
        else pN=pN->nlist[alf(a[i])];
    }
    pN->ap++;
}
int pre_com(nod* pN, string &a)//prefix comun
{
    for (int i=0;;i++)
    {
        if (pN->nlist[alf(a[i])]==0) return i; //asta e singura verificare pt incheierea
        pN=pN->nlist[alf(a[i])]; // buclei; frunza are nlist nula
    }
}
cu alf(x)==x-'a'
efectuarea
Cod:
nod trie; insert(&trie,"aa");  pre_com(&trie,"aa"); 
da segmentation fault. pe gdb nu apare problema.
Memorat
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #20 : Martie 25, 2012, 00:35:10 »

Nu imi este clar de ce iti da KBS 11 in cazul pe care l-ai trecut tu acolo, dar din restul codului observ ca nu folosesti variabila ap in mod consistent. In unele cazuri consideri ca este numarul de aparitii al cuvintelor iar in alte cazuri consideri ca este numarul de cuvinte dintr-un subarbore. Cred ca vrei sa folosesti 2 variabile separate pentru asta. Asta explica de ce iei incorect, dar sunt sanse mari ca KBS-ul sa fie din aceiasi cauza.
Memorat
algotroll
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #21 : Martie 25, 2012, 09:07:06 »

Nu imi este clar de ce iti da KBS 11 in cazul pe care l-ai trecut tu acolo, dar din restul codului observ ca nu folosesti variabila ap in mod consistent. In unele cazuri consideri ca este numarul de aparitii al cuvintelor iar in alte cazuri consideri ca este numarul de cuvinte dintr-un subarbore. Cred ca vrei sa folosesti 2 variabile separate pentru asta. Asta explica de ce iei incorect, dar sunt sanse mari ca KBS-ul sa fie din aceiasi cauza.
Da, ai dreptate, trebuia sa numar cate aparitii au ascendentii fiecarui nod. Nu mi-am dat seama ca fara stergerea se face prea dificil. mersi!
Memorat
Alexxino7
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #22 : Octombrie 07, 2012, 14:34:31 »

what the hell is this? http://infoarena.ro/job_detail/795049
Nu prea le am cu pointerii dar sursa ruleaza fara probleme pe calculatorul meu.
Dupa ce am scos asserturile am luat iar killed by signal 11 http://infoarena.ro/job_detail/795053, deci banuiesc ca se declanseaza vreunul din ele. Dar la mine pe calc nu se declanseaza nici unul.
Later Edit: Nu mai este nevoie i-am dat de cap pana la urma.
« Ultima modificare: Octombrie 07, 2012, 20:38:25 de către Alexandru Popescu » Memorat
tudy23
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #23 : Martie 23, 2013, 19:53:32 »

Am rezolvat problema si primesc doar 5 puncte. Am verificat fisierul meu .out cu fisierele de test si da bine pe cel putin 4(atat am verificat, atat manual cat si folosind un program). E cineva binevoitor sa se uite peste sursa?Poate fac vre-o afisare gresit. Multumesc!
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #24 : Martie 23, 2013, 20:36:21 »

Vezi ca ai niste warning-uri la compilare. Posibil ca de acolo sa vina diferenta.
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

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