Pagini: 1 [2] 3   În jos
  Imprimă  
Ajutor Subiect: 004 Biti  (Citit de 28685 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
lucibit
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« 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 Sad
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
De-al casei
***

Karma: 121
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« 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 Deconectat

Mesaje: 20



Vezi Profilul
« 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  Whistle ). Oricum, iau doar 5 p. Nu primesc TLE, ci WA (timpul maxim e de 0.14 s/ test).

 Pray 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
De-al casei
***

Karma: 51
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #29 : Aprilie 09, 2006, 13:08:33 »

Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000
Memorat

Viksen
Strain


Karma: 10
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« 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..  Think
Memorat

going UP !...
points_hunter
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 26



Vezi Profilul
« 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 Deconectat

Mesaje: 20



Vezi Profilul
« 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 Tongue. 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
Nu mai tace
*****

Karma: 6
Deconectat Deconectat

Mesaje: 235



Vezi Profilul WWW
« 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 Huh
« Ultima modificare: Iunie 07, 2006, 20:23:53 de către Coty » Memorat
Viksen
Strain


Karma: 10
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #34 : Iunie 07, 2006, 19:53:36 »

shi eu ce spuneam???!!! E back! E back!   Read This! ^
Memorat

going UP !...
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #35 : Iunie 07, 2006, 21:20:00 »

Ati citit tot threadul?HuhHuhHuh? Se poate face cu algoritm polinomial de gasire a unui ciclu eulerian!!!!!!!!!! Se poate face si cu back, dar nu e o problema NP! Deci cum spuneam NU e back! NU e back!
Memorat
Coty
Nu mai tace
*****

Karma: 6
Deconectat Deconectat

Mesaje: 235



Vezi Profilul WWW
« 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 Deconectat

Mesaje: 9



Vezi Profilul
« 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 Very Happy  !!! 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 Twisted Evil !

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 Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #40 : Aprilie 06, 2008, 17:09:43 »

fara sa cunosc notiunea de graf..nu voi putea rezolva problema? Brick wall
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #41 : Aprilie 06, 2008, 18:23:04 »

Ba da, merge cu backtracking Smile.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
gggbbbyyy
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« 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,  wink
Memorat
O_Neal
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« 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  Cry
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #44 : August 20, 2008, 13:08:49 »

pt 5:
Cod:
36
000001000110010100111010110111110000
pt 6:
Cod:
69
000000100001100010100011100100101100110100111101010111011011111100000
Memorat
SilverMoon
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« 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 Think. 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
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« 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 Mr. Green
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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 Wink.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
SilverMoon
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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.
Pagini: 1 [2] 3   În sus
  Imprimă  
 
Schimbă forumul:  

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