Geometriai algoritmusok. pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése

Hasonló dokumentumok
Geometriai algoritmusok

Algoritmizálás, adatmodellezés 10. előadás

Koordináta-geometria feladatok (emelt szint)

Geometriai algoritmusok

GEOMETRIA 1, alapszint

A félév során előkerülő témakörök

Függvények Megoldások

Algoritmusok és adatszerkezetek II.

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

17. előadás: Vektorok a térben

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

b) Ábrázolja ugyanabban a koordinátarendszerben a g függvényt! (2 pont) c) Oldja meg az ( x ) 2

Adatszerkezetek I. 10. előadás

Algoritmusok és adatszerkezetek II.

Amortizációs költségelemzés

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Függvények

Országos Középiskolai Tanulmányi Verseny 2011/2012 Matematika I. kategória (SZAKKÖZÉPISKOLA) 2. forduló - megoldások. 1 pont Ekkor

Geometriai algoritmusok

Az értékelés a következők szerint történik: 0-4 elégtelen 5-6 elégséges 7 közepes 8 jó 9-10 jeles. A szóbeli vizsga várható időpontja

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Országos Középiskolai Tanulmányi Verseny 2009/2010 Matematika I. kategória (SZAKKÖZÉPISKOLA) 2. forduló feladatainak megoldása

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

Számláló rendezés. Példa

10. előadás. Konvex halmazok

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Érettségi feladatok Koordinátageometria_rendszerezve / 5

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉP SZINT Függvények

32. A Knuth-Morris-Pratt algoritmus

9. Geometriai algoritmusok

NULLADIK MATEMATIKA ZÁRTHELYI

Geometria. a. Alapfogalmak: pont, egyenes, vonal, sík, tér (Az alapfogalamakat nem definiáljuk)

2. ELŐADÁS. Transzformációk Egyszerű alakzatok

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉP SZINT Függvények

Érettségi feladatok: Koordináta-geometria 1/5

Cohen-Sutherland vágóalgoritmus

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

INFORMATIKA javítókulcs 2016

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Koordinátageometria. , azaz ( ) a B halmazt pontosan azok a pontok alkotják, amelynek koordinátáira:

Arany Dániel Matematikai Tanulóverseny 2010/2011-es tanév 1. forduló haladók III. kategória

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

Középpontos hasonlóság szerkesztések

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Függvények

A valós számok halmaza

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Megoldás: Mindkét állítás hamis! Indoklás: a) Azonos alapú hatványokat úgy szorzunk, hogy a kitevőket összeadjuk. Tehát: a 3 * a 4 = a 3+4 = a 7

Síkgeometria 12. évfolyam. Szögek, szögpárok és fajtáik

MATEMATIKA ÉRETTSÉGI május 8. EMELT SZINT

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Analitikus térgeometria

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Halmazelméleti alapfogalmak

Geometria 1 összefoglalás o konvex szögek

Követelmény az 5. évfolyamon félévkor matematikából

Oktatási Hivatal. 1 pont. A feltételek alapján felírhatók az. összevonás után az. 1 pont

Koordináta-geometria feladatok (középszint)

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Geometria III.

Lehet hogy igaz, de nem biztos. Biztosan igaz. Lehetetlen. A paralelogrammának van szimmetria-középpontja. b) A trapéznak két szimmetriatengelye van.

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

Turing-gép május 31. Turing-gép 1. 1

Egybevágósági transzformációk

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

EGY ABLAK - GEOMETRIAI PROBLÉMA

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Geometriai algoritmusok

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

3. tétel Térelemek távolsága és szöge. Nevezetes ponthalmazok a síkon és a térben.

Matematika 11 Koordináta geometria. matematika és fizika szakos középiskolai tanár. > o < szeptember 27.

Számjegyes vagy radix rendezés

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Mintaillesztő algoritmusok. Ölvedi Tibor OLTQAAI.ELTE

Követelmény a 6. évfolyamon félévkor matematikából

Koordináta geometria III.

Tuesday, March 6, 12. Hasító táblázatok

Síkbeli egyenesek. 2. Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

Diszkrét matematika 2.

10. Koordinátageometria

KOVÁCS BÉLA, MATEMATIKA I.

Minimum követelmények matematika tantárgyból 11. évfolyamon

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Az Országos Középiskolai Tanulmányi Verseny tanévi első fordulójának feladatmegoldásai

Hajder Levente 2017/2018. II. félév

NULLADIK MATEMATIKA ZÁRTHELYI

GEOMETRIAI FELADATOK 1. (ESETTANULMÁNY)

Fraktálok. Klasszikus fraktálpéldák I. Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék

8. előadás. Kúpszeletek

Bevezetés a matematikába (2009. ősz) 1. röpdolgozat

Geometria 1 normál szint

Feladatok Házi feladat. Keszeg Attila

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Algoritmuselmélet 2. előadás

Átírás:

Geometriai algoritmusok pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Pont class pont { double x,y ; pont(double ix,iy) { x=ix ; y=iy ; } } pont p=new pont(5.2,7.47) ; pontok konvex kombinációja pont, ha azaz p 2 p 1 p 3

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Szakasz p 2 p i p 1 Két különböző p 1 és p 2 pont esetén p 1 p 2 szakasz p 1 és p 2 konvex kombinációinak halmaza. p 1 és p 2 pontokat a p 1 p 2 szakasz végpontjainak nevezzük. Néha p 1 p 2 sorrendje is számít, ilyenkor p 1 p 2. irányított szakaszról beszélünk. class szakasz { pont p1,p2 ; szakasz(pont ip1,ip2) { p1=ip1; p2=ip2 ; } } szaksz s=new szakasz(p15,p26) ; p 1 p 2 p 1 p 2

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Forgásirány 1. Adott két irányított szakasz: p 0 p 1 és p 0 p 2. A közös p 0 végpont körül p 0 p 1 -hez viszonyítva p 0 p 2 jobbra ( ), vagy balra fordul? p 1 p 2 p 0 2. Adott p 0 p 1 és p 1 p 2 szakasz. Ha folyamatosan bejárjuk p 0 p 1 -et majd p 1 p 2 -t, balra fordulunk-e a p 1 pontban? p 2 p 1 p 0

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése 1. Forgásirány Ha p 1 p 2 pozitív, p 1 jobbra fordul p 2 -höz képest. y y p 1 p 2 p 1 p 2 p 0 O p 0 =O x x

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése 2. Forgásirány y p 1 p 2 p 0 O x f>0 balra fordul f<0 jobbra fordul f=0 egy egyenesbe esik (nem fordul)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Forgásirány y s1.p2=s2.p1 y s1 s2 s2.p2 p 1 s1.p1 p 2 p 0 O y x x s1 s2.p2 s2 s1.p1=s2.p1 forgasirany(pont p0,p1,p2) { f=(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) ; if (f>0) return 1 ; if (f<0) retun -1; retun 0; } x

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Forgásirány példa: y x y p 1 =(9,14) x y p 2 =(20,10) p 0 =(3,5) x y x forgasirany(pont p0,p1,p2) { f=(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) ; 9 3 10 5 20 3 14 5 6 5 30 17 9 153-123 if (f>0) return 1 ; // balra fordul if (f<0) retun -1; // jobbra fordul retun 0; }

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Adott pontok egy {p 1,...,p n } halmaza. p 1 p 2 p 4 p 15 p 16 p 3 p 2 p 14 p 7 p 8 p 5 p 13 p 9 p 10 p 12 p 11

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése {p 1,...,p n } ponthalmaz polárszög szerinti rendezése 1. Válasszuk ki a legkisebb x koordinátájú pontot, ha több ilyen van, akkor válasszuk ezek közül a legkisebb y koordinátájút és jelüljük q-val. p 1 p 2 p 4 p 15 p 16 p 3 p 2 p 14 p 7 p 8 p 5 p 13 p 9 p 10 p 12 p 11

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése {p 1,...,p n } ponthalmaz polárszög szerinti rendezése 1. Válasszuk ki a legkisebb x koordinátájú pontot, ha több ilyen van, akkor válasszuk ezek közül a legkisebb y koordinátájút és jelüljük q-val. 2. Húzzunk félegyeneseket a q-ból minden ponthoz. Rendezzük az egyeneseket a q ponton áthaladó, x-tengellyel párhuzamos egyenessel bezárt (előjeles) szög alapján. φ(q,p) 3. Rendezzük a pontokat úgy, hogy q legyen az első és p előbb legyen mint r ha: φ(q,p)<φ(q,r) vagy φ(q,p)=φ(q,r) és p közelebb van q-hoz mint r. p 1 q p 7 φ p 3 p 8 p 9 p 13 p 2 p 2 p 10 p 5 p 4 p11 p 16 p 12 p 15 p 14 p<r forgasirany(q,p,r)==1 O(nlogn)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Pontok összekötése zárt nem metsző poligonná Adott {p 1,...,p n } ponthalmaz. Kössük össze p 1,...,p n pontokat zárt, nem metsző poligonná! p 1 p 2 p 4 p 15 p 16 p 3 p 2 p 14 p 7 p 8 p 5 p 13 p 9 p 10 p 12 p 11

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. A ponthalmaz polárszög szerinti rendezése. 2. Kössük össze a pontokat a rendezés szerinti sorrendben. q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Konvex burok meghatározása Adott {p 1,...,p n } ponthalmaz. Határozzuk meg p 1,...,p n ponthalmaz konvex burkát! Definíció: Egy egyszerű (nem metsző) poligon konvex, ha bármely két belső pontját összekötő szakasz minden pontja a poligon belsejében, vagy határán van. Definíció: Egy P={p 1,...,p n } ponthalmaz konvex burka az a legszűkebb Q konvex poligon, amely a ponthalmaz minden pontját tartalmazza.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás 1. a ponthalmaz polárszög szerinti rendezése. q q

Megoldás 7 6 5 4 3 2 1 1 2 3 4 5 6 7 1 2 4 3 5 6 7 8 6 5 4 3 2 1 5 4 3 2 1 8 2 1... 2 1 1... pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése

Megoldás 7 6 5 4 3 2 1 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 6 5 4 3 2 1 5 4 3 2 1 8 2 1... 2 1 2 1... 9 10 11 9 8 2 1 10 9 8 2 1 pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése

Megoldás 7 6 5 4 3 2 1 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 6 5 4 3 2 1 5 4 3 2 1 8 2 1... 2 1 2 1... 9 10 11 9 8 2 1 10 9 8 2 1 11 1 pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése 0

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás Konvex burok meghatározása 1. A ponthalmaz polárszög szerinti rendezése. 2. A pontokat sorra vesszük a rendezés sorrendjében. 3. Ha a verem tetején lévő pont, az aktuális és a következő pont forgásiránya O(nlogn) + O(n) + O(n) 1 vagy 0: az aktuális pontot betesszük a verembe -1: kivesszük a pontot a veremből és visza 3.-hoz 4. Az utolsó pont után mégegyszer vesszük q-t, majd megállunk. A veremben lévő pontok a konvex burok pontjai. = O(nlogn)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Legtávolabbi pontpár meghatározása Adjunk hatékony algoritmust a két legtávolabbi pont meghatározására! O(n 2 )

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Legtávolabbi pontpár meghatározása Adjunk hatékony algoritmust a két legtávolabbi pont meghatározására! q O(n 2 ) O(nlogn)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

q Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q O(n)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás q

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás Legtávolabbi pontpár meghatározása 1. A konvex burok meghatározása. O(nlogn) 2. A 2 egyenes végiggörgetése és közben maximumkeresés az érintett pontok távolságnégyzetein. + O(n) O(nlogn)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Legközelebbi pontpár meghatározása Nézzük végig az összes pontpárt és válasszuk ki hol lesz a távolság (négyzete) minimális? q O(n 2 )

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás Oroszlán keresése a sivatagban

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Minden rekurzív hívásnál átadásra kerülnek a P ponthalmaz egy Q részhalmazának pontjai egy az x koordináták szerint monoton növekvően rendezett X tömbben (azonos x koordinátájú pontok esetén a kisebb y koordinátájú jön előbb), valamint egy az y koordináták szerint monoton növekvően rendezett Y tömbben (azonos y koordinátájú pontok esetén a kisebb x koordinátájú jön előbb). Hogy ne kelljen minden egyes rekurzív hívás előtt rendezésre pazarolni az időt, ezért már az algoritmus elején előállítjuk P pontjainak az x, illetve az y koordináták szerint monoton növekvően rendezett tömbjeit, így a rekurzív hívások előtt csak kiválogatásokat kell végezni.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Egy adott rekurzív lépés a következő. Ha Q < 3, akkor páronkénti vizsgálattal határozzuk meg a minimális távolságot. Természetesen az érdekes eset, amikor Q > 3, ilyenkor az alábbiak szerint járunk el: Először egy olyan e függőleges egyenest keresünk, amely Q-t két olyan QL és QR részre osztja, amelyekre: QL = Q /2 és QR = Q /2 QL minden pontja az egyenes bal oldalán van, vagy illeszkedik az egyenesre QL minden pontja az egyenes jobb oldalán van, vagy illeszkedik az egyenesre

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Válogassuk szét a pontokat az X tömbből az XL és XR tömbökbe: XL-be kerüljenek a QL-beli pontok, XR-be pedig a QR-beliek. Természetesen az XL és XR tömbök is rendezettek az x koordináták szerint. Válogassuk szét a pontokat az Y tömbből is az YL és YR tömbökbe a fentiekhez hasonlóan! Ezután keressük meg rekurzívan a QL és QR halmazokban a legközelebbi pontpárt. Az első hívás bemenete az XL és YL tömbök, míg a második hívásé az XR és YR tömbök. Legyen QL-ben, illetve QR-ben a minimális távolság δl, illetve δr, és legyen δ = min(δl, δr) Most a legközelebbi pontpár: vagy az egyik rekurzív hívás által megtalált δ távolságú páros, vagy egy olyan pár, amelynek egyik pontja QL-ben, a másik QR-ben van.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése A következő lépés annak meghatározása, hogy ez utóbbi párok között van-e olyan, amelyben a pontok távolsága kisebb, mint δ. Vegyük észre, hogy ha van ilyen pár, akkor annak egyik pontja sem lehet δ-nál nagyobb távolságra e-től. Válogassuk ki az Y tömbből azokat a pontokat, amelyek e-től mért távolsága legfeljebb δ. Jelölje a kapott tömböt Y'. Természetesen az Y' tömb is rendezett az y koordináták szerint.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Most minden egyes p Y' ponthoz keressük meg Y' azon pontjait, melyek p-től mért távolsága legfeljebb δ, és amelyek a p-n átmenő vízszintes egyenesen vagy az fölött vannak. Legfeljebb 7 ilyen pont jöhet számításba: Ha i < j és Y'[i] valamint Y'[j] távolsága legfeljebb δ, akkor ez a két pont az ábrán látható δ 2δ oldalú téglalapban van. Mivel a téglalapban lévő 8 kis négyzet egyikében sem lehet egynél több pont Y'-ből, az állítás adódik.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Így minden p Y' pontra elég kiszámolni p távolságát az Y'- ben utána következő 7 ponttól. Az így kapott távolságok minimuma legyen δ'. Ha δ' < δ, akkor Q-ban a minimális távolság δ', egyébként a minimális távolság δ. Mivel az előrendezések is megvalósíthatók O(n log n) költséggel, ezért az algoritmus teljes költsége szintén O(n log n).

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése TAVKERES(P,X,Y) { if P 3 then return NAIV(P) Legyen PL, P P /2c darab legkisebb x koordinátájú eleme. Legyenek XL,YL a PL beli pontok rendezett halmazai. Legyen PR P többi eleme Legyenek XR,YR a PR beli pontok rendezett halmazai. Legyen x0 PL-t és PR szeparáló x koordináta dl := TAVKERES(PL,XL,YL) dr := TAVKERES(PR,XR,YR) d := min(dl,dr) Yd := azon P-beli pontok y koordináta szerint rendezett halmaza, amelyek x-koordinátájára x0 x d (max. 7 pont) Ha van Yd-ben d-nél közelebbi pár, akkor azt adjuk vissza, egyébként d-t a megfelelo pontpárral }

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Szakaszok metszése A p 1 p 2 szakasz átfog egy egyenest, ha p 1 az egyenes egyik, p 2 az egyenes másik oldalára esik. e p 2 e p 2 p 1 p 1 A p 1 p 2 szakasz egyenese e, ha p 1 e p 2 e p 1 p 2 e

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Szakaszok metszése Két szakasz pontosan akkor metszi egymást, ha az alábbi feltételek egyike teljesül: mindkét szakasz átfogja a másik egyenesét? az egyik szakasz valamelyik végpontja illeszkedik a másik szakaszra e 34? p 4 p 4 p 1 p 2 e 12 p 1 p 2 p 3 p 3

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Szakaszok metszése e 2 e 2 s2.p1 s2 s1.p1 s1 s2.p2 s1.p2 e 1 s2.p1 s2 s2.p2 s1 s1.p2 e 1 s1.p1 szmetsz(szakasz s1,s2) { int e=forgasirany(s1.p1,s1.p2,s2.p1) ; int f=forgasirany(s1.p1,s1.p2,s2.p2) ; int g=forgasirany(s2.p1,s2.p2,s1.p1) ; int h=forgasirany(s2.p1,s2.p2,s1.p2) ; if (e*f<0 and g*h<0) return true ;... // és ha rajta van is return true!? } return false ;

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Pont helyzetének meghatározása Adott a síkon egy zárt, nem-metsző poligon a csúcsainak {p 1,...,p n } órajárással ellentétes felsorolásával és adott egy q pont. Eldöntendo a q pontnak a poligonhoz viszonyított helyzete, azaz, hogy a belsejéhez tartozik-e, az oldalán van-e, avagy külső pont?

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás k q q O(n)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás k q q k O(n) O(n)

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Feladat Metsző szakaszpárok keresése A feladatban adott n darab szakasz {s 1,...,s n } (a szakaszok az s i.bal és s i.jobb végpontjaik által adottak) és meg kell határozni vane-e közöttük kettő olyan, amely metszi egymást. Egyszerűsítő feltételek: 1. Egyik bemeneti szakasz sem függőleges. 2. Nincs három olyan szakasz, amelyek egy pontban metszenék egymást

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás Seprő egyenes Seprés során egy képzeletbeli seprő egyenest mozgatunk a geometriai elemek halmazán. Azt a dimenziót, amelyben a seprő egyenes halad, idődimenziónak hívjuk. Jelen esetben a seprő egyenes az y-tengellyel párhuzamos egyenes, az idodimenzió az x-koordináta lesz.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Megoldás

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Legyen s 1 és s 2 szakasz és x R s 1 összehasonlítható s 2 -vel x-nél, ha x s 1.bal.x x s 1.jobb.x és s 1 s 2.bal.x x s 2.jobb.x s 2 Az s 1 szakasz felette van az s 2 szakasznak, (s 1 >x s 2 ), ha s 1 összehasonlítható s 2 -vel x-nél és az x seperő egyenesnek s 1 -el vett metszete magasabban van, mint s 2 -vel vett metszete.

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Ha x1 < x2-re s 1 > s 2 és s 2 > s 1, akkor az s 1 és s 2 szakasz metszi egymást x1 és x2 között. Továbbá, ha x1 és x2 a seprő egyenes két egymást követő megállási helye, akkor x1-ben (után) a két szakasz egymást követő lesz a rendezésben. x1 x2 s 2 s 1

pont helyzete, konvex burok, ponthalmaz legközelebbi és legtávolabbi pontpárja, metsző szakaszpárok keresése Tehát elegendő ellenőrizni minden szakasz berakásakor, hogy a rendezésben őt megelőző, és követő szakasz metszi-e a berakottat, és kivételkor ellenőrizni, hogy a kivett szakaszt megeloző és követő szakaszok metszik-e egymást. Használjunk Rhalmaz adattípust! (pl. piros-fekete fa) MSZPkeres() { minden p-re az R beli sorrendben if (p==s.bal) { betesz(s) ; if (szmetsz(kovet(s),s) or szmetsz(eloz(s),s)) return True ; } if (p=s.jobb) { s if szmetsz(kovet(s),eloz(s)) return True ; kivesz(s) ; } } kovet(s) kovet(s) s eloz(s) O(nlogn)

Példa x s 1 s 2 s 3 s4 s 5 s 8 s 7 s 6 s 1

Példa x s 1 s 2 s 2 s 3 s4 s 5 s 8 s 7 s 6 s 1

Példa x s 1 s 2 s 2 s 3 s4 s 5 s 8 s 3 s 7 s 6 s 1

Példa x s 3 s 2 s 1 s 2 s 3 s4 s 5 s 8 s 7 s 6 s 1

Példa x s 3 s 2 s 1 s 2 s 3 s4 s 5 s 8 s 5 s 7 s 6 s 1

Példa x s 3 s 2 s 1 s 2 s 3 s4 s 5 s 8 s 4 s 5 s 7 s 6 s 1

Példa x s 3 s 2 s 1 s 2 s 3 s4 s 5 s 7 s 8 s 6 s 4 s 5 s 6 s 1

Példa x s 3 s 2 s 6 s 2 s 3 s4 s 5 s 8 s 1 s 4 s 5 s 7 s 6 s 1

Példa x s 3 s 2 s 6 s 2 s 3 s4 s 5 s 7 s 8 s 1 s 4 s 7 s 5 s 6 s 1

Példa x s 3 s 2 s 6 s 5 s 3 s4 s 5 s 8 s 1 s 4 s7 s 2 s 7 s 6 s 1

Példa x s 7 s 2 s 6 s 5 s 3 s4 s 5 s 8 s 1 s 4 s 2 s 7 s 6 s 1

Példa x s 7 s 2 s 6 s 5 s 3 s4 s 5 s 8 s 4 s 2 s 7 s 6 s 1

Példa x s 7 s 2 s 6 s 5 s 3 s4 s 5 s 8 s 4 s 2 s 7 s 6 s 1

GEOMETRIAI ADATSZERKEZETEK 4-es fa, 8-as fa, k-d fa

Mintaillesztés

Egy Σ ábécé feletti szavakon a Σ * (Σ elemeiből képzett véges sorozatok) elemeit értjük. Az X Σ * szó hossza a sorozat elemeinek a száma, jele X. A továbbiakban feltételezzük, hogy a szavakat tömbökkel ábrázoljuk, tehát az X szó i-edik elemére az X[i] értékkel (xi) hivatkozunk. Az X = x1,...,xm, és Y = y1,...,yn szavak konkatenációja: XY = x1,...,xm,y1,...,yn.

Az U szó kezdőszelete, vagy prefixe V-nek, jele U V, ha W Σ *, amelyre UW = V. Az U szó végződése, vagy szuffixe V-nek, jele U V, ha W Σ *, amelyre WU = V. Az X Σ * szó első i betűjéből álló prefixére az Xi = X[1...i] (x1... xi) jelölést használjuk.

Mintaillesztési probléma Bemenet: A,S Σ *, A a szöveg, S a minta. Kimenet: A legkisebb (vagy másik problémában az összes) olyan i, amelyre A[i+1..i+m] = S, ahol m = S a minta hossza. A kimeneti feltétel esetén azt mondjuk, hogy az S minta i eltolással illeszkedik az A-ra.

A feladatnak nyilvánvalóan megoldását adja a következő algoritmus, amely az összes lehetséges eltolás végigpróbálásán alapul: vegignez(a,s) { } n=hossz(a) ; m=hossz(s) ; for (i=0;i<n-m;i++) { } egyezik=true ; for (j=0;j<m and egyezik;j++) { } if (A[i+j]!=S[j-1]) { } egyezik=false ; exit ; if (egyezik) return i-1; return -1 ;

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m Megvan

Mennyi a futási idő legrosszabb esetre?

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

a a a a a a a a a a a a a a a a a b a a a a b

n a a a a a a a a a a a a a a a a a b a a a a b m O(nm)

Mintaillesztés véges determinisztikus automatával

Legyen M = (Q,q0,F,S,δ) olyan véges determinisztikus automata, amely a Σ * S nyelvet ismeri fel! Mivel Σ * S az összes olyan szavak halmaza, amelyek az S mintára végződnek, ezért A[0..i]-t pontosan akkor ismeri fel az automata, ha az S minta [i-m] eltolással előfordul az A szövegben. Ekkor a következő algoritmus megoldja a problémát.

q = q0; n = A ; m = S ; for (i=1;i<=n;i++) { q = δ(q,a[i]); if (q F) return i m+1; } Az algoritmus futási ideje adott automata mellett O(n).

Példa Σ={a,b,c} S a c a b b c a c a a b b b,c q0 q0 q1 q2 q3 q4 b a c b,c a q5 A a c a b a c b b a a c a b b a q1 q2 q3 q4 q1 q2 q0 q0 q1 q1 q2 q3 q4 q5

Hogyan tudjuk előállítani az M automata átmenetfüggvényét? Vegyük azt az automatát, amelyben az állapotok halmaza 0,...,m és minden q < m állapot és x Σ esetén

m = S ; for (q:= 0; q<=m;q++) for ( x: x Σ) { S 0 1 2 3 4 a c a b b for (k=min(m,q+1);sk! Sqx;k--) ; δ(q,x) = k ; c } } a c a a b b b,c q0 q1 q2 q3 q4 q0 q1 q2 q3 q4 b a c b,c a q5 a q1 q1 q3 q1 q1 b q0 q0 q0 q4 q5 c q0 q2 q0 q2 q0 O( Σ m 2 ) O(m 3 )

Példa Σ={a,b} S a a a a b a a a a b q0 b q1 q2 q3 q4 b b a q5

Példa Σ={a,b} S a a a a b b q0 a b a a a q1 q2 q3 q4 b b a b q5 A a a a a a a a a a a a a a a a a a b

Knuth Morris Pratt algoritmus Ha egy helyen a minta egy kezdőszelet illeszkedik, akkor a következő néhány elemnél nem feltétlen kell ellenőrízni az illeszkedést, hanem a mintától és az aktuális illeszkedéstől függően lehet előre léptetni az összehasonlító algoritmust. A léptetés mértéke előre kiszámítható a mintára.

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

b l a b d o r t d o d o r t m u n d d o r t m

A minta prefix függvénye PRE : {1,...,m} {0,...,m 1} a következoképpen adható meg: Prefix(S) { m=hossz(s) ; pre[1]=0 ; k=0 ; for (q=2;q<=m;q++) { while (k>0 and S[k+1]!=S[q]) k=pre(k) ; if (S[k+1]==S[q]) k++ ; pre[q]=k ; } return pre ; } A Prefix eljárás futási ideje legrosszabb esetben O(m).

KMP(A,S) { n=hossz(a) ; m=hossz(s) ; pre=prefix(s) ; q=0 ; for (i=1;i<=n;i++) { while (q>0 and S[q+1]!=A[i]) q:=pre[q] ; if (S[q+1]==A[i]) q++ ; if (q==m) { illeszkedik(i-m+1) ; q:=pre[q] // következő illeszkedés keresése } }

Rabin-Karp algoritmusa Az algoritmus a Σ feletti szavakat, egy Σ = d alapú számrendszerben felírt számként tekinti. Ekkor az S mintát egyértelműen megadja a hozzárendelt szám értéke, amit jelöljön s. Ez az s érték kiszámítható O(m) időben. Az algoritmus alapötlete, hogy az A szövegre, minden i-re kiszámolva az A[i + 1,...,i + m] számértéket, azon esetekben, ahol ez a szám s illeszkedik a minta. Ezt hatékonyan számíthatjuk, mivel A[i+2,...,i+m+1] = (A[i+1,...,i+m] d m A[i+1])d +A[i+m+1], így az első érték után a többiek mindegyike konstans időben kiszámítható.

A módszerrel az a probléma, hogy a létrejövő számok túl nagyok így nem ábrázolhatóak a számítógépen a szokásos számtípusokkal. A megoldás az, hogy a számok helyett csak egy megfelelően nagy, de még kezelhető q érték szerinti osztásmaradékukat használjuk. Természetesen így egy olyan algoritmust kapunk, amely esetén a minta illeszkedik válasz hamis lehet, ha a két szám maradéka megegyezik. Ezért a maradékosztályok megegyezése esetén, a helyességet ellenőrizni kell. Viszont az algoritmus gyors elutasítási heurisztikaként jól használható, mivel ha azt kapjuk, hogy a minta nem illeszkedik, akkor valóban nincs illeszkedés.