infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Filip Cristian Buruiana din Februarie 26, 2008, 18:07:24



Titlul: 003 Floyd-Warshall/Roy-Floyd
Scris de: Filip Cristian Buruiana din Februarie 26, 2008, 18:07:24
Aici puteti discuta despre problema Floyd-Warshall/Roy-Floyd (http://infoarena.ro/problema/royfloyd).


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Andrei Misarca din Martie 29, 2008, 10:23:48
Dar de ce se considera ca nu exista drum intre un nod si el insusi, pentru ca daca de exemplu exista drum intre B si C , intre C si E si intre E si B, atunci exista drum de la B la B: B-C-E-B  :)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Bogdan-Alexandru Stoica din Martie 29, 2008, 10:39:42
Citat
sa se determine pentru orice pereche de noduri x si y lungimea minima a drumului de la nodul x la nodul y

B-C-E-B este un ciclu.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Andrei Misarca din Martie 29, 2008, 10:53:22
B-C-E-B este un ciclu.
Dap ... n-am citit fff atent  ](*,)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Iacob Eduard din Decembrie 17, 2008, 18:15:46
Nu am inteles prea bine faza aia cu ordinea lui k,i si j.De ce trebuie sa fie neaparat asa?Intuiesc eu de ce,dar nu pot sa demonstrez.Este din cauza ca dak nu avem forurile in ordinea k,i,j, drumurile nu o sa mai fie optime,nu?De ce?
Am cautat pe mai multe site-uri si nu am gasit raspunsul


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Stefan Istrate din Decembrie 17, 2008, 20:17:19
Roy-Floyd e un algoritm de programare dinamica. Mai intai calculeaza pentru drumurile de lungime 1 intre oricare 2 noduri i si j, apoi pentru drumurile de lungime 2, etc. Deci variabila k reprezinta lungimea drumului. Incearca sa retii ideea din spatele algoritmului, si nu doar ca sunt 3 for-uri in ordinea k, i, j.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Iacob Eduard din Decembrie 17, 2008, 21:26:18
Sa zicem ca am inteles cam ce vroiam eu .Tx


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Cosmin Negruseri din Decembrie 18, 2008, 06:44:50
Stefane nu e bine ce ai zis. Algoritmul calculeaza la pasul k drumurile optime intre i si j care folosesc ca noduri intermediare nodurile din multimea {1, 2, ... k}.

Incearca sa retii ideea din spatele algoritmului, si nu doar ca sunt 3 for-uri in ordinea k, i, j :P


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Stefan Istrate din Decembrie 18, 2008, 08:51:48
Ah, da. Greseala mea :oops:


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Andrei Grigorean din Decembrie 18, 2008, 13:53:26
Incearca sa retii ideea din spatele algoritmului, si nu doar ca sunt 3 for-uri in ordinea k, i, j :P

Mie mi-a luat cativa ani ca sa inteleg exact ce face roy-floyd. M-am multumit sa stiu ordinea k, i, j :P. Acelasi lucru l-am facut si la arbori indexati binar, kmp si la flux. Nu e ok sa inveti pe de rost un algoritm, desi in concurs te poate ajuta sa implementezi corect o solutie de care te prinzi. Daca nu intelegeti ceva, e bine sa reveniti asupra lui periodic, inarmati cu noi cunostinte, pana cand sunteti convinsi ca e totul limpede.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Iacob Eduard din Decembrie 18, 2008, 17:49:02
Citat
Deci variabila k reprezinta lungimea drumului
Cred ca ce vroia sa spuna Stefan,e ca la fiecare pas,intre i si j se afla maxim k noduri intermediare.

@wefgef:Stii vreun articol,vreun site in care sa se explice mai bine cum functioneaza Roy-Floyd?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Andrei Grigorean din Decembrie 18, 2008, 19:23:39
Ai putea sa incerci in Cormen.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Iacob Eduard din Decembrie 19, 2008, 17:42:17
ok  :)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Cosmin Negruseri din Decembrie 20, 2008, 09:38:47
Nu k noduri intermediare, ci noduri intermediare din multimea {1, 2, .. k}. Daca nu ai Cormenul la indemana poti sa cauti pe google de exemplu wikipedia are o explicatie a algoritmului.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: alexandru din Martie 11, 2009, 21:05:52
Imi spune si mie cineva unde gresesc  la sursa sa deja turbez  ](*,)
http://infoarena.ro/job_detail/277712?action=view-source


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: gaboru corupt din Martie 11, 2009, 21:11:14
conditie ar trebui sa fie asa:

Cod:
a[ i ][ k ]!=0&&a[ k ][ j ]!=0&&(a[ i ][ k ]+a[ k ][ j ]<a[ i ][ j ]|| a[ i ][ j ]==0) && i!=j

cred ca uiti "sau"-ul ala. actualizezi a[ i ][ j ] ai daca drumul de la i->j ii mai mare decat i->k->j sau nu ai drum deloc


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: alexandru din Martie 12, 2009, 07:54:37
multumesc:D


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Codrea Marcel din Martie 29, 2009, 13:21:36
Cred că problema Coach  (http://infoarena.ro/problema/coach) a lui Radu Berinde se foloseste cel mai bine de componenta intrinsecă a algoritmului Roy - Floyd :

Algoritmul calculeaza la pasul k drumurile optime intre i si j care folosesc ca noduri intermediare nodurile din multimea {1, 2, ... k}.

Propun să fie introdus un link catre Coach, acolo unde se propune ca exerciţiu explicarea ordinii iteratorilor.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Tirca Bogdan din Ianuarie 12, 2010, 09:58:06
Dar daca am aplica dijkstra pentru fiecare  nod? Nu ar fi corect?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Andrei Misarca din Ianuarie 12, 2010, 13:22:22
Ba da, este același lucru. Dar există probleme unde se folosesc proprietățile algoritmului Roy-Floyd (vezi Coach).


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Tirca Bogdan din Ianuarie 12, 2010, 16:50:21
Dar complexitatea in loc de n^3 devine n*m* log n
L.E. Pentru numar mare de muchii nu are rost:)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Prigoana Cristian din Februarie 16, 2010, 00:26:12
pot exista costuri negative?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Philip din Februarie 16, 2010, 16:03:50
pot exista costuri negative?

La problema asta nu o sa fie, insa algoritmul Floyd-Warshall/Roy-Floyd merge si pe grafuri cu costuri negative.
Ciclurile sunt cele care trebuie sa fie tot timpul pozitive.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Prigoana Cristian din Februarie 17, 2010, 09:38:51
Ciclurile sunt cele care trebuie sa fie tot timpul pozitive.
dar algoritmul determina cicluri de cost negativ? nu prea vad cum ... pentru ca is alea 3 for-uri,  si atat, eventual numa daca mai aplici inca o data Roy-Floyd, si tot mai poti imbunatati costuri....atunci exista ciclu negativ?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Philip din Februarie 17, 2010, 16:29:53
Ciclurile sunt cele care trebuie sa fie tot timpul pozitive.
dar algoritmul determina cicluri de cost negativ? nu prea vad cum ... pentru ca is alea 3 for-uri,  si atat, eventual numa daca mai aplici inca o data Roy-Floyd, si tot mai poti imbunatati costuri....atunci exista ciclu negativ?

Poti afla daca ai cicluri negative dupa prima aplicare Roy-Floyd asa... verifici diagonala principala din matricea costurilor (drum minim de la i la i) si daca ai cost negativ inseamna ca ai un ciclu de cost negativ.
Dar nu cred ca ar trebui sa apara la vreo problema cicluri de cost negativ. Nu prea are sens.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Anatole Duquele din Martie 04, 2010, 19:47:33
Salut.Am inceput sa scriu cod de foarte putin timp.Particip la OJI 2010 la liceu si am invatat roy-floydul dintr-un manual. Imi ies testele corect(matricea se construieste bine) dar nu stiu sa o interpretez.As vrea daca se poate sa ma lamureasca cineva cum pot sa aflu drumul minim conform matrici rezultate.(presupunand ca asta ar trebui sa faca roy-floydul).Multumesc.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Lepadat Mihai-Alexandru din Martie 04, 2010, 20:05:25
Valoarea din a[ i][j] reprezinta costul minim de la nodul i la nodul j. Incearca totusi sa intelegi cum functioneaza algoritmul.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: alexandru din Martie 04, 2010, 21:39:14
Folosind Roy-Floy determini costul drumului minim intre oricare 2 noduri din graf.  La fiecare pas el compara distanta intre i->j si i->k->j ( interpune un nod k ca sa vada daca  distanta ar fi mai mica ). Astfel drumul minim de la i->j va fi in matricea a[ i ][ j ] :)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Tirca Bogdan din Martie 05, 2010, 10:45:04
Ai aici un exemplu despre cum descompui drumul
http://infoscience.3x.ro/c++/roy_floyd.htm (http://infoscience.3x.ro/c++/roy_floyd.htm)


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Anatole Duquele din Martie 05, 2010, 16:56:19
Sa presupunem ca nu cunosc notiunea de graf si vreau sa aflu costul minim dintre doua celelule ale unei matrici, cum imi dau seama care este drumul minim conform matricii rezultate?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: George Popoiu din Martie 05, 2010, 18:04:16
Citat
Sa presupunem ca nu cunosc notiunea de graf si vreau sa aflu costul minim dintre doua celelule ale unei matrici
Poti sa faci o dinamica cu o coada. Daca vrei detalii PM me.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Dragos din Septembrie 25, 2010, 15:53:41
Jumatate din teste contin grafuri complete?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Alexandru-Iancu Caragicu din Iunie 02, 2011, 16:40:52
ideea la algoritmul acesta e ca e rapid de implementat decat dijkstra, nu?

ca de n ori dijkstra cu heap-uri ar avea complexitate O(N^2 * logM) in loc de O(N^3)...

sau mai are si alte avantaje?


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: cont cu nume gresit sau fals din Iunie 02, 2011, 16:49:40
ideea la algoritmu' asta este ca merge pe grafuri cu costuri negative, spre deosebire de dijkstra :eyebrow:


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Alexandru-Iancu Caragicu din Iunie 02, 2011, 16:53:02
ideea la algoritmu' asta este ca merge pe grafuri cu costuri negative, spre deosebire de dijkstra :eyebrow:

ms


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Paul-Dan Baltescu din Iunie 03, 2011, 00:35:18
De asemenea e mai avantajos atunci cand M este aproximativ N2. Pentru aceste cazuri daca ai face de N ori Dijkstra cu heap ai obtine complexitatea O(N3logN). Facand de N ori Dijkstra clasic, complexitatea e O(N3), dar constanta e putin mai mare.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Edi Pop din Octombrie 24, 2012, 13:51:33
Zice ca n e maxim 100, si n-ul din primul test e 200.


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Gabriel Bitis din Octombrie 24, 2012, 14:17:05
M'am uitat prin atasamente ... si nu e niciun test cu N 200 ..


Titlul: Răspuns: 003 Floyd-Warshall/Roy-Floyd
Scris de: Radu Stancu din Iulie 24, 2018, 20:45:17
Am incercat sa rezolv pb asta folosind Java https://infoarena.ro/job_detail/2224736 . Cele 2 TLEs par sa fie din cauza citirii din Java (citirea este facuta eficient folosind un buffered reader) . Se poate mari limita de timp pt sursele in Java?