1 Mukautuvat järjestämisalgoritmit Riku Saikkonen TIK-päivä, 17. 1. 2013
2 Mukautuva järjestäminen minkä tahansa vertailuihin perustuvan järjestämisalgoritmin täytyy tehdä pahimmassa tapauksessa vähintään Ω(n log n) vertailua esim. lomitusjärjestäminen (merge sort) on O(n log n) mutta osa tapauksista voidaan järjestää tätä nopeammin esim. lisäysjärjestäminen (insertion sort) järjestää valmiiksi järjestyksessä olevan jonon ajassa O(n) mukautuva järjestäminen (adaptive sorting) tutkii tätä mitä tarkempaa voidaan sanoa kuin että algoritmi on pahimmassa tapauksessa O(n log n) uusia järjestämisalgoritmeja, jotka järjestävät melkein järjestyksessä olevia jonoja nopeammin useita määritelmiä melkein järjestyksessä olemiselle
3 Melkein järjestyksessä: mukautuvuusmittarit mikä syöte on melkein järjestyksessä? voi mitata usealla tavalla esim. inversiot: 0.. (n 2 n)/2 väärin päin olevaa alkioparia Esimerkkejä Inv-mittarista 1 2 3 4 5 6 7 8 9 10 11 Inv = 0 1 2 3 4 6 5 7 8 9 10 11 Inv = 1 3 4 5 6 1 2 7 8 10 9 11 Inv = 9 11 10 9 8 7 6 5 4 3 2 1 Inv = 55 mukautuvat järjestämisalgoritmit ovat optimaalisia tiettyjen mittarien suhteen aikavaativuus = vertailujen vähimmäismäärä mittarille esim. Inv-optimaalinen jos aika on O(n log(inv/n)) pahimmassa tapauksessa aina O(n log n) mittareita on esitetty n. 15 kpl, ja niillä on yhteyksiä esim. kaikki Loc-optimaaliset algoritmit ovat myös Inv-optimaalisia
4 Mukautuvat puujärjestämisalgoritmit lisäysjärjestämisestä voi tehdä mukautuvan käyttämällä taulukon sijaan hakupuuta eli lisätään alkiot yksi kerrallaan hakupuuhun ja luetaan järjestys siitä lopuksi seuraavaa lisäyskohtaa ei haeta hakupuun juuresta eli alkioiden keskeltä lähtien, vaan: suurimmasta alkiosta Inv-optimaalinen algoritmi edellisestä lisäyskohdasta Loc-optimaalinen algoritmi puussa pitää liikkua ylös ja sivulle; vaihtoehtoja: muokatut AVL-puut (ei pääse sivulle vain Inv-opt.) finger-puut (B-puu isä- ja sisaruslinkeillä) splay-puut (josta Splaysort, parhaita näistä algoritmeista) myös lomitusjärjestämisen voi tehdä hakupuilla
5 Bulkkipuu Block-mittari: montako alijonoa, jotka eivät muutu järjestettäessa? oma bulkkipuumme tallettaa näitä alijonoja alijono käyttäytyy kuin se olisi yksi alkio alijono pitää jakaa, jos sen sisään lisätään Jono (Block ) 1 2 3 10 11 9 4 5 6 7 8 (4 ) Bulkkipuu splay-puusta [4, 5, 6, 7, 8] [1, 2, 3] [10, 11] [9]
5 Bulkkipuu Block-mittari: montako alijonoa, jotka eivät muutu järjestettäessa? oma bulkkipuumme tallettaa näitä alijonoja alijono käyttäytyy kuin se olisi yksi alkio alijono pitää jakaa, jos sen sisään lisätään Jono (Block, Inv Block rep ) 1 2 3 10 11 9 4 5 6 7 8 (4, 3) 10 11 9 4 5 6 7 8 1 2 3 (4, 6) Bulkkipuu splay-puusta [4, 5, 6, 7, 8] [1, 2, 3] [10, 11] [9] tähän perustuva lisäysjärjestäminen on mm. Inv-, Loc-, Block-, Inv Block rep - ja Loc Block rep -optimaalinen Inv Block rep mittaa Block-mittarin laskemien alijonojen keskinäistä järjestystä Inv:lla
6 Vähän koetuloksia Running time (s) Suoritusaikoja eri Block-mittarin arvoilla, n = 2 25 34 10 6 5 60 4 50 3 40 30 2 20 1 10 0 10 0 10 1 10 2 10 3 10 4 10 5 10 6 Block(X) 0 10 6 10 7 Block(X) Splaysort Bulk-tree sort Quicksort Merge sort
7 Lisää koetuloksia Vertailujen määrä eri Block-mittarin arvoilla, n = 2 25 34 10 6 40 35 Comparisons/N 30 25 20 15 10 5 0 10 0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 Block(X) Splaysort Bulk-tree sort Quicksort Merge sort
8 Lopuksi mukautuvaa järjestämistä voisi käyttää missä vain mutta tavallisia järjestämisalgoritmeja parempi vain jos suuri osa syötejonoista on melkein järjestyksessä muuta tähän liittyvää tutkimusryhmämme tutkimusta: bulkkipuu toimii myös yleiskäyttöisenä hakupuuna, jossa on tehokkaat monen alkion lisäys ja poisto jonkin verran muokattuna se sopii hyvin SSD-levyjä käyttävän tietokannan hakemistorakenteeksi aihepiiriä lähimmät pääaineet ja kurssit: Ohjelmisto- T-106.4100 Algoritmien suunnittelu ja analyysi järjestelmät T-106.5221 Transaktionhallinta tietokantajärjestelmissä T-106.5400 String Algorithms Tietojen- T-79.4202 Principles of Algorithmic Techniques käsittelyteoria T-79.5207 Advanced Course in Algorithms