Van-e valaki, aki egy általam adott 8200 csúcspontú (12000 élű) gráfban R-rel (igraph) megkeresne két pont közötti útvonalat?
Próbáltam a saját gépemen, de napokig nem futott le; erős gép kellene hozzá.
- 2375 megtekintés
Hozzászólások
Cloud computing?
- A hozzászóláshoz be kell jelentkezni
Milyen algoritmust hasznalsz? Mennyire tudtad tobbszalusitani? Ha jol emlekszem, a Dijkstra n^2-es, es nincs nagyon sok csucsod.
Egyebkent egy i7 920-asom van (HT-el 8 mag) 18GB RAMmal (3-asaval bovitheto, nem eliras). Ezzel be tudok szallni.
--
A strange game. The only winning move is not to play. How about a nice game of chess? - Wargames
- A hozzászóláshoz be kell jelentkezni
Priority Queue-val jóval jobb, mint n^2. Pár éve írtam ilyet egy courseras tanfolyamon, még megvan a kód, én kipróbálnám ezen a 8200 csúcsú gráfon, bár nem az R-ben van, hanem C++-ban.
- A hozzászóláshoz be kell jelentkezni
Generáltam egy 8000 csúcsú gráfot, 1%-os sűrűséggel (azaz 1% esélye van, hogy 2 csúcs közt van út), a Dijkstra 1-2 sec alatt végez bármely 2 pont közt.
- A hozzászóláshoz be kell jelentkezni
mivel se súlyokról, se legrövidebb utakól nem volt szó, így a dijkstra overkill lenne. egy szélességi vagy egy mélységi bejárással lineáris komplexitással meg lehet oldani a feladat még a kezemben lévő telefonon is 0.0001 s alatt.
- A hozzászóláshoz be kell jelentkezni
Az R mi mást használ?
- A hozzászóláshoz be kell jelentkezni
az R nem tudom mit használ, de az igraph:
http://igraph.org/r/doc/distances.html
Dijkstra-t is használhat, de attól függ.
- A hozzászóláshoz be kell jelentkezni
Köszi a felajánlást!
- A hozzászóláshoz be kell jelentkezni
tényleg nyolcezerkétszáz csúccsal és tizenkétezer éllel rendelkezik az említett gráf? mert ha igen akkor nem nagyon értem a kérdést... továbbá útvonal alatt mit értesz?
- A hozzászóláshoz be kell jelentkezni
Élek sorozatát. Path-t.
- A hozzászóláshoz be kell jelentkezni
Milyen algoritmust használsz?
Szinte kizárt, hogy egy ekkora probléma optimális megoldásához tényleg napok kellenek, valószínűleg lehetne még alakítani a modellen, hogy gyorsabb legyen a megoldás, esetleg más eszközt is meg lehetne fontolni (valamelyik modellező nyelvre és egy profi solver-re gondolok elsősorban).
- A hozzászóláshoz be kell jelentkezni
Valami progress status van hozzá? Az itthoni desktopom dual 2660v3, megprobalhatok segíteni.
----------------------
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni
Mit számolsz pontosan? Ez a gráf nem is nagy méretű.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Ez a gráf:
http://porgeto.hu/0/graph.txt
R-ben egy install.packages("igraph") után ezt kérem:
all_simple_paths(g1, 37, 38019);
(Nekem elég lenne egyetlen simple paths is, csak olyan parancs nincs az R-ben.)
Pár óra számolás után elfogyott a memória (4GB).
- A hozzászóláshoz be kell jelentkezni
> shortest_paths(g1,37,38019)
$vpath
$vpath[[1]]
+ 12/38035 vertices:
[1] 37 20261 127 17251 12386 3397 5814 5793 3491 4262 1023 38019
Az osszes ut megtalalasa asszem NP nehez.
----------------------
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni
Az osszes _legrovidebb_ ut viszont (ami ugye itt es altalaban a gyakorlatban kell) n^3 alatt megtalalhato. Kapasbol a Dijkstra egy pontbol az osszes tobbibe megmondja n^2 alatt, akkor ha ezt butan n csucsra lefuttatom, hogy lenne exponencialis?
--
A strange game. The only winning move is not to play. How about a nice game of chess? - Wargames
- A hozzászóláshoz be kell jelentkezni
hossz!=tényleges konstrukció
- A hozzászóláshoz be kell jelentkezni
Legyenek a csúcsok egy n-oldalú négyzet (egész)rácspontjai, az élek csak a szomszédosak között: "jobbra" ha vízszintes, "fel", ha függőleges (tetszés szerint adhatunk hozzá balra és le linkeket). Ekkor a gráfban a bal alsó és jobb felső pont között a legrövidebb út 2n hosszú és 2n alatt az n különböző ilyen van (n db J betű és n db F betű összes sorrendje), ami elég sok - Stirling nélkül is látható, hogy legalább 2^n.
- A hozzászóláshoz be kell jelentkezni
bájdövély, miért van ez a UNIX haladóban?
- A hozzászóláshoz be kell jelentkezni
Ezt találtam a legjobb célközönségnek, ahol erős linuxos/unixos hardver testközelben lehet. Végül is nem az algoritmus a kérdéses, mert az megvolt. De való igaz, hogy nem telitalálatos "unix haladó" a kérdéskör. Mégsem akartam offtopicba tenni.
- A hozzászóláshoz be kell jelentkezni
Igen, ha vissza kell adnod az osszes utat, az sok ido (es sok tarhely, szoval nem csak idoben, tarban is exponencialis).
A legtobb ilyen feladat valamilyen optimalizalasrol szol, ahol altalaban egyetlen, valamilyen szempontbol optimalis (minimalis koltsegu) ut a kerdes. Ezt a korabban emlitett algoritmusok megadjak, es amikor a minimalis hosszt kiszamitod, nyilvan tudsz tartani egy ilyen minimalis utat is, szoval azt is megadja.
De kozben rajottem, hogy mi a felreertes oka: en az osszes pontpar kozti optimalis utra irtam az n^3-ot (mert a Dijkstra az egyik csucsbol az osszesbe vezeto optimalis utat megadja n^2 alatt). Ket adott csucs kozt futo osszes minimalis hosszu ut leirasa persze exponencialis lesz. Ket csucs kozt futo osszes ut (esetleg osszes seta) meg ennel is durvabb, teljes grafban n! a permutaciok miatt.
--
A strange game. The only winning move is not to play. How about a nice game of chess? - Wargames
- A hozzászóláshoz be kell jelentkezni
Örök hála! :)
- A hozzászóláshoz be kell jelentkezni
dabl
----------------------
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni
+1
--
Csaba
- A hozzászóláshoz be kell jelentkezni
[Feliratkozás]
- A hozzászóláshoz be kell jelentkezni