Pagini: 1 2 [3] 4 5 ... 8   În jos
  Imprimă  
Ajutor Subiect: 009 Algoritmul lui Dijkstra  (Citit de 117887 ori)
0 Utilizatori şi 2 Vizitatori pe acest subiect.
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #50 : Februarie 26, 2009, 21:20:19 »

Parseaza citirea. Si eventual foloseste un viz[] ca aici.Succes!
Memorat
Pepelea_Flaviu
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 98



Vezi Profilul
« Răspunde #51 : Februarie 26, 2009, 22:59:25 »

Are si el vectorul viz in program cu aceasi semnificatie. Insa, el adauga tot la sfarsit noduri, iar astfel exista riscul de a ii iesi din limitele cozii. Alternative ar fi: sa adaugi intodeauna un nod pe pozitia (poz_ult_nod_din_lista + 1) % N, unde N este numarul de noduri, sa incerci sa folosesti coada din stl sau sa implementezi o coada dinamica. Very Happy
« Ultima modificare: Februarie 26, 2009, 23:04:32 de către Flaviu Pepelea » Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #52 : Februarie 26, 2009, 23:42:17 »

am implementat o coada dinamica, am probleme doar cu timpul la ultimul test... am incercat si varianta lui Florian, mai putin parsarea citirii... deci probabil de acolo se trage TLE-ul... am incercat si citire in C si streamuri... acelasi rezultat... acum e prea tarziu sa mai incerc coada din STL, poate maine... multumesc oricum de raspunsuri! Ok
Memorat
razyelx
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #53 : Martie 03, 2009, 22:47:09 »

Imi poate explica si mie cineva de ce Dijkstra nu merge pe costuri negative, va rog. Eu l-am implementat si am pus doua muchii negative si mi-a mers de minune. Deci cum e cu asta?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #54 : Martie 03, 2009, 22:57:22 »

Se da urmatorul graf orientat:
Cod:
4 4
1 2 5
1 3 10
3 2 -7
2 4 5

Iti da bine?
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
alexthero
De-al casei
***

Karma: 121
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« Răspunde #55 : Martie 03, 2009, 22:58:49 »

Pe scurt, muchiile negative nu merg cu Dijkstra deoarece in momentul in care scoti un nod din heap (nodul cu cel mai mic cost) tu il consideri terminat (cost optim in el). Sa-ti dau un exemplu. Sa presupunem ca ai muchia de la 2 la 1 cu costul -5. In Dijkstra ai ajuns sa ai d[1] = 4 si d[2] = 5. Nodul cu cel mai mic cost e 1, deci il scoti din heap si ai terminat socoteala cu el. Insa exista un cost mai bun pe care nu l-ai luat in calcul, si anume drumul care ajunge in nodul 2 cu costul 5, si apoi ia muchia de la 2 la 1, ajungand in 1 cu costul 0.
Memorat

Tine minte ca mintea conduce pumnu, nu invers
razyelx
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #56 : Martie 03, 2009, 23:54:01 »

Ms fain. Acum am inteles si eu care e treaba. Daca exista costuri negative, atunci se poate intampla ca drumul de la un nod i la un nod j sa scada(prin adunare cu o valoare negativa), iar daca nodul j a fost selectat in trecut atunci drumurile care au trecut de la i prin j, nu vor fi actualizate cu noua valoare. Mda.. inca o data ms fain.  Ok
Memorat
philip
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #57 : Martie 09, 2009, 09:42:09 »

Cum de reuseste sursa http://infoarena.ro/job_detail/256683?action=view-source sa ia 100 de puncte?
E doar dijkstra simplu, fara heap. Care e complexitatea finala?
Memorat
CezarMocan
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« Răspunde #58 : Martie 09, 2009, 09:57:49 »

Ala nu e Dijkstra, e Bellman-Ford (cred Smile )
Memorat
philip
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #59 : Martie 09, 2009, 10:04:12 »

Ala nu e Dijkstra, e Bellman-Ford (cred Smile )
Si coada unde e?
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #60 : Martie 09, 2009, 11:33:25 »

Bellman Ford original nu e cu coada: Se parcurg toate muchiile i, j si se updateaza de fiecare data costul nodului j daca costul nodului i + costul muchiei e mai mic decat costul curent al nodului j si se repeta asta de N-1 ori. Coada e doar o optimizare.
« Ultima modificare: Martie 09, 2009, 11:38:42 de către Bogdan Tataroiu » Memorat
philip
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #61 : Martie 09, 2009, 12:10:57 »

Bellman Ford original nu e cu coada: Se parcurg toate muchiile i, j si se updateaza de fiecare data costul nodului j daca costul nodului i + costul muchiei e mai mic decat costul curent al nodului j si se repeta asta de N-1 ori. Coada e doar o optimizare.
Stiu ca e doar o optimizare. Intrebarea mea era cum reuseste sa ia 100 de puncte, neoptimizat.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #62 : Martie 09, 2009, 12:22:21 »

Sunt testele proaste daca nu ma insel, programul se bazeaza pe faptul ca nu o sa faca mai mult de logN operatii repeat. Fiecare repeat are complexitatea o(m). Daca dau un test de forma:

Cod:
10 11
3 2 1
4 3 1
5 4 1
6 5 1
7 6 1
8 7 1
9 8 1
10 9 1
11 10 1
1 11 1
1 2 10000000

Va face N operatii repeat.
Memorat
philip
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #63 : Martie 09, 2009, 14:43:04 »

OK, am inteles. Mersi!
Memorat
cristiprg
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #64 : Aprilie 08, 2009, 10:41:47 »

ciudat, am rezolvat-o de 40 puncte (cel putin asa cred) dar imi da TLE pe testele 2, 3, 4, care in mod normal nu are de ce. daca dau copy, paste in fisieru de intrare la mine pe calculator, merge fara probleme ...  Huh nu ar trebui sa se comporte la fel?
Memorat
cotofana
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #65 : Aprilie 08, 2009, 20:08:50 »

imi poate spune si mie cineva dc cu sursa asta am luat 100?
http://infoarena.ro/job_detail/280886
daca va uitati la functia percolate variabila father ramane una si aceeasi, nu se modifica in interiorul whilelului
is testele chiar in halu ala de slabe Smile?, ca la alte probleme unde trebea heap ma uitam la sursa asta sami amintesc functiile sift si percolate si luam doar 10-20 de pct tocmai din cauza acestei greseli
(sau is io batut in cap si numi inteleg propriul cod Very Happy)
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #66 : Octombrie 17, 2009, 22:14:55 »

Am și eu o nelămurire. Cu sursa asta obțin 100 de puncte, însă dacă renunț să mai marchez un nod ales cu distanța cea mai mică până în acel moment ca fiind neintrodus în heap, iau 60. Deci un nod mai poate fi introdus în heap după l-am vizitat odată? Destul de ciudat, având în vedere că la fiecare pas extrag nodul cu distanța minimă.
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #67 : Octombrie 18, 2009, 20:26:53 »

Am și eu o nelămurire. Cu sursa asta obțin 100 de puncte, însă dacă renunț să mai marchez un nod ales cu distanța cea mai mică până în acel moment ca fiind neintrodus în heap, iau 60. Deci un nod mai poate fi introdus în heap după l-am vizitat odată? Destul de ciudat, având în vedere că la fiecare pas extrag nodul cu distanța minimă.

Tu faci Lazy Dijkstra ...

Tu updatezi doar daca nu mai ai nodul in PriorityQueue... ceea ce nu e bine
(adica heapul nu se reface... dar distanta da)
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #68 : Octombrie 18, 2009, 20:45:44 »

Adică Lazy Dijkstra nu mai garanteaza O(M logN)?
« Ultima modificare: Octombrie 18, 2009, 21:03:01 de către Andrei Misarca » Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #69 : Octombrie 18, 2009, 20:48:16 »

ba garanteaza (cred ca e MlogM ... nu sunt sigur)
Memorat
mimarcel
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #70 : Ianuarie 25, 2010, 12:52:44 »

M-am uitat peste unele surse si am observat ca se declara vectorul cu muchii de 250002 elemente, insa maximul de muchii este 250000. Este necesar acest lucru sau la ce ajuta? Eu am rezolvat problema folosind un vector cu 250000 de pozitii.

Am inteles. Mersi pentru raspunsuri!
« Ultima modificare: Ianuarie 26, 2010, 10:49:50 de către Moldovan Ilie Marcel » Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #71 : Ianuarie 25, 2010, 13:19:58 »

Unii declara tablourile cu 2-3 elemente in plus, pentru siguranta. Se poate intampla sa declari fix, si sa depasesti spatiul declarat daca nu esti atent si nu indexezi de la 0, sau cine stie din ce alte motive.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #72 : Ianuarie 25, 2010, 15:49:57 »

M-am uitat peste unele surse si am observat ca se declara vectorul cu muchii de 250002 elemente, insa maximul de muchii este 250000. Este necesar acest lucru sau la ce ajuta? Eu am rezolvat problema folosind un vector cu 250000 de pozitii.
Nu este bine sa declari un vector exact de cat ai nevoie, poate sa crape programul. Daca este lucat in considerarea faptul ca vectorul este indexat de la 0 la n-1 atunci e ok, dar da incepi de la 1 o sa ai surprize Tongue.

  
« Ultima modificare: Ianuarie 25, 2010, 17:53:42 de către alexandru » Memorat
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #73 : Ianuarie 25, 2010, 16:45:10 »

M-am uitat peste unele surse si am observat ca se declara vectorul cu muchii de 250002 elemente, insa maximul de muchii este 250000. Este necesar acest lucru sau la ce ajuta? Eu am rezolvat problema folosind un vector cu 250000 de pozitii.
Nu este bine sa declari un vector exact de cat ai nevoie, poate sa crapa programul. Daca este lucat in considerarea faptul ca vectorul este indexat de la 0 la n-1 atunci e ok, dar da incepi de la 1 o sa ai surprize Tongue.

In general cred ca este bine sa declari vectorul exact atat cat iti trebuie, dar in cazul rezolvarii problemelor pentru olimpiada o neatentie te poate costa scump, asa ca multi prefera sa fie de partea sigura a baricadei si declara vectorii mai mari pentru ca se intampla de multe ori sa accesezi ceva care este la pozitia n+1 sau n+2.
Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #74 : Ianuarie 29, 2010, 11:08:31 »

Am facut Dijkstra clasic si am luat 40pct. Imi poate explica cineva ce ar trebui sa fac cu heap-ul? Ca nu reusesc sa ma prind sad

Intuiesc ca avem nevoie de un min-heap la care sa tinem in varf dinstanta de la nodul sursa la cel mai apropiat nod, dar nu imi dau seama cum ar trebui manipulat.

Multumesc anticipat !
Memorat
Pagini: 1 2 [3] 4 5 ... 8   În sus
  Imprimă  
 
Schimbă forumul:  

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