|
V dani množici točk v ravnini iščemo par najbližjih točk.
Sestava problema:
- M je množica točk v ravnini = ,
- Točka ima določene koordinate in
- Razdalja med točkama dobimo z
Iščemo taka in , da bo razdalja najmanjša
Iskanje najbližjega para točk
|
V dani množici točk v ravnini iščemo par najbližjih točk.
Sestava problema:
Enostavni algoritem
Enostavni algoritem je neposredni pristop za izračun najkrajše razdalje med točkama. Izračunamo razdaljo za vsak par točk in nato poiščemo najmanjšo.
Psevdokoda enostavnega algoritma:
Vhodni podatek: Množica točk
Izhodni Podatek: Najmanjša razdalja med točkama v
Analiza algoritma
Osnovni operaciji pri enostavnem algoritmu sta izračun med dvema točkama in primerjava razdalij.
V primeru, ko imamo točk, se izvede izračunov razdalj in za eno manj primerjav razdalj.
Časovna zahtevnost takšnega algoritma je
Kako rešiti hitreje?
Z uporabo zahtevnejšega algoritma, kot na primer Deli in Vladaj, lahko rešimo problem hitreje in časovna zahtevnost zmanjšamo na .
Problem Deli in Vladaj
Problem najprej razdelimo na tri faze:
Faza DELI:
Faza VLADAJ:
Faza ZDRUŽITEV:
Določiti moramo zaustavitveni pogoj za rekurzivni algoritem
Problem delimo na podprobleme in te probleme še na manjše podprobleme, dokler ni problem majhen. Zaustavitveni pogoji zaustavijo delitev, če imamo 2 ali 3 točke.
Faze Deli in Vladaj
|
V primeru če je točk v množici M več kot 3.
Množico točk v ravnini razdelimo na dve podmnožici (označeni z in ) z navpično mejo .
= => sredina med -koordinatami srednjih dveh točk.
V obeh delih in rekurzivno iščemo najkrajšo razdaljo oz. najbližji par točk.
Rešitev levi del množice nam poda najmanjšo dolžino in enako naredi za množico , pri kateri dobimo .
Prikaz delitve
Kako razdelimo množico točk na podmnožice? Najprej uredimo množico točk, tako da jih uredimo po -koordinati.
Nato izračunamo .
Spomnimo se enačbe, ki smo jo prej omenili = .
Primer:
Imamo množico 6 točk. Črto potegnemo ravno na sredi med točkama in . Na vsaki polovici ležita natanko 3 točke.
Če imamo množico 7 točk, črta tudi potegnemo na sredi med točkama in . Razlika je število točk na levi in desni polovici množice. V tem primeru na levi polovici ležita 3 točke, na desni pa 4 točke. Razpoloviščih njinuh koordinat je = .
Faza Združitve
|
Izračunamo najmanjšo razdajo med in .
Pogledati je treba če obstaja kakšna manjša razdalja med točkama iz in (ena točka leži v , ena pa leži v ) kot dobljena razdalja.
Dobljeno razdaljo odmerimo od ločilne črte v levi in desni pas. V čezmejnem pasu poiščemo najkrajšo razdaljo in jo primerjamo z razdaljo . Točke razvrstimo po -koordinatah in nato po -koordinatah. Zato uporabimo metodo urejanje.
|
Pogledamo kako lahko omejimo na -smeri:
Ni potrebno preveriti vseh točk, le tiste, ki ležijo v pasu P. Oddaljene razdaljo za levo od in desno , od ločilne črte .
Pogledamo še kako lahko omejimo po -smeri:
Spet ni potrebno pogledati vseh parov točk. Pogledamo le tisto na množici točk, ki leži na drugi strani meje. Katera je oddaljena za manj kot razdalja .
Točke v sredinskem pasu 1.del
|
Pogledali smo vse razdalje točk leve podmnožice in desne podmnožice. Pregledamo še ostale možne razdalje. Ostale možne razdalje so razdalje, ki imajo eno točko v levem pasu, drugo pa v desnem pasu. Smiselno je pogledat le točke, ki so možni kandidati. S pomočjo trenutne razdalje in mejne črte, ne potrebujemo pregledati vse razdalje od vseh točk do ostalih točk. Pas P nam omogoča hitrejše reševanje.
Točke morejo biti na vsaki strani med seboj oddaljene za razdaljo . V tem levem ali desnem pasu ležijo točke, ki so od mejne črte oddaljene za najmanj . V tem pasu pregledamo še ostale možne razdalje.
Razporedimo točke v pasu P po - smeri kot na sliki. Izberemo na primer točko C ( najbolj skrajna točka) in preverimo, ali je kakšna točka oddaljena za manj kot .
Točke v sredinskem pasu 2.del
Po pregledu okolice točke C za razdaljo , izključimo možnosti točk izven tega območja. V našem primeru ostane le točka D primerna. Z omejitvijo sredinskega pasu po -smeri smo dobili območje pravokotnika in višine .
|
Ugotoviti moremo le, koliko točk bi lahko ležalo na takem omejenem območju. S tem seznamom točk urejenih po -smeri lahko ugotovimo, ali je kakšna točka, ki bi zasedla mesto pred točko D.
Na vsaki strani meje lahko postavimo v kvadrat največ štiri točke, ki so najmanj oddaljena za razdaljo . Razdalja med oglišči je , točke zato lahko ležijo le v ogliščih kvadrata. Drugih točk ne moremo postaviti v to območje pri zahtevi, da morajo biti točke oddaljene med seboj za vsaj .
Če bi imeli točke po y koordinati urejene C,A,E,B,F,D (razporeditev točk na sliki spodaj), katere imamo po tri točke isto koordinato . Pregledamo razdalje glede na točko C, točka D je peta oddaljena točka. Vse nadaljnje točke so sigurno oddaljena za več kot razdalja .
|
Točke v sredinskem pasu uredimo po -koordinati.Za vsako točko preverimo razdaljo za le pet nadaljnjih točk v seznamu. S tem zagotovimo pregled vseh morebitnih kandidatov za najbližji par točk. Namesto, da pregledujemo vse pare točk iz obeh polovic sredinskega pasu, pogledamo le razdaljo najbližjih pet v seznamu, urejenemu po -koordinati.
Analiza algoritma deli in vladaj
Zapis iskanja najbližjega para točk smo poenostavili na iskanje razdalje med najbližjima točkama. V samem algoritmu pa moramo poskrbeti, da se zabeležita in vrneta točki pripadajoči najmanjši razdalji.
Pred rekurzivno metodo uredimo točke po -koordinatah. Časovna zahtevnost je .
Ker za vsak podproblem iščemo rešitev rekurzivno in s tem je delitev približno polovica, bo skupno število rekurzivnih stopenj .
Časovna zahtevnost podfaze urejanja je , na vsaki fazi rekurzije algoritma se faza združevanja ponovi za . Celotni algoritem ima časovno zahtevnost = , kar je boljše od .
Algoritem lahko še izboljšamo, s pomočjo algoritma urejanje z zlivanjem. Z uporabo tega algoritma bi bil naš algoritem učinkovitejši. Pri zaustavitveni fazi, ko lahko problem rešimo neposredno, poskrbimo za ureditev točk po -koordinatah in tako dobimo urejen seznam. Pri višjih stopnjah rekurzije bo potrebno pri sestavljanju rešitve le združiti dva urejena seznama.
Vsaka faza združevanja vrne poleg najkrajše razdalje in para najbližjih točk še točke urejene po -koordinatah. Združevanje dveh urejenih množic zahteva le linearni čas .
Fazo združevanja dominirajo tri podfaze s časovno zahtevnostjo . Vseh rekurzivnih nivojev je , časovna zahtevnost algoritma je .
Psevdokoda algoritma Deli in Vladaj
Vhodni podatki: Množica točk
Izhodni podatki: Razdalja najbližjega para točk
Vhodni podatki: Množica točk v ravnini , urejene po -koordinatah
Izhodni podatki: Razdalja med najbližjima točkama v množici in seznam točk, urejene po -koordinatah.
Ponovimo postopek algoritma
Kateri algoritem je učinkovitejši?
Žal ne drži! poskusi ponovno!
Zapri
Katera slika prikazuje napačen pas?
Žal ne drži! poskusi ponovno!
Zapri
Kakšen je potek algoritma deli in vladaj?
Žal ne drži! poskusi ponovno!
Zapri
Točke v sredinskem pasu urejene po -koordinati.Za koliko nadaljnih točk v seznamu preverimo razdaljo za vsako točko?
Žal ne drži! poskusi ponovno!
Zapri
Viri in literatura