Algoritmai ir duomenų struktūros (ADS) 13 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2018-05-14
Šaltinis Paskaita parengta pagal William Pugh Skip Lists: A Probabilistic Alternative to Balanced Trees
Tiesinis sąrašas
Su 2 lygių nuorodomis
Su 3 lygių nuorodomis
Su 4 lygių nuorodomis
angl. Skip Lists Statistiniai sąrašai
Apibrėžimai Statistiniai sąrašai priklauso nuo parametro p, kuris pavyzdžiuose buvo ½. Idealiu atveju 16 elementų sąrašas turėtų 1-o lygio 8 elementus, 2-o lygio 4 elementus,... L(n) žymėsime log 1/p n Maksimalus lygis sąrašui su n elementų turėtų būti L(n).
Paieška
Lygio generavimas elementui
Lygio generavimas elementui (2) Kokį lygį pasirinkti naujam elementui? 1. Sugeneruotą pagal algoritmą (įterpiant 16-ą elementą gali būti sugeneruotas 14-as lygis, bet su maža tikimybe). 2. Pagal einamąjį elementų skaičių (ne daugiau kaip L(n), kur n einamasis elementų skaičius). 3. Pagal einamąjį didžiausią lygį (ne daugiau kaip 1 didesnis už einamąjį didžiausią lygį).
Įterpimo pavyzdys
Įterpimas
Išmetimas
Algoritmų palyginimas
Parengta pagal https://www.cs.princeton.edu/~rs/algsds07/16geometric.pdf http://www.ics.uci.edu/~eppstein/geom.html
Taikymo sritys: Projektavimas ir gamyba Grafika ir vizualizacija Informacinės sistemos Medicina ir biologija Fiziniai mokslai Robotika ir kt. Geometriniai algoritmai Istorija: Antikinės matematikos pagrindai Dauguma geometrinių algoritmų yra naujesni nei 25 metų
Geometriniai primityvai Taškas: du skaičiai (x, y). Tiesė: du skaičiai a ir b [ax + by = 1]* Atkarpa: du taškai. Daugiakampis: taškų seka. Kitos geometrinės figūros: Trikampis, keturkampis, apskritimas, sfera, kūgis,... 3D ir daugiau dimensijų kartais sudėtingiau * Bet kuri tiesė, neinanti per (0,0)
Primityvios operacijos Atstumas tarp dviejų taškų Ar dvi atkarpos kertasi? Ar taškas yra daugiakampio viduje? Ar trimis taškais apibrėžta laužtė p1 - p2 - p3 yra prieš laikrodžio rodyklę? Ar daugiakampis paprastasis?... Paprastasis daugiakampis: daugiakampio kraštinės nekerta viena kitos.
Intuicija Žmonės turi erdvinę intuiciją 2D ir 3 D. Kompiuteriai neturi. Niekas neturi geros intuicijos, kai dimensijų daugiau nei 3. Perspėjimas: intuicija gali būti klaidinga.
Ar daugiakampis paprastasis? Žmogui Kompiuteriui
Daugiakampio viduje ar išorėje? Teorema. Bet kuri uždara paprasta (nepersikertanti) laužtė dalina plokštumą į 2 dalis: daugiakampio vidų ir išorę. Ar taškas yra daugiakampio viduje? Taikymas: nupiešti užpildytą daugiakampį.
Daugiakampio viduje ar išorėje: kirtimų skaičius? Ar spindulys kerta atkarpą?
Daugiakampio viduje, jei kirtimų skaičius nelyginis
Prieš laikrodžio rodyklę Duoti trys taškai a, b, c. Ar laužtė a-b-c yra prieš laikrodžio rodyklę? Idėja: lyginti pasvirimo kampus. Pamoka. Geometrinių primityvų realizacija netriviali: Darbas su išsigimusiais atvejais Darbas su slankaus kablelio tikslumu
Prieš laikrodžio rodyklę įgyvendinimas Determinantas duoda dvigubą trikampio plotą: Jei plotas: > 0, prieš laikrodžio rodyklę; < 0, pagal laikrodžio rodyklę; = 0, lygiagrečios.
Prieš laikrodžio rodyklę įgyvendinimas
ADT Taškas
Atkarpų susikirtimas Ar visais atvejais duodamas korektiškas atsakymas?
Iškilus apvalkalas Taškų aibė yra iškili, jei bet kuriems jos taškams p ir q atkarpa p-q pilnai priklauso aibei. Iškilus apvakalas: minimali iškili taškų aibė, kuriai priklauso visi duoti taškai.
Iškilaus apvalkalo savybės Paprasčiausia figūra, apimanti visus taškus. Trumpiausias (perimetras) aptvaras aplink visus taškus. Mažiausias (plotas) iškilus daugiakampis, turintis visus taškus.
Mechaninis sprendimas Apjuosti taškus elastinga gumine juosta:
Brute-force algoritmas Pastebėjimai: Aibės P iškilaus apvalkalo kraštinės jungia aibės P taškus. p-q yra iškilaus apvalkalo briauna, jei visi kiti aibės P taškai yra prieš laikrodžio rodyklę p-q atžvilgiu. O(N 3 ) sudėtingumo algoritmas Kiekvienai aibės P taškų porai p, q: suskaičiuoti CCW(p, q, x) visiems kitiems aibės P taškams x; p-q yra iškilaus apvalkalo briauna, jei visos CCW reikšmės yra teigiamos.
Dovanos vyniojimo algoritmas Pradedama nuo taško su mažiausia y koordinate Sukama linija prieš laikrodžio rodyklę
Dovanos vyniojimo įgyvendinimas Skaičiuoti kampą tarp einamojo taško ir visų likusių taškų Pasirinkti tašką, kuris sudaro mažiausią kampą didesnį už einamąjį kampą Kiekvienoje iteracijoje N kampo skaičiavimo operacijų
Grahamo skenavimo algoritmas Pasirinkti tašką p su mažiausia y koordinate Surikiuoti taškus pagal ašinį kampą su p, kad gautųsi paprastas daugiakampis Imti taškus iš eilės ir ignoruoti tuos, kurie sudaro posūkį pagal laikrodžio rodyklę Sudėtingumas: O(N logn)
Grahamo skenavimo algoritmas (2) PAB yra prieš laikrodžio rodyklę A taškas tinka ABC yra prieš laikrodžio rodyklę B taškas tinka BCD nėra prieš laikrodžio rodyklę, todėl tašką C ignoruojame
Grahamo skenavimo algoritmas (3)
Greito eliminavimo algoritmas
Arčiausių taškų uždavinys Duota: N taškų plokštumoje. Rasti: porą taškų, tarp kurių atstumas mažiausias. Brute-force algoritmas: Patikrinti visas taškų poras Sudėtingumas O(N 2 )
Arčiausių taškų uždavinys: dalinimo algoritmas
1854 choleros epidemija Londone Nustatytas naujas pacientas p. Kuri vandens pompa yra arčiausiai p namų?
Artimiausio kaimyno uždavinys Duota: N taškų plokštumoje. Artimiausio kaimyno uždavinys: Duotam plokštumos taškui p rasti artimiausią iš pradinių N taškų.
Voronojaus diagramos Voronojaus sritis: taškų, artimiausių duotam taškui, aibė. Voronojaus diagrama: padalinimas į Voronojaus sritis.
Voronojaus diagramos (2)
Delaunė trianguliacija Delaunė (Delaunay) trianguliacija vadinama toks plokštumos taškų Mi trejetų sujungimas trikampiais, kad nubrėžtame per bet kurio trikampio viršūnes apskritimo viduje nėra nei vieno taško Mi.
Delaunė trianguliacija (2)
Delaunė trianguliacija Voronojaus diagrama Delaunė trianguliacija yra duali Voronojaus diagramai. Žinant Delaunė trianguliaciją, Voronojaus diagramą galima surasti atlikus O(N logn) veiksmų. Norint tai padaryti reikia iš Delaunė trianguliacijos atkarpų vidurių iškelti statmenis ir rasti statmenų suformuojamą plokštumos suskaidymą.
Delaunė trianguliacija Voronojaus diagrama (2)
Klausimai?