Konveksna ogrinjača - Jarvisov obhod

Konveksna ogrinjača - Jarvisov obhod

Avtor: M. Lokar, prenos v NAUK Alja Gligić, Saša Udir

PROBLEM

Za dano množico točk poišči KONVEKSNO OGRINJAČO s pomočjo JARVISOVEGA OBHODA.

KONVEKSNA OGRINJAČA

KONVEKSNA MNOŽICA


 
Konveksna množica je množica točk, za katero velja, da pri poljubni izbiri točk A in B iz te množice, daljica AB v celoti leži v tej množici.



KONVEKSNA OGRINJAČA


 
Konveksna ogrinjača množice točk D je najmanjša konveksna množica, ki vsebuje množico D.
 
Konveksna ogrinjača množice D je presek vseh konveksnih množic, ki vsebujejo D, oziroma množica vseh konveksnih kombinacij točk iz D.


KONVEKSNA OGRINJAČA - PRIMER ZA LAŽJE RAZUMEVANJE

Imamo npr. spodnjo množico točk:

(tockeP1.png)

Predstavljamo si, da okoli točk napnemo elastiko (moder kvadrat):

(raztegElastikeP1.png)

Spustimo elastiko:

(ovojnicaP1.png)
  • Z modro je označena KONVEKSNA OGRINJAČA naše množice.

KONVEKSNA OGRINJAČA - PRIMERI

(KonveksnaOgrinjacaPrimeri.png)
6. primerov množic in njihovih konveksnih ogrinjač.

KONVEKSNA OGRINJAČA - ALGORITMI

Za iskanje konveksne ogrinjače obstaja več algoritmov:

  • Jarvisov obhod,
  • Grahamov pregled,
  • grobi pristop,
  • inkrementalna metoda,
  • algoritem tvorbe konveksne lupine s strategijo »deli in vladaj«
  • ...

Primerjava algoritmov:


(tabelaAlgoritmi.png)

Opomba
Konveksni ogrinjači drugače rečemo tudi konveksna ovojnica ali konveksna lupina.

KONVEKSNA OGRINJAČA - UPORABA V "PRAKSI"

Algoritmi za iskanje konveksne ogrinjače se uporabljajo v praksi v naslednjih primerih:

  • Računalniški vid - npr. za zajem območja gibanja,
  • GIS (zemljepisni informacijski sistem) - določanje območij (npr. določanje poplavnih območij),
  • iskanje vzorcev - prepoznavanje oblik,
  • iskanje največje razdalje med pari točk v podani množici točk - vedno bo največjo razdaljo tvoril nek par točk iz konveksne ogrinjače,
  • statistika,
  • ...

JARVISOV OBHOD - O ALGORITMU

  • Algoritem je dobil ime po matematiku R.A. Jarvis-u.
  • Prvič je bil objavljen leta 1973.
  • Idejo algoritma bi lahko najenostavne ponazorili s tem, da pri algoritmu posnemamo postopek zavijanja darila v dvodimenzionalnem prostoru.

    • Filmček spodaj prikazuje vrstni red določanja točk konveksne ogrinjače s pomočjo omenjenega algoritma. Lahko si predstavljamo, da želimo "zaviti" vse točke v eno darilo=).

ZANIMIVOST:

Implementacija v Python-u:


Prenos

ALGORITEM - JARVISOV OBHOD

Izberemo si začetno točko T0:

  • Za začetno točko vzamemo točko iz množice D, za katero zagotovo vemo, da je del konveksne ogrinjače.

    • Vemo, da je točka z najmanjšo koordinato y zagotovo del konveksne ogrinjače. Če je takih točk več (so seveda vse del konveksne ogrinjače), vzamemo za začetno točko npr. najbolj levo.
    • Slika
  • Naslednje točke, ki so del konveksne ogrinjače, iščemo v nasprotni smeri urinega kazalca.

Poiščemo naslednjo točko, ki je del konveksne ogrinjače

  • Skozi točko T0 naredimo vzporednico z x-osjo, premico poimenujemo p0.
  • Predstavljamo si, da iz točke T0 povlečemo premice skozi vse preostale točke.
  • Izberemo tisto točko (poimenujemo jo T1), katere premica (poimenujemo jo p1) oklepa najmanjši kot s premico p0.
  • Slika

    • Za lažjo predstavo: Izberemo tisto premico (posledično točko), da so vse točke na eni strani premice (bodisi nad premico, bodisi pod premico).

Poiščemo naslednjo točko konveksne ogrinjače (T2)

S pomočjo točke T1 poiščemo naslednjo točko, ki je del konveksne ogrinjače.

  • Izberemo tisto točko (T2), katere premica s premico p2 oklepa najmanjši kot.

    • Izpustimo računanje kotov za tiste točke, ki so že del konveksne ogrinjače. Ne izpustimo le začetne točke, ker se na koncu vrnemo v le-to.
    • Izračunati moramo vse kote in poiskati najmanjši kot.
  • Slika

Podobno poiščemo točko T3 in vse naslednje točke, ki so del konveksne ogrinjače.

Splošni korak:

  • Iščemo i-to točko (Ti) konveksne ogrinjače.

    • i je različen od 0 in 1.
  • Predstavljamo si, da skozi točko Ti-1 povlečemo premice skozi vse ostale točke, ki še niso del konveksne ogrinjače. Premico iz Ti-1 povlečemo tudi skozi točko T0.
  • Za naslednjo točko (Ti) konveksne ogrinjače vzamemo tisto točko, katere premica oklepa najmanjši kot s premico pi-1.

    • Če na izbrani premici leži več točk, izberemo tisto, ki je najbližja prejšnji točki konveksne ogrinjače (Ti-1).

Postopek ponavljamo toliko časa, dokler ne pridemo nazaj v točko T0.

Točka T0

(p1.png)

Točka T1

(p2.png)

Točka T2

(p3.png)

Zadnji korak / konec

(p4.png)

JARVISOV OBHOD - ČASOVNA ZAHTEVNOST

Časovna zahtevnost algoritma je O(nh).

  • n je moč množice (število vseh točk).
  • h je moč konveksne ogrinjače (število točk, ki sestavljajo konveksno ogrinjačo).

Razlaga:

Za vsako točko, ki je del konveksne ogrinjače porabimo:

  • O(1) za primerjanje izračunanih kotov,
  • O(n) za iskanje najmanjšega kota,
  • O(n) skupni čas.

Če je h število točk, ki sestavljajo konveksno ogrinjačo, potem je celotna časovna zahtevnost O(nh).

  • V najslabšem primeru so vse točke množice del konveksne ogrinjače. Takrat je časovna zahtevnost O(n2).

    • Npr., ko so vse točke množice razporejene na isti krožnici.
  • Algoritem je izredno hiter (O(n)), kadar je moč konveksne množice v primerjavi z močjo celotne množice zelo majhna.

JARVISOV OBHOD - 1. PRIMER

JARVISOV OBHOD - 2. PRIMER

JARVISOV OBHOD - "IZROJEN" PRIMER

Kaj narediti, ko tekom izvajanja algoritma naletimo na spodnji primer?

Na premici, ki s premico pi (v spodnjem primeru premico p2) oklepa najmanjši kot, leži več točk.

(pp1.png)

V našem primeru tako za naslednjo točko (točko T3) izberemo točko, ki leži na premici, ki s premico p2 oklepa najmanjši kot in je najbližnja točki T2.

(pp2.png)

Sedaj lahko postopek nadalaljujemo.

KVIZ - 1. VPRAŠANJE

Ali spodnja slika predstavlja konveksno množico?


(kviz1.PNG)


Ne
Da

Čestitke! Odgovor je pravilen!


Naprej

Odgovor ni pravilen!


Namig - definicija konveksne množice:
Konveksna množica je množica točk, za katero velja, da pri poljubni izbiri točk A in B iz te množice, daljica AB v celoti leži v tej množici.


Ponovno

KVIZ - 2. VPRAŠANJE

Katere točke sestavljajo konveskno ogrinjačo?


(kviz2.PNG)


A, B, G, F, C in E
B, G, F, E in A
A, B, H, G, F, E in A

Čestitke! Odgovor je pravilen!


Naprej

Odgovor ni pravilen!


Namig - oglej si enega od spodnjih primerov:


Ponovno

KVIZ - 3. VPRAŠANJE

Kakšne časovne zahtevnosti je algoritem Jarvisov obhod?

  • n -> moč celotne množice
  • h -> moč konveksne ogrinjače


O(n3)
O(h*log(n))
O(nh)

Čestitke! Odgovor je pravilen!


Naprej

Odgovor ni pravilen!


Namig - Oglej si prosojnico z razlago časovne zahtevnosti Jarvisovega obhoda (Klik).


Ponovno

VIRI

0%
0%