•lucibit
Strain
Karma: 0
Deconectat
Mesaje: 4
|
|
« Răspunde #25 : Martie 17, 2006, 14:22:08 » |
|
Deci, am facut circuit eulerian, frumos, ar trebuii sa imi merarga..numai ca iau doar 10 puncte...nu ma prind. Sgiur e ceva cu ordinea lexicografica, ca de ex la N=4 NU imi iese ca la exemplul ala din linkul postat(cu de Burjin), chit ca e corect rapsunsul, numai ca deh, nu e ordinea lexicografica ca la ala. Am facut ciclul de mana si imi da bine cum imi da mie, nu inteleg de ce nu e asa. Cand selectezi nodurile , selectezi mai intai muchia ce se termina in 1 si a doua oara pe cea care se termina in 0. Daca faci invers se blocheaza algoritmul pt ca nu contruieste ciclul bine. Daca va uitati la circuitul pe care il da ca exemplu in link o tot ia pe 1,la inceput , cum am zis..si la un moment dat are de ales intre 1 si 0 si o ia pe 0 prima oara. not fair Ma ajuta cineva?
|
|
|
Memorat
|
|
|
|
tmac
Vizitator
|
|
« Răspunde #26 : Martie 24, 2006, 17:35:57 » |
|
caut un ciclu eulerian pe un graf format din elementele de lungime n-1 (0 ... 2^(n-1)) in care fiecare nod i are muchie la (2*i) % 2^(n-1) si la (2*i+1) % 2^(n-1). si apoi cum fac sa dau de sirul ala minim ?? cam incercat toate posibilitatile ... ?
|
|
|
Memorat
|
|
|
|
•alexthero
|
|
« Răspunde #27 : Martie 24, 2006, 20:08:41 » |
|
Citeste postul lui Stilgar de mai sus.. te poate ajuta
|
|
|
Memorat
|
Tine minte ca mintea conduce pumnu, nu invers
|
|
|
•Viksen
Strain
Karma: 10
Deconectat
Mesaje: 20
|
|
« Răspunde #28 : Aprilie 09, 2006, 12:41:35 » |
|
Am vazut k evaluarea se face pe 20 de teste (f. probabil pt. toate cele 20 de valori ale lui n). Am rezolvat problema, iar mie, acasa , pt. testele cu n=(1, 2, 3, 4) imi da corect (cel putin pt. aceste teste.. tind sa cred k shi celelalte raspunsuri sunt tot corecte ). Oricum, iau doar 5 p. Nu primesc TLE, ci WA (timpul maxim e de 0.14 s/ test). Va rog, daca se poate, sa imi dati un exemplu de output corect pt n intre 4 shi 6 k sa ma asigur k am facut bine... Chiar nu inteleg unde pot sa greshesc. Am tinut cont shi de prioritatea lexicografica.
|
|
« Ultima modificare: Aprilie 09, 2006, 12:44:06 de către Viksen »
|
Memorat
|
going UP !...
|
|
|
•Adriana_S
|
|
« Răspunde #29 : Aprilie 09, 2006, 13:08:33 » |
|
Pentru n = 5 da 36 000001000110010100111010110111110000
|
|
|
Memorat
|
|
|
|
•Viksen
Strain
Karma: 10
Deconectat
Mesaje: 20
|
|
« Răspunde #30 : Aprilie 09, 2006, 14:24:05 » |
|
Iti multumesc mult! Cred k am o greseala pe undeva.Raspunsul meu nu era minim lexicografic after all..
|
|
|
Memorat
|
going UP !...
|
|
|
•points_hunter
Strain
Karma: -7
Deconectat
Mesaje: 26
|
|
« Răspunde #31 : Aprilie 23, 2006, 20:53:19 » |
|
Am rezolvat problema cu ciclu eulerian dar nu stiu cum ati facut-o voi cu back iterativ. Datorita dimensiunilor mari mi se pare aproape imposibil. Ce puneti pe un nivel???
|
|
|
Memorat
|
Intr-o lume plina de prostie si noobism Ceva mai increzator, putin mai oportunist Nihil sine DEO(Iubeste si vei fi iubit , Nu uita niciodata ca esti om)
|
|
|
•Viksen
Strain
Karma: 10
Deconectat
Mesaje: 20
|
|
« Răspunde #32 : Aprilie 24, 2006, 14:26:23 » |
|
nu shtiu cum faci U parcurgerea, dar dak porneshti sa spunem din 000 pt. n=3 ar trebui sa treci prin drumul: 000>001>010>101>011>111>110>100 cum fiecare nod din graph are exact 2 fii, poti retine ushor in care din ei te-ai dus la un moment dat, codificand fiul mai mic al unui nod cu 0 shi pe celalalt cu 1. pt. ex de mai sus ai avea: (radacina : 000)>1>0>1>1>1>0>0 dak il citeshti asha, vei vedea k e raspunsul corect . Oricum, secventa se genereaza back, in maxim 2^n (2^20 ~ 1 000 000). Pornind cu radacina in 0..000 (sau maxim in 0..001) vei avea minim lexicografic. ______________ Rog moderatorii Infoarena sa stearga acest post daca nu corespunde cerintelor forumului
|
|
|
Memorat
|
going UP !...
|
|
|
•Coty
|
|
« Răspunde #33 : Iunie 07, 2006, 19:32:00 » |
|
ma scuzati ca intervin dupa atata timp... dar ce vrea problema asta sa facem nu este un ciclu hamiltonian? ala stiu eu ca cere sa trecem prin toate nodurile si nu prin toate muchiile (ca in problema, daca trecem prin toate muchiile, o sa avem o lungime mult mai mare) si determinarea unui ciclu hamiltonian nu are complexitate exponentiala (adica... nu e back ? ? ? ) eu asa stiam, desi e probabil sa gresesc
|
|
« Ultima modificare: Iunie 07, 2006, 20:23:53 de către Coty »
|
Memorat
|
|
|
|
•Viksen
Strain
Karma: 10
Deconectat
Mesaje: 20
|
|
« Răspunde #34 : Iunie 07, 2006, 19:53:36 » |
|
shi eu ce spuneam???!!! E back! E back! ^
|
|
|
Memorat
|
going UP !...
|
|
|
|
•Coty
|
|
« Răspunde #36 : Iunie 08, 2006, 09:16:07 » |
|
am citit tot threadul de 10 ori... si d-aia zic. Am gasit niste definitii:
Ciclu eulerian = ciclu simplu care contine toate muchiile unui graf Ciclu hamiltonoan = ciclu elementar care contine toate nodurile unui graf
la asta ma refer... s-o fi facand si fara back, nu zic... dar daca facem un ciclu eulerian o sa avem toate muchiile => or sa fie unele noduri de mai multe ori => secventa nu mai e minima... nu?
|
|
|
Memorat
|
|
|
|
u-92
Vizitator
|
|
« Răspunde #37 : Iunie 08, 2006, 13:00:06 » |
|
Nu ai inteles... atribui fiecarei muchii un cod si din cauza asta iti trebuie toate muchiile
|
|
|
Memorat
|
|
|
|
blasters
Vizitator
|
|
« Răspunde #38 : Iulie 13, 2006, 16:45:51 » |
|
Hmmm......... ciudat........ eu am luat 100 d puncte cu un backtracking recursiv ( am folosit operatii p biti) dar totushi local pentru testele cu n=19 shi 20 primesc segmentation fault....
|
|
|
Memorat
|
|
|
|
•sir_icemaster
Strain
Karma: -2
Deconectat
Mesaje: 9
|
|
« Răspunde #39 : Aprilie 24, 2007, 21:03:40 » |
|
Am vazut niste idei de rez a problemei de am cazut in cur da io zic ca cel mai usor s-ar face cum am facut-o io !!! cine nu vrea sa stie rezolvarea sa nu citeasca mai departe!!!! Se face cu un algoritm arhicunoscut:greedy daca stim ca trebuie sa fie prima din punct de vedere lexicografic atunci punem tot timpu 0 si numa daca nu se poate(un sir de booleane ne spune daca o fost luat nr sau nu) atunci punem 1 si nu mai veificam nimic(ceea ce reduce marimea sirului la jumatate).Mai trebuie facuta o precizare imp.:la inceput se pun n de 0 si la sf n-1 de 0 si atunce cand pornim greedyu toate nr de forma 10000, 1100 ,1110 se iau ca si cum ar fi folosite si dupa ce se termina greedy punem zerourile ca sa apara si ele. prin metoda asta nu ne trebuie decat un singur sir 500.000 de booleane care daca chiar vreau se poate trece in lucru pe biti si si face mult mai mic da neeee ! io am luat 100 asa ca puti incerca Nu se poate spune ca e greedy, considera urmatorul contraexemplu: sa zicem ca la pasul k se poate pune si 0 si 1. Alegem 0, facem un nr n de pasi inainte si ne blocam (pentru ca 0 a fost alegerea gresita). Acum trebuie sa facem n pasi inapoi si sa punem 1. Dar greedy nu face intoarceri, ci contruieste solutia progresiv alegand optiunea care pare cea mai buna la un moment dat. Probabil ca ai folosit backtracking nerecursiv si nu ti-ai dat seama.
|
|
|
Memorat
|
|
|
|
•codrin
Strain
Karma: 0
Deconectat
Mesaje: 11
|
|
« Răspunde #40 : Aprilie 06, 2008, 17:09:43 » |
|
fara sa cunosc notiunea de graf..nu voi putea rezolva problema?
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« Răspunde #41 : Aprilie 06, 2008, 18:23:04 » |
|
Ba da, merge cu backtracking .
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•gggbbbyyy
Strain
Karma: 0
Deconectat
Mesaje: 2
|
|
« Răspunde #42 : Iulie 19, 2008, 17:41:37 » |
|
Asa la intuitie: dupa cate vad incerci sa folosesti backtracking (recursiv?). Noah, dupa anumit numar de apeluri recursive (cica k=318297?) stiva se umple (ca n-are decat 1 mega) si noul apel recursiv incearca sa se aloce in continuare cum ar veni, ocupand o zona de memorie care nu este a lui. Si de acolo SEGMENTATION FAULT. Parerea mea,
|
|
|
Memorat
|
|
|
|
•O_Neal
Strain
Karma: 0
Deconectat
Mesaje: 15
|
|
« Răspunde #43 : August 20, 2008, 10:17:43 » |
|
o mica rugaminte .. niste exemple .. mai precis pt 5 de ex cat trebuie sa deie? nu inteleg ce am putut face de imi merge numa pt < 4
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #44 : August 20, 2008, 13:08:49 » |
|
pt 5: 36 000001000110010100111010110111110000 pt 6: 69 000000100001100010100011100100101100110100111101010111011011111100000
|
|
|
Memorat
|
|
|
|
•SilverMoon
Strain
Karma: -9
Deconectat
Mesaje: 9
|
|
« Răspunde #45 : Decembrie 15, 2008, 23:10:22 » |
|
Cred ca e o diferenta enorma intre compilatorul de aici si al meu de acasa. Aici iau 100% punctaj, cu 0.5 sec pentrul ultimul test, iar pe calcu meu scot vreo ~2 sec la el, si e core2duo la 3ghz cu 4gb ram . In fine, problema am rezolvat-o cu un backtracking iterativ optimizat la greu, nu e nevoie sa retii niciunde un graf, deoarece fiecare nod are 2 arce care ies din el si 2 care intra in el (unele noduri au chiar un arc catre ele insele). Este un graf orientat si fiecare arc poate fi gasit printr-o formula in O(1), cu alte cuvinte stim daca intre nodurile N si M exista arc in O(1), de aceea stim care este graful fara sa il retinem. Trebuie gasit un ciclu care trece prin toate nodurile o singura data, si incepe cu cel mai mic nod. Primul ciclu gasit este cel cerut. Astfel, programul se termina dupa ce s-a gasit primul ciclu. Numarul de cifre ale solutiei se calculeaza printr-o formula, deci tot in O(1). Bafta si celor care nu au rezolvat problema asta! Apropos, NU este ciclu eulerian!!!! Este un simplu drum care contine toate nodurile grafului si incepe cu cel mai mic posibil. Nu conteaza unde se termina si NU trebuie sa contina toate arcele. Editat de moderator: Nu posta consecutiv pe aceeasi tema! Modifica mesajele anterioare!
|
|
« Ultima modificare: Decembrie 15, 2008, 23:30:57 de către Paul-Dan Baltescu »
|
Memorat
|
|
|
|
•pauldb
|
|
« Răspunde #46 : Decembrie 15, 2008, 23:34:23 » |
|
Ma bucur ca esti entuziast ca ti-a iesit problema, dar lasa-i si pe altii sa gandeasca pentru ei.
|
|
|
Memorat
|
Am zis
|
|
|
•wefgef
|
|
« Răspunde #47 : Decembrie 16, 2008, 08:41:02 » |
|
Apropos,
NU este ciclu eulerian!!!! Este un simplu drum care contine toate nodurile grafului si incepe cu cel mai mic posibil. Nu conteaza unde se termina si NU trebuie sa contina toate arcele.
Vlad, intamplator aceasta problema chiar este ciclu eulerian. Doar pentru ca tu nu ai fost in stare sa gasesti graful corect, nu inseamna ca el nu exista .
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•SilverMoon
Strain
Karma: -9
Deconectat
Mesaje: 9
|
|
« Răspunde #48 : Decembrie 16, 2008, 15:32:33 » |
|
Ok, poate nu m-am exprimat suficient de bine. Vroiam sa exprim faptul ca am gasit o rezolvare mai simpla (dupa parerea mea). De ce trebuie sa gasesti graful? De ce trebuie sa gasesti ciclu eulerian? Cand graful il stii deja in O(1), adica stii orice "parte" din el printr-o singura formula, deci nu mai trebuie retinut, nu mai trebuie alocata matrice de 2^n * 2^n (sau liste liniare simplu inlantuite, cum facusem eu pana sa-mi dau seama ca nu trebuie). De ce trebuie ciclu eulerian cand un backtracking simplu (dar mai optimizat) rezolva totul? Este o regula ca trebuie gasit graful si apoi ciclul eulerian? Nu. Problema o poti rezolva in orice fel, atat timp cat raspunsul este corect. Eu am gasit o solutie ce scoate 0.5 s pentru ultimul test. Si am plecat de la un singur post de mai sus, care este defapt exemplul n=3 al lui Voicu Octavian. Nu consideri ca probleme astea le rezolvi si ca sa-ti largesti orizontul gandirii, originalitatea? Daca tot ce faci este sa citesti posturile si sa te iei dupa ele, practic tu nu ai "evoluat" decat pe plan teoretic, pentru ca acum stii de deBruijn, de graful lui si eventual de ciclu eulerian, daca nu stiai deja. Si da, initial am citit ca e ceva cu ciclu eulerian, dar inainte de a asterne pe ecran algoritmul pentru gasirea lui, am stat si m-am gandit, am scris pe foaie solutia si am vazut ca nu e ciclu eulerian pentru ca nu trece prin toate arcele. Daca fiecare nod are 2 arce de iesire si 2 de intrare, un ciclu eulerian ar trece prin fiecare nod de 2 ori, adica am avea o secventa 010100101xxxxx...xxx de 2 ori in solutia finala, ceea ce ar duce la lungirea solutiei, si deci nu la cea mai scurta solutie.
Cu alte cuvinte, te complici cu graful si ciclul eulerian, consumi memorie si timp de computatie.
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« Răspunde #49 : Decembrie 16, 2008, 15:55:28 » |
|
Hai sa o lasam balta.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
|