Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 10 / 15 Maišos lentelės ~50 min
Kodas

hash.go — karkasas

Sukurk hash.go. Kaip ir nuo septintos pamokos, gauni karkasą: paketą, importus, tipus, parašus ir sutartis komentaruose. Kūnai — tavo.

Ką verta pasižymėti prieš rašant:

  • Put su jau esamu raktu privalo PAKEISTI įrašą, ne pridėti antrą. Testas tai tikrina; šeštas žingsnis paaiškina, kodėl tai svarbu.
  • Kiekvienas raktų palyginimas eina per c.Hit(). Tas skaičius ir yra praeitos grandinėlės ilgis — vienintelis dydis, kuriuo remiasi visas „vidutinis O(1)".
  • Plėsk PRIEŠ įterpdamas, kai apkrova pasiekė 1.0. Jei plėsi po įterpimo, koeficientas trumpam viršys ribą — testas tai pastebės.
  • grow iš naujo skaičiuoja hashKey % naujas dydis. Senas kibiro numeris po padvigubinimo nebegalioja; perkelti grandinėlę kaip visumą nevalia.
  • NoGrow yra tik demonstracijai (-nogrow): jis leidžia pamatyti, kas būna be plėtimosi.

ChainStats vidurkį skaičiuoja tik per netuščius kibirus. Su tuščiais vidurkis būtų tiesiog apkrovos koeficientas ir nieko naujo nepasakytų; be jų jis rodo, kokio ilgio grandinėlę realiai pereini, kai kibiras iš viso ką nors turi.