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

Matavimo aplinka ir vienintelė riba

Trys failai: matavimo aplinka, testai ir dvi naujos komandos.

komanda ką daro
algo route vienas maršrutas: BFS prieš Dijkstrą, ir dvi eilės
algo frontier tas pats visomis kryptimis — kad santykis būtų teiginys, ne anekdotas

Testai

testas ką reikalauja
TestBothFrontiersReturnTheSameCost abi eilės grąžina identišką kainą kiekvienai krypčiai; kelias sudedamas ir sutampa
TestFewestHopsIsNotCheapest BFS kelias niekada ne pigesnis ir kartais brangesnis
TestTheHeapHoldsStaleEntries krūvoje daugiau įrašų nei apdorotų mazgų
TestDijkstraIsWrongOnNegativeWeights su neigiama briauna atsakymas neteisingas

Pirmasis yra svarbiausias, ir ne dėl to, ką tikrina, o dėl to, ką jis leidžia tvirtinti. Penktame žingsnyje lyginsi dvi eiles — palyginimas turi prasmę tik tada, jei jos atsako tą patį. Todėl tai tikrinama pirma.

Trečiasis saugo antro žingsnio sprendimą:

629 pushes settled 562 nodes: 67 stale entries skipped (1.12 pushes per node)

1.12 įdėjimo mazgui. Jei kada nors gausi lygiai 1.00, būsi realizavęs raktų mažinimą — kitą struktūrą su kita kaina, ir testas apie tai pasakys.

Ketvirtasis testas — vienintelė riba, kurią Dijkstra turi

Antrame žingsnyje įrodymas rėmėsi prielaida: jokia briauna nėra neigiama. Štai kas būna be jos.

   0 ──1── 2               tiesioginis kelias, kaina 1
   0 ──2── 1 ──(−5)── 2    aplinkkelis, kaina 2 + (−5) = −3
Dijkstra answered 1; the true cheapest route costs -3

Mazgas 2 pasiekiamas už 1 ir apdorojamas anksčiau, nei mazgas 1 apskritai ištraukiamas — tad pigesnis aplinkkelis niekada nesvarstomas.

Nėra nei klaidos pranešimo, nei ciklo, nei lėtumo. Tiesiog neteisingas atsakymas, pateiktas su tokiu pat pasitikėjimu kaip teisingas. Vienuoliktoje pamokoje išsigimęs medis buvo lėtas ir teisingas; čia atvirkščiai.

Testas reikalauja, kad taip ir liktų — kad niekas „nepataisytų" Dijkstros apsimesdamas, jog ji dirba su neigiamomis kainomis. Tam yra kiti algoritmai (Bellman–Ford), ir jie kainuoja daugiau.