Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 14 / 15 Grafai: BFS ir DFS ~55 min
Kodas

Matavimo aplinka ir testai

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

komanda ką daro
algo net pastato tinklą, palygina BFS ir DFS visomis pasiekiamomis kryptimis
algo dense gretimumo sąrašas prieš matricą: atmintis ir peržiūros kaina

graphbench.go taip pat turi buildTrails — generatorių, kuris kuria skaitymo pėdsakus, ne atsitiktines poras. Tai svarbu: atsitiktinių porų grafas turėtų visai kitą formą ir šios pamokos su transit sulyginti nepavyktų.

Testai

testas ką reikalauja
TestBFSFindsTheShortestPath kiekvienai pasiekiamai viršūnei BFS kelias lygus tikram atstumui
TestDFSFindsAPathButNotTheShortest DFS kelias tikras, niekada ne trumpesnis, ir kartais ilgesnis
TestBothSearchesAgreeOnReachability visos trys sutaria, KAS pasiekiama
TestTheTwoDFSVersionsDisagreeOnPaths dvi DFS versijos randa skirtingus kelius
TestComponentsPartitionTheGraph komponentės padengia visas viršūnes
TestMatrixAgreesWithList abi reprezentacijos aprašo tą patį grafą

Pirmasis tikrina prieš nepriklausomai apskaičiuotus atstumus — atskira bfsDistances funkcija testų faile, ne prieš tavo pačios BFS rezultatą. Tikrinti algoritmą juo pačiu reiškia netikrinti nieko.

Antrasis ir ketvirtasis vėl reikalauja, kad kažko nebūtų — tai jau pažįstama forma iš 7–13 pamokų. Jei „pataisysi" DFS taip, kad grąžintų trumpiausius kelius, parašysi BFS su papildomais žingsniais, ir testas pasakys būtent tai:

DFS found the shortest path every time — that is BFS, not DFS