Primeri uporabe slovarja

Vaja

Primer 4

To nalogo bi se dalo seveda zelo enostavno rešiti tako, da bi funkcija v zanki obhodila vseh n hiš in za vsako preverila, če je od točke (x, y) oddaljena manj kot r. Takšno rešitev lahko za vajo napišeš sam(-a), mi pa si bomo tu raje ogledali, kako jo izboljšati. Poiščimo največjo in najmanjšo x- in y-koordinato po vseh hišah v naših vhodnih podatkih; tako dobimo nekakšno pravokotno območje, ki ga razdelimo na kvadratne celice velikosti r × r. Celice po vrsti oštevilčimo, kot kaže slika v nadaljevanju. Podrobnosti tega, kako za poljubno točko izračunati številko celice, v kateri ta točka leži, lahko za vajo razmisliš sam(-a).


Pripravimo si zdaj slovar, v katerem bo za vsako neprazno celico (tako, ki vsebuje hišo) po en zapis: ključ naj bo številka celice, pripadajoča vrednost pa naj bo seznam hiš v tej celici. Ko izvemo koordinate meteorita, moramo le pogledati, v kateri celici ležijo; ker so celice velike r × r, meteorit pa poruši le hiše, ki so od njega oddaljene največ r, to pomeni, da pridejo v poštev za rušenje le hiše, ki so v isti celici kot meteorit ali pa v njenih neposrednih sosedah. To je torej največ 9 celic; za vsako od njih pogledamo v slovar, da dobimo seznam hiš v njej, in za vsako od teh hiš preverimo, ali bi jo meteorit porušil ali ne. Tako nam ni več treba pri vsakem klicu funkcije Meteorit pregledati vseh n hiš, ampak le majhen delež hiš (tiste, ki jih zajema devet celic).

xMin xMax
yMax
yMin
Razdalja: Število hiš: