Algoritmitutkimus: helppoja, vaikeita ja mahdottomia ongelmia

Samankaltaiset tiedostot
Algoritmit 1. Luento 1 Ti Timo Männikkö

Laskennan teoria

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Laskennan teoria

Myös opettajaksi aikova voi suorittaa LuK-tutkinnon, mutta sillä ei saa opettajan kelpoisuutta.

Computing Curricula raportin vertailu kolmeen suomalaiseen koulutusohjelmaan

Algoritmit 1. Luento 10 Ke Timo Männikkö

Turingin koneen laajennuksia

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Laskennan vaativuus ja NP-täydelliset ongelmat

Tietorakenteet ja algoritmit - syksy

Tutkimusmenetelmät-kurssi, s-2004

Algoritmit 1. Luento 9 Ti Timo Männikkö

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Parinmuodostuksesta tietojenkäsittelytieteen silmin. Petteri Kaski Tietojenkäsittelytieteen laitos Aalto-yliopisto

Tarvitseeko informaatioteknologia matematiikkaa?

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Tilanne sekä MS-A0003/4* Matriisilaskenta 5 op

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Johdatus verkkoteoriaan 4. luento

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Opetusperiodi:I, suunnattu hakukohteille:

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Ohjelmien automaattisen verifioinnin reunamailla

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

Algoritmit 1. Luento 10 Ke Timo Männikkö

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

Opetusperiodi:I, suunnattu hakukohteille: Teknillinen fysiikka ja matematiikka

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Datatähti 2019 loppu

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Tietojenkäsittelytieteen tutkintovaatimukset

Algoritmit 1. Luento 5 Ti Timo Männikkö

Relevanttien sivujen etsintä verkosta: satunnaiskulut verkossa Linkkikeskukset ja auktoriteetit (hubs and authorities) -algoritmi

Tarkennamme geneeristä painamiskorotusalgoritmia

Lisää pysähtymisaiheisia ongelmia

FUNKTIONAALIANALYYSIN PERUSKURSSI Johdanto

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Datatähti 2000: alkukilpailun ohjelmointitehtävä

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

Opettajatuutorointi-kurssin syksyn 2006 kyselyjen tulokset

Esimerkkejä vaativuusluokista

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Algoritmi on periaatteellisella tasolla seuraava:

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

3SAT-ongelman NP-täydellisyys [HMU ]

A TIETORAKENTEET JA ALGORITMIT

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Muita vaativuusluokkia

MS-A0402 Diskreetin matematiikan perusteet

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Tietotekniikan valintakoe

Ohjelmoinnin perusteet Y Python

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

= k 0 NTIME(n k + k) Siis polynomisessa ajassa epädeterministisellä Turingin koneella tunnistettavien kielten joukko

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

4.3. Matemaattinen induktio

Ohjelmoinnin perusteet Y Python

Lakkautetut vastavat opintojaksot: Mat Matematiikan peruskurssi P2-IV (5 op) Mat Sovellettu todennäköisyyslaskenta B (5 op)

TIETOTEKNIIKKA Koodi Vanha opintojakso op ov Vastuuhenkilö LV vastaavat opinnot tai korvaava suoritustapa TTE.

Tärkeää huomioitavaa:

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

Verkon värittämistä hajautetuilla algoritmeilla

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Algoritmit 2. Luento 4 To Timo Männikkö

Rekursiiviset palautukset [HMU 9.3.1]

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Algoritmit 1. Luento 7 Ti Timo Männikkö

Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle.

Abstraktiot ja analyysi algoritmit ja informaation esitykset

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Opintosuunnitelma. Suunta: Tietoliikenneohjelmistot ja -sovellukset Pääaine: Tietoliikenneohjelmistot Sivuaine: Yritysturvallisuus

Algoritmit 2. Luento 13 Ti Timo Männikkö

keskenään isomorfiset? (Perustele!) Ratkaisu. Ovat. Tämän näkee indeksoimalla kärjet kuvan osoittamalla tavalla: a 1 b 3 a 5

1 Kannat ja kannanvaihto

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Diskreetit rakenteet

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

Algoritmit 1. Luento 13 Ma Timo Männikkö

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Transkriptio:

Algoritmitutkimus: helppoja, vaikeita ja mahdottomia ongelmia Jyrki Kivinen Tietojenkäsittelytieteen esittely 15.9.2004

Algoritmi on täsmällisesti esitetty jono toimenpiteitä, joilla syötteestä saadaan haluttu tuloste. täsmällinen tarkoittaa suunnilleen samaa kuin matematiikassa syöte ja tuloste ovat yleensä symbolisessa muodossa esitettyä dataa (kirjainjonoja, lukuja,... ) Esim. kertolaskuongelma syöte: kaksi luonnollista lukua 34986921 ja 7729527 tuloste: syötelukujen tulo 270432350516367 ( = 34986921 7729527) algoritmi: allekkain kertolasku Käytännössä usein algoritmi on periaateratkaisu jonka perusteella kirjoitetaan tietokoneohjelma.

Esimerkkiongelma: hahmonsovitus Syötteenä teksti (pitkä kirjainjono, esim. muuttolaatikkolasti) ja hahmo (lyhyempi kirjainjono, esim. tola) Löydettävä hahmon esiintymäkohdat tekstissä jos on (esim. muuttolaatikkolasti. Perusalgoritmi on melko ilmeinen (kokeillaan systemaattisesti joka paikassa, sopiiko). Perusalgoritmi on liian hidas hyvin pitkillä teksteillä ja hahmoilla. Entä jos sallitaan pienet virheet? Esim. muuttolaatikkolasti Entä jos etsitään useita hahmoja yhtaikaa?

Usein käytettyjä algoritmeja reititysalgoritmit tietoliikennepakettien ohjaamiseen tietoverkoissa tiedonhakualgoritmit tietokantajärjestelmissä salakirjoitusalgoritmit geometriset algoritmit käyttöliittymissä ja peleissä numeeriset algoritmit esim. differentiaaliyhtälöiden ratkaisemiseen ohjelmointikielten kääntäjät

Mitä tarvitaan algoritmin lisäksi syötteen kerääminen, tulosteen hyväksikäyttö (tietokannat, informaatiojärjestelmät, tietokoneverkot) algoritmin toteutus tietokoneohjelmana (laitteisto, käyttöjärjestelmä, ohjelmointikieli) ohjelman sijoittaminen osaksi suurempaa kokonaisuutta (ohjelmistotuotanto) vuorovaikutus ihmisten kanssa (käyttöliittymä) ym.

Algoritmitutkimuksen peruskysymyksiä Miten annetulle ongelmalle löydetään algoritmi? Toimiiko algoritmi aina oikein? Onko algoritmi tehokas (nopea, vie vähän muistia,... )? Onko ongelmia, joille ei ole olemassa tehokasta/minkäänlaista ratkaisualgoritmia? Jos on, niin mitä niille tehdään?

Käytännössä tärkeitä lisäkysymyksiä Miten algoritmi toteutetaan tietyllä ohjelmointikielellä? Miten yksittäisen algoritmin tehokkuus vaikuttaa koko järjestelmän tehokkuuteen? Miten algoritmi (oik. sen toteuttava tietokoneohjelma) toimii tietyssä ympäristössä (laitteet, käyttöjärjestelmä,... )? Miten algoritmi toimii niillä syötteillä joista varsinaisesti ollaan kiinnostuneita? Ja ennen kaikkea, mikä oikeastaan on se ongelma joka halutaan ratkaista?

Toisaalta... Computational problems are not only things that have to be solved, they are also objects that can be worth studying. Christos Papadimitriou

Helppo ongelma: puhelinluettelo Puhelinluettelossa on nimiä ja niihin liittyviä puhelinnumeroita. Autio 44602 Helin 44604 Karhu 44124 Lahti 44247 Lokki 44245 Nurmi 44250 Palin 44449 Rinne 44478 Halutaan löytää numeroja nimen perusteella lisätä ja poistaa (nimi, numero) -pareja (Yleisemmin tietysti (haku)avain voi olla nimen sijaan tilinumero, matkapuhelinnumero, atk-laitteen looginen nimi jne. ja siihen liittyvä tieto tilin saldo, puhelimen sijainti verkossa, laitteen fyysinen osoite jne.)

Perusratkaisu: taulukko aakkosjärjestyksessä Etsintä tehokasta binaarihaulla. Esim. etsitään Karhu. (Merk. nimi1 < nimi2 jos nimi1 on aakkosjärjestyksessä ensin.) Autio 44602 Helin 44604 Karhu 44124 Lahti 44247 Lokki 44245 Nurmi 44250 Palin 44449 Rinne 44478 Autio 44602 Helin 44604 Karhu 44124 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx Karhu 44124 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx Karhu < Lahti Karhu > Helin löytyi

Etsintä on melko nopeaa: tarkastetaan aina jäljellä olevien alkoiden puoliväli aakkosjärjestyksen perusteella jokainen tarkastus eliminoi ainakin puolet jäljelläolevista alkioista ol. taulukossa n alkiota k tarkastuksen jälkeen jäljellä kork. n/2 k alkiota pitää olla n/2 k 1, joten tarkastuksia kork. k log 2 n + 1 jos esim. n = 10 milj. niin k 25. Ongelma: lisäykset ja poistot vaativat taulukon uudelleenorganisointia.

Kehittyneempi ratkaisu: hajautustaulu varataan taulukon kooksi m suunnilleen oletettu alkioiden maksimimäärä laaditaan sopiva hajautusfunktio h joka liittää jokaiseen nimeen x hajautusarvon h(x) { 1,..., m } nimeä x vastaava puhelinnumero talletetaan oletusarvoisesti taulukon riville h(x) valitaan sopiva tapa käsitellä yhteentörmäykset eli tilanteet h(x) = h(y) eri nimille x y Hajautuksen edut: lisäykset ja poistot helppoja etsimiseen kuluva aika (suunnilleen) sama riippumatta alkioiden lukumäärästä n

Johtopäätös: helpoissakin ongelmissa oikeat algoritmit ja tietorakenteet voivat johtaa merkittäviin säästöihin Tämä on tärkeää jos dataa on paljon (esim. verohallinto), vastaukset tarvitaan nopeasti (esim. puhelinkeskus) tai kyselyjä tehdään paljon (esim. osana jotain monimutkaisempaa algoritmia) Huomautus 1: Tämä on klassinen ongelma johon tunnetaan lukuisia ratkaisumenetelmiä. Huomautus 2: Itse algoritmin lisäksi toteutusyksityiskohdat ovat tärkeitä.

Verkko koostuu solmuista ja solmuja yhdistävistä kaarista. Verkko voidaan esittää esim. numeroimalla solmut ja merkkaamalla taulukkoon, minkä solmujen välillä on kaari. 1 2 3 4 5 1 0 1 1 1 0 2 1 0 1 0 1 3 1 1 0 1 0 4 1 0 1 0 1 5 0 1 0 1 0 Verkkoja esiintyy tietenkin tietoliikenteessä, mutta lisäksi ne ovat erittäin yleinen tapa mallintaa tilanteita joissa on olioita ja niiden välisiä suhteita.

Helpohko verkko-ongelma Eulerin kehä on polku joka käyttää tasan kerran jokaista verkon kaarta ja palaa lähtösolmuunsa. Verkko Eräs Eulerin kehä Eulerin kehä on olemassa jos ja vain jos verkko on yhtenäinen ja jokaiseen solmuun liittyy parillinen määrä kaaria (Euler 1736). ( Yhtenäinen tarkoittaa että minkä tahansa kahden solmun välillä on polku, ts. verkko ei koostu useasta erillisestä palasta.) Tämän perusteella Eulerin kehä on myös melko helppo löytää jos sellainen on olemassa.

Vaikea (?) verkko-ongelma Hamiltonin kehä on polku joka käy tasan kerran jokaisessa verkon solmussa ja palaa lähtösolmuunsa. Verkko Eräs Hamiltonin kehä Hamiltonin kehä voidaan esittää luettelemalla solmu siinä järjestyksessä kuin ne esiintyvät polulla, esim. 1, 2, 5, 6, 4, 3. Hamiltonin kehän löytämiseen, tai sellaisen olemassaolon toteamiseen, ei tunneta yhtään tehokasta algoritmia.

Naiivi algoritmi Hamiltonin kehä -ongelmaan Käy läpi kaikki mahdolliset solmujen permutaation (eli järjestykset) Testaa kullakin permutaatiolla, esittääkö se Hamiltonin kehää. Yhden permutaation testaaminen on helppoa: katsotaan onko aina kahden perättäisen solmun välillä kaari. Ongelma on, että pahimmassa tapauksessa joudutaan testaamaan kaikki permutaatiot yksitellen läpi. n solmua n! permutaatiota liian paljon Esim. 50! 3 10 64.

Hamiltonin kehä -ongelma on NP-täydellinen Käytännössä NP-täydellisyys suunnilleen tarkoittaa, että ei tunneta algoritmia joka toimisi nopeasti hyvin suurilla ongelmilla, jos tällainen algoritmi löytyisi, suuri joukko muitakin samanlaisia ongelmia ratkeaisi sitä käyttämällä ja enemmistö alan asiantuntijoista veikkaa ettei tällaista algoritmia ole olemassakaan, mutta algoritmien kehittäminen keskisuurille syötteille on haastava ja käytännössä tärkeä ongelma. Huomaa että NP-täydellisyys on itse ongelman ominaisuus, ei minkään yksittäisen algoritmin. (Tarkemmin ottaen se on täsmällinen matemaattinen termi, jonka määritteleminen tässä olisi turhan hankalaa.)

Mahdoton ongelma Syöte: ohjelman lähdekoodi (esim. C-kielellä) Kysymys: Tulostaako ohjelma mitään, kun (se käännetään ja) sille annetaan syötteenä sen oma lähdekoodi? Tämä ongelma on ratkeamaton, toisin sanoen sille ei ole olemassa ratkaisualgoritmia. Tässä oletetaan että ohjelma ei kaadu muistin täyttymiseen tms. Ohjelmointikielen valinnalla ei ole väliä; teoreettisissa tarkasteluissa käytetään esim. Turingin koneita Vaikea tapaus on tietysti se, että ohjelma ei tulosta mitään ja ajautuu ikuiseen silmukkaan, mitä ei osata varmasti todeta. Tästä ongelman nimi pysähtymisongelma.

Missä nyt mennään? Perinteinen algoritmitutkimus liikkuu suurelta osin helpon ja vaikean välimaastossa. Modernissa tietojenkäsittelyssä (esim. tietokoneverkoissa, tekoälyssä) esiintyy myös paljon algoritmisia ongelmia, jotka eivät sovi tälle skaalalle, tai perinteiseen kaavaan syöte algoritmi tuloste Matematiikassa tutkitaan paljon mahdottomia (ja sitä vaikeampia) ongelmia, jotka ovat tärkeitä logiikan tutkimukselle. (Tämän takia algoritmin käsite ja ratkeamattomuus tunnettiin ennen elektronisten laskulaitteiden keksimistä.)

Viimeaikaisia algoritmiteorian läpimurtoja todistusten satunnainen tarkistaminen kvanttilaskenta julkisen avaimen salakirjoitus alkulukutestaus Mielenkiintoisia sovellusalueita bioinformatiikka vaikea tieteellinen laskenta

Tutkimuksen luonteesta perustutkimuksessa ryhmät usein pieniä (2 5 henkeä) paljon kansainvälistä yhteistyötä joka perustuu henkilökohtaisiin suhteisiin algoritmianalyysi vaatii monipuolisia matemaattisia taitoja algoritmien testaaminen, matematiikkaohjelmistot yms. varsinaisessa soveltavassa tutkimuksessa isompi ryhmä, jossa sovellusalueen spesialisteja ja ohjelmoijia

Algoritmitutkimusta laitoksellamme C-BRAHMS (Content-Based Retrieval and Analysis of Harmony and other Music Structures): Kjell Lemström, (Veli Mäkinen); City University, Lontoo NAPS (Networking and Architecture for Proactive Systems): Patrik Floréen, (Pekka Orponen); HIIT, TKK SYSFYS (Experimental and computational analysis of physiological regulation at transcriptome, proteome and metabolome level): Esko Ukkonen, (Juho Rousu); VTT merkkijonomenetelmät: Juha Kärkkäinen, Esko Ukkonen, (Veli Mäkinen) koneoppiminen: Jyrki Kivinen, (Tapio Elomaa, Juho Rousu); UC Santa Cruz, Australian National University; PASCAL... plus jatko-opiskelijat Muutkin hankkeet (esim. CoSCo, FDK) sisältävät kiinnostavia algoritmisia komponentteja.

Algoritmiopetusta laitoksellamme Algoritmien peruskursseja: Tietorakenteet, Algoritmien suunnittelu ja analyysi Matemaattisia perusteita: Ohjelmoinnin ja laskennan perusmallit, Laskennan teoria Erikoiskursseja: Merkkijonomenetelmät, Tietokonegrafiikka, Geometriset menetelmät, Kombinatorinen optimointi, Koneoppiminen Hyödyllisiä sivuaineita matematiikan perusopinnot lisää matematiikkaa: todennäköisyyslaskenta, logiikka, lineaarialgebra, differentiaali- ja integraalilaskenta, Diskreetti matematiikka II Fysiikan matemaattiset menetelmät? sovelluspuolen sivuaineet (esim. biologia)?