» »

Časovna zahtevnost Dijkstrovega algoritma

Časovna zahtevnost Dijkstrovega algoritma

neoto ::

Zanima me, v kolkem času ponavadi ta procedura opravi s 500.000 točkami, urejenimi v neusmerjeno mrežo brez dodatnih pogojev za izločanje?

Je velika razlika, če se uporabi še prioritetna vrsta?

Gundolf ::

Spiši program in poženi pa boš videl. Drugače je pa preveč odvisno od sistema na katerem ga poganjaš, kako dobro znaš spisati algoritem in mislim da tudi od grafa, ki ga preizkuješ. Drugače se pa zdajle sploh ne spomnim točno kako izgleda Dijkstra :D

neoto ::

Sej ravno to je. Program imam, algoritem se izvaja precej dolgo, zato me zanima malo primerjava z drugimi, da vidim, koliko je še možnosti za izboljšave...

OwcA ::

"Trotel ziher" je O(n^2) s prioritetnimi vrstami pa O(n log n).

Klik!
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Gundolf ::

Pol miljona točk je veliko. Možna optimizacija je z upoštevanjem strukture grafa. Saj praviš da imaš mrežo (verjetno 2D).

neoto ::

Hvala za pomoč. Pogruntu sem, kako za več kot 1000% izboljšat zahtevnost...

Vesoljc ::

zahtevnost? ;)
Abnormal behavior of abnormal brain makes me normal...

neoto ::

:D ups, mislil sem za več kot 1000% pohitrit vso zadevo... :D

Primoz ::

bi bil pripravljen delit to modrost še z ostalimi?
There can be no real freedom without the freedom to fail.

neoto ::

Ja no, fora je v tem, da sem proceduro najprej temeljil na enem izmed primerov, ki sem jih našel na internetu. Pri tem načinu sem pri iskanju točke z najmanjšo oddaljenostjo uporabljal dvojno for zanko, ki se je pri 500.000 točkah izvajala obupno počasi. Zdaj sem pa to celotno proceduro prilagodil tako, da uporablja prioritetno vrsto in sem s tem odpikal iskanje po vseh točkah.
In da povzamem, glede na to, da se v VB-ju for zanke izvajajo izjemno počasi, sem lahko z odpravitvijo teh zank celotno zadevo zelo opazno pohitril...

OwcA ::

Hočeš reči, da se stvar izvaja za en velikostni red manj časa?
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

neoto ::

Prej dva ali pa tri. Prej sem pustil računalnik pol ure, pa še ni dokončal vseh točk, zdaj pa čez vse točke pride v 2-3 minutah (program je napisan v VB-ju, ki je precej počasen!)

Sergio ::

OwcA: da, za en velikostni red :)

neoto: to je en velikostni red. Iz n^2 si prisel na nlogn
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

neoto ::

ok, pol pa za en velikostni red :8)

darkolord ::

Če si v VBju pisal, se da stvar sigurno še pohitrit :D (vedno se da še mal :D)

neoto ::

Bi rekel da za najmanj 20-40%, če bi to napisal v javi ali pa do 50% če bi pisal v c++.
Če bi imel cilj zadevo naredit še hitrejšo, vem kaj moram narediti... :D

darkolord ::

Tvojo obstoječo kodo v VBju se da zihr še precej pohitrit... :D

Thomas ::

Man muss immer generalisieren - Carl Jacobi

neoto ::

Se strinjam da bi se dalo vse skupaj pohitrit (sploh če izklopim izrisovanje stanja, pa računanje hitrosti,...).
Thomas, glede one alternative: je to sploh open source algoritem?? Namreč jaz dvomim da je, pa malo čudna se mi zdi njihova stran. Če že ponujanjo nekaj tako hitrejšega, si bi pa le lahko malo privoščili za imidž...

Zgodovina sprememb…

  • spremenil: neoto ()

Thomas ::

Tudi po moje nakladajo. Nisem pa 100%.
Man muss immer generalisieren - Carl Jacobi

darkolord ::

Glede tistga, da se da v VBju pohitrit sm mislu tudi bolj na splošno... namreč obstaja ene par ljudi, ki obsesivno optimizirajo VB kodo in so prisli do kar lepih rezultatov >:D ;) :D

OwcA ::

darko: ti ljudje se lahko na glavo postavijo, pa bo stvar, pri isti časovni zahtevnosti, še vedno prav tragično propadla, če zvečamo vhodne podatke za velikosten razred. Žal.
Otroška radovednost - gonilo napredka.

darkolord ::

To je res. Ampak a ni tko povsod? 8-)

Thomas ::

C++, basic, assembler ... vse to je ista figa. Dobiš samo nek konstantni faktor izboljšanja z uporabo enega ali drugega ali tretjega progranskega jezika oziroma kompajlerja.




Pri algoritmih pa skušamo dobiti nekaj več, kot je samo linearno izboljšanje. Včasih gre, drugič ne.
Man muss immer generalisieren - Carl Jacobi

CCfly ::

Dva tedna optimiziraš kodo, namesto da bi razmišljal, kako zmanjšati število točk v drevesu.

edit: se oproščam vozlišč.
"My goodness, we forgot generics!" -- Danny Kalev

Zgodovina sprememb…

  • spremenilo: CCfly ()

64202 ::

> Pri algoritmih pa skušamo dobiti nekaj več, kot je samo linearno izboljšanje. Včasih gre, drugič ne.

Se ne bi branil, ce mi kdo za x-krat pohitri g++ :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

HDD - neizbežne napake pri branju (URE)

Oddelek: Strojna oprema
283966 (3321) MrStein
»

IBM odkril nov način uporabe ogljikovih nanocevk v tranzistorjih

Oddelek: Novice / Znanost in tehnologija
95661 (3120) zavajon
»

[Algoritem] Kako do najkrajše poti na med točkami

Oddelek: Programiranje
213037 (2625) Spura
»

[VB.NET] Izpisovanje v TextBox in prekinitve

Oddelek: Programiranje
121183 (876) darkolord
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757422 (5242) Senitel

Več podobnih tem