01110111010110 11110101010101 00101011010011 01010111010101 01001010101010 10101010101010 Abstraktiot ja analyysi algoritmit ja informaation esitykset Petteri Kaski Tietotekniikan laitos Aalto-yliopisto CS-A1120 Ohjelmointi 2 12. huhtikuuta 2017 10101011110101 01010101011101 01010111010110 10101101010110 10101110101010 11101010101101 01110111010110 10111011010101 11110101010101 00010101010101 01011010101110
Sisältö (kierrokset ja moduulit) I 1. Lämmittelykierros Tietokoneen mysteeri 2. Bitit ja data 3. Kombinaatiologiikka 4. Sekventiaalilogiikka 5. Ohjelmoitava kone II Abstraktiot ja analyysi 6. 7. 8. 9. III Funktionaalinen ohjelmointityyli Suorituskykyanalyysi Rekursio Algoritmit ja informaation esitykset Uuden äärellä 10. Rinnakkaisuus ja samanaikaisuus 11. Virtualisointi ja skaalautuvuus 12. Ohjelmoitava vai oppiva kone? (Intel Xeon Phi Knights Landing -lastu, 72 suoritusydintä, 8 miljardia transistoria, 14 nanometrin litografia) (Google Hamina)
Laskenta ja ohjelmointi Laskenta on luonnonilmiö Ohjelmointi on keino valjastaa laskenta haluttuun tarkoitukseen Ohjelmointitaito ja ymmärrys laskennasta ovat välttämätön osa tieteellistä yleissivistystä tietojenkäsittelytieteen alkeet
Laskennan ja ohjelmoitavuuden yleisyysperiaate: Ohjelmoitava kone voi, sopivasti ohjelmoituna, simuloida toista ohjelmoitavaa konetta (Moduuli 1)
Laskenta ja ohjelmointi ovat laitteistosta ja ohjelmointikielestä riippumattomia käsitteitä (käytännössä fyysinen laitteisto, esimerkiksi käytettävissä olevan muistin määrä, ja simulaation tehokkuus rajaavat edellistä väitettä jonkin verran) (Moduuli 1)
Tietojenkäsittelytiede on nuori tieteenala P vs NP -ongelma on erinomainen esimerkki siitä että ymmärryksemme laskennasta ja siitä mitä tehtäviä voidaan ratkoa tehokkaasti ei ole vielä erityisen kypsä töitä siis riittää! (**) http://cacm.acm.org/magazines/2009/9/38904-the-status-of-the-p-versus-np-problem/fulltext
Esimerkki NP-täydellisestä tehtävänasettelusta Voidaanko luku 2017 muodostaa summana kokonaisluvuista 87, 116, 153, 265, 394, 476, 516, 664, 670, 791 jos jokaista lukua saa käyttää enintään kerran? Ei tunneta menetelmää joka tehokkaasti ratkaisisi tehtävän sen yleisessä muodossa (= mielivaltaisen monta mielivaltaisen suurta lukua)
2017 = 87 + 116 + 153 + 394 + 476 + 791 (Pienillä syötteillä ratkaisu toki onnistuu.)
Osajoukkosumma-ongelmasta enemmän (***) http://dx.doi.org/10.4230/lipics.stacs.2016.13 STACS 16 February 17 20, 2016 Orléans, France
9. Algoritmit ja informaation esitykset
Motivaatio Ihmiskunnan kyky käsitellä ja hyödyntää informaatiota rajautuu käytettävissä oleviin algoritmeihin ja nokkeliin tapoihin esittää informaatio tehokkaan laskennan mahdollistamiseksi (Laskenta-alustoilla ja käytettävissä olevilla ohjelmointiabstraktioilla on tietysti myös merkittävä rajaava rooli jos laskenta-alusta on tehoton tai varsinainen ohjelmointityö tehotonta, ei myöskään paljoa saada aikaan)
Esimerkki Roomalaisessa lukujärjestelmässä esitetyillä luvuilla on ikävä laskea Positionaalilukujärjestelmässä esityillä luvuilla on huomattavasti näppärämpi laskea (Kierrokset 2 & 3)
Algoritmi Abū Abd Allāh Muhammad ibn Mūsā al-khwārizmī https://www.cs.princeton.edu/~chazelle/pubs/algorithm.html
Esimerkki Epäjärjestys ja järjestetty aineisto Järjestäminen (lajittelu) Järjestettyyn aineistoon voi tehdä tehokkaita hakuja (binäärihaku) (Kierros 7)
Esimerkki Osajoukkosumma Tehokkaita ratkaisualgoritmeja ei tunneta Eräitä (yleisessä tapauksessa tehottomia) menetelmiä: Rekursiivinen haku Dynaaminen ohjelmointi (Kierros 8)
Algoritmit ja informaation esitykset Kierroksella 9 tarkastelemme kahta esimerkkiä, toinen käsittelee tekstuaalista informaatiota, toinen numeerista Esimerkki 1: Tekstiaineiston indeksointi hakua varten järjestyksestä ja järjestämisestä enemmän Esimerkki 2: Yhden muuttujan polynomeilla laskenta ja signaalinkäsittely (ei käsitellä kevät 2017 mutta demo seuraavassa!)
[demo] Kaksi vaihtoehtoista tapaa esittää sama yhden muuttujan polynomi: kerroinesitys polynomin arvot d + 1 pisteessä (polynomin asteluku d; yllä d = 3)
Tekstihaku Missä kohtaa tekstiä etsittävä hahmo esiintyy?
Hahmo vastaa tekstiä (löytyy tekstistä) alkaen indekseistä i=3 ja i=6
Huomatus: Hahmo voi mennä tekstissä päällekkäin itsensä kanssa
Tehokas haku? Entäpä jos tekstin pituus on n... ja hahmon pituus on m Haku on selvästikin tehtävissä ajassa O(nm)... mutta entäpä jos tekstiaineisto (n) on todella suuri?... ja haluamme tehdä aineistoon, sanokaamme, tuhansia hakuja sekunnissa?
Periaate: Indeksointi tehokkaan haun mahdollistamiseksi Pystyisimmekö indeksoimaan tekstiaineiston siten, että siihen on tehokasta tehdä hakuja? Vrt. binäärihaku järjestetystä aineistosta (... miten järjestämme tekstiaineistoa? )
Sanakirjajärjestys (leksikografinen järjestys) Mikä on käytetty järjestämissääntö?
Merkkijono S edeltää merkkijonoa T leksikografisessa järjestyksessä jos ja vain jos merkkijono S on merkkijonon T aito prefiksi ( etuliite ), tai on olemassa pienin indeksi i jossa S ja T poikkeavat toisistaan siten, että S(i ) < T(i )
Periaate: Indeksointi tehokkaan haun mahdollistamiseksi Pystyisimmekö indeksoimaan tekstiaineiston siten, että siihen on tehokasta tehdä hakuja? Vrt. binäärihaku järjestetystä aineistosta (... olisiko siis leksikografisesta järjestyksestä apua tekstihaussa?... täsmälleen mitä järjestämme?)
Merkkijonon suffiksit ( päätteet )
Suffiksi ja suffiksin indeksi (~alkamispaikka alkup. tekstissä)
Suffiksit (ja indeksit) leksikografisessa järjestykessä
Mikä tahansa hahmo esiintyy leksikografisessa järjestyksessä peräkkäisissä suffikseissa!... hahmon esiintymiä voi siis etsiä binäärihaulla!
Suffiksitaulukko Havainto: Binäärihaun toteutukseen riittää ainoastaan suffiksit (ts. niiden alkupaikat) järjestävä taulukko, suffiksitaulukko, jonka avulla jokainen binäärihaussa tarvittava suffiksi on helppo rakentaa lukemalla tekstiä taulukon määräämästä alkupaikasta
Permutaatio Joukon S = {0,1,...,n 1} permutaatio on taulukko jonka pituus on n ja jossa jokainen joukon S alkio esiintyy täsmälleen kerran Esimerkki Eräs joukon {0,1,...,10} permutaatio:
Järjestävä permutaatio Olkoon d taulukko, jonka pituus on n ja jonka alkioille on määritelty jokin järjestys Joukon {0,1,, n 1} permutaatio r on taulukon d järjestävä permutaatio jos d(r(1)) d(r(2))... d(r(n 1)) Esimerkki:
Suffiksitaulukko Suffiksitaulukko on merkkijonon suffiksit (leksikografiseen järjestykseen) järjestävä permutaatio
Käänteispermutaatio Olkoon r joukon {0,1,...,n 1} permutaatio Permutaation r käänteispermutaatio on se joukon {0,1,...,n 1} permutaatio u, jolle pätee u(r(j)) = j kaikilla j = 0,1,...,n 1 Esimerkki r u
Järjestysnumeroiva permutaatio Olkoon d taulukko, jonka pituus on n ja jonka alkioille on määritelty jokin järjestys Joukon {0,1,...,n 1} permutaatio u on taulukon d järjestysnumeroiva permutaatio jos permutaation u käänteispermutaatio on taulukon d järjestävä permutaatio Esimerkki
Tehtävät suffixbuild suffiksitaulukon rakentaminen vailla tehokkuusvaateita (puoli riviä Scalaa) sorting radiksilajittelu (radix sort) ja lajitteluun (sorting) liittyviä käsitteitä patternsearch hahmonetsintää tekstiaineistosta annetun suffiksitaulukon avulla; kaksoisbinäärihaku suffiksitaulukkoon suffixfast tehokkaampi suffiksitaulukon rakentaminen prefiksintuplausalgoritmilla (lukemistossa esimerkkejä) Burrows-Wheeler -muunnos (haastetehtävä) tekstiaineiston muuntaminen paremmin pakkautuvaan muotoon (esim. bzip2-pakkausalgoritmin perusta)
Ihmiskunnan kyky käsitellä ja hyödyntää informaatiota rajautuu käytettävissä oleviin algoritmeihin ja nokkeliin tapoihin esittää informaatio tehokkaan laskennan mahdollistamiseksi (Laskenta-alustoilla ja käytettävissä olevilla ohjelmointiabstraktioilla on tietysti myös merkittävä rajaava rooli jos laskenta-alusta on tehoton tai varsinainen ohjelmointityö tehotonta, ei myöskään paljoa saada aikaan)
Moduuli III: Uuden äärellä I 1. Lämmittelykierros Tietokoneen mysteeri 2. Bitit ja data 3. Kombinaatiologiikka 4. Sekventiaalilogiikka 5. Ohjelmoitava kone II Abstraktiot ja analyysi 6. 7. 8. 9. III Funktionaalinen ohjelmointityyli Suorituskykyanalyysi Rekursio Algoritmit ja informaation esitykset Uuden äärellä 10. Rinnakkaisuus ja samanaikaisuus 11. Virtualisointi ja skaalautuvuus 12. Ohjelmoitava vai oppiva kone? (Intel Xeon Phi Knights Landing -lastu, 72 suoritusydintä, 8 miljardia transistoria, 14 nanometrin litografia) (Google Hamina)
Kysyttävää, kommentteja, palautetta liittyen Moduuliin 2?