Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 15 / 15 Svoriniai grafai ~60 min
Teorija

Kai briaunos nustoja būti vienodos

Keturiolikta pamoka baigėsi taip:

BFS atsako „per kiek perėjimų", nes kiekvienas perėjimas kainuoja tiek pat. Laiko išplėstiniame grafe jie kainuoja skirtingai — ir BFS tai ignoruoja.

Dabar tavo bibliotekos tinklo briaunos irgi turi kainą: dienas tarp skolinimų. Skaitytojas vieną knygą pasiėmė po trijų dienų, kitą — po penkių savaičių.

Klausimas pasikeitė. Ne „per kiek knygų", o „per kiek dienų".

$ algo route
nodes 1000, edges 742, weights = days between borrows (1..60)
route from 0 to 194

                                 hops       days
  BFS (fewest hops)                12        402
  Dijkstra (fewest days)           12        191

  the cheapest route takes 0 more hops and saves 211 days

Tas pats perėjimų skaičius. Dvigubai skirtingas atsakymas.

Abu keliai turi po 12 briaunų, tad BFS jų neatskirtų — jai jie vienodi. Bet vienas trunka 402 dienas, o kitas 191.

Ir tai ne kraštinis atvejis. Iš 561 pasiekiamos knygos BFS pasirinktas kelias skiriasi nuo pigiausio 197 kartus (35.1 %).

Ko tam reikia

Dijkstros algoritmas kiekviename žingsnyje klausia: kuris dar neapdorotas mazgas yra pigiausias?

Šis klausimas tau pažįstamas. Tryliktoje pamokoje pastatei struktūrą, kuri atsako į jį per O(log n) ir kurios minimumas yra a[0].

Nauja struktūra šioje pamokoje nestatoma. Statoma paieška, kuriai ta struktūra buvo skirta nuo pat pradžių.

Spėk prieš skaitydamas toliau

Krūvą galima ir nenaudoti. Vietoj jos kiekviename žingsnyje galima peržiūrėti visus mazgus ir pasiimti mažiausią — O(V) vietoj O(log V). Atsakymas bus tas pats; skirsis tik greitis.

Pirmoje pamokoje pasirinktas prietaisas buvo operacijų skaitiklis, ne laikrodis — nes skaitiklis nepriklauso nuo mašinos.

Kiek kartų daugiau darbo atliks tiesinė versija? Ir kiek kartų ilgiau truks? Ar tie du skaičiai sutaps?

Užsirašyk abu. Penktame žingsnyje pamatuosi, ir jie nesutaps — o kodėl, yra šeštas kartas, kai šiame kurse tai atsitinka.