Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Răspuns: 009 Algoritmul lui Dijkstra  (Citit de 5373 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
GooDy
Strain
*

Karma: -28
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« : Aprilie 18, 2008, 14:44:00 »

Poate sa-mi explice si mie cineva "Algoritmul lui Dijkstra", ca nu prea am priceput, cu ce se mananca?

A, si care ar fi cel mai bun algoritm, dupa parerea voastra, pentru calcularea drumului minim?

Va multumesc anticipat.
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #1 : Aprilie 18, 2008, 14:47:27 »

Consulta asta: http://infoarena.ro/problema/dijkstra.
Memorat

vid...
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #2 : Aprilie 18, 2008, 15:19:35 »

Se vede ca se apropie olimpiada Smile

Ai putea separa intrebarile in threaduri diferite ...
Memorat
GooDy
Strain
*

Karma: -28
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« Răspunde #3 : Aprilie 18, 2008, 18:41:17 »

O sa le separ de acuma, imi cer scuze.

Citat

Citisem deja si nu am inteles nimica, deaceea am cerut ajutor.
Plz. sa-mi explice si mie cineva Smile.
Memorat
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #4 : Aprilie 18, 2008, 19:20:25 »

Algoritmul lui Dijkstra este un algoritm de tip greedy. In randurile de mai jos D[ i ] reprezinta distanta de la nodul sursa (S), iar C[ i ][ j ] = costul muchiei (i,j).

Initial D[ i ] = INF (pt i dif de S) .
pasul 1: cautam nodul i pentru care D[ i ] este minim.
pasul 2: parcurgem toti vecinii lui i si reactualizam distanta pentru un vecin j, daca D[ j ] este mai mare decat            D[ i ]+C[ i ][ j ]. reluam de la pasul 1.

pasul 1 se poate face in O(n) (parcurgand vectorul D si luand minimul), iar complexitatea finala va fi  O(N*N+M). Daca vrei sa faci acest pas mai repede, de fiecare data cand reactualizezi distanta pentru un vecin o introduci intr-un heap (in O(log N)) si vei face pasul 1 in O(1), iar complexitatea finala va fi O(NlogN + M).

(prin log x se intelege log2 x)

Iti sugerez sa citest ceea ce am zis mai sus uitandu-te, in paralel, pe sursa lui Filip: http://infoarena.ro/job_detail/153886?action=view-source
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
GooDy
Strain
*

Karma: -28
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« Răspunde #5 : Aprilie 19, 2008, 23:14:27 »

Care ar fi cel mai bun algoritm, dupa parerea voastra, pentru calcularea drumului minim?
Memorat
amadaeus
Client obisnuit
**

Karma: 28
Deconectat Deconectat

Mesaje: 93



Vezi Profilul
« Răspunde #6 : Aprilie 20, 2008, 00:53:36 »

Depinde de problema: daca ai sursa unica, poti folosi Dijkstra (cu heap-uri) sau Bellman-Ford (cu coada). Eu il prefer, in general, pe al doilea, pentru simplitate, cu toate ca primul se comporta, teoretic, mai bine.
Daca te intereseaza drumuri minime intre toate perechile de varfuri, folosesti Floyd-Warshall (sau Roy-Floyd, cum mai este numit).

Problema drumurilor minime este foarte bine tratata in CLR, o carte de care vei avea nevoie, daca te hotarasti sa incepi studiul serios Very Happy

Iti sugerez, totusi, sa te documentezi putin mai mult inainte de a pune o astfel de intrebare pe forum, sunt pe internet suficiente surse de informare, in care vei gasi pe larg explicatii asupra algoritmului, poate mai complete sau mai usor de inteles decat iti va putea da cineva aici (eforturile lui Bogdan sunt cu adevarat de apreciat  Applause un + de la mine). Abia dupa ce te vei convinge singur "cu ce se mananca" e indicat sa ceri sfaturi legate de anumite particularitati sau aplicatii.
« Ultima modificare: Aprilie 20, 2008, 10:34:59 de către Lucian Boca » Memorat

"one of these days I'm going to cut you into little pieces..."
byndrsn
Client obisnuit
**

Karma: 19
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #7 : Aprilie 20, 2008, 01:44:35 »

In plus, depinde si ce costuri sunt pe muchii. Dijkstra merge doar pe grafuri cu costuri non-negative.
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #8 : Aprilie 20, 2008, 09:56:30 »

In general vrei sa stii mai multi algoritmi nu doar cel mai bun. Probabil nici nu exista unul cel mai bin. Daca stii mai multi in detaliu poti sa alegi in functie de cerinte cel care se potriveste mai bine la problema.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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