Tieteen päivät 2003 - akatemiaprofessori Esko Ukkosen esitelmä
 

Mihin algoritmeja tarvitaan?

Algoritmi on tietojenkäsittelytieteen keskeinen käsite. Algoritmeja tarvitaan, jotta tietokoneita osattaisiin ohjelmoida. Kukin algoritmi määrittelee äärellisistä ja täsmällisistä laskenta-askelista muodostuvan kokonaisuuden, joka tuottaa annetuista syöttötiedoista halutun tuloksen. Tietokoneohjelmat ovat abstraktien algoritmien konkreettisia toteutuksia, joita tietokone pystyy suorittamaan erilaisten tehtävien ratkaisemiseksi.

Algoritmien tutkimuksella on kaksi päätavoitetta. Toisaalta kehitetään yhä parempia algoritmeja yhä uusille laskentaongelmille. Tämä työ on usein hyvin sovellushakuista ja käytännöllistä. Toisaalta pyritään ymmärtämään algoritmien yleisiä rajoituksia ja laskentaongelmien sisäistä vaikeutta eli ns. laskennallista vaativuutta.

Tämä vastakkaisista suunnista etenevä tutkimusohjelma luo täsmällisen perustan arvioida algoritmitutkimuksen edistystä. Ongelman sisäisen vaikeuden analysointi antaa arvion siitä kuinka paljon laskentavoimaa ongelman ratkaiseminen vähintään vaatii. Ongelmalle esitetty ratkaisualgoritmi antaa puolestaan erään rajan sille, kuinka suuri laskentavoima riittää ongelmamme ratkaisemiseksi. Kun nämä kaksi arviota kohtaavat, tiedetään että käsillä on tietyssä mielessä paras mahdollinen ongelman ratkaisu.

Algoritmitutkimuksen keskeinen asema tietojenkäsittelytieteessä näkyy siitäkin, että Kansainvälisen matemaattisen unionin myöntämä Nevanlinna-palkinto on tähän mennessä aina jaettu tutkijalle, jonka työ liittyy syvällisellä tavalla algoritmiteoriaan. Arvostettu Nevanlinna-palkinto annetaan merkittävästä tietojenkäsittelytieteen matemaattisiin aspekteihin liittyvästä tutkimustyöstä.

Tarkastelen lyhyesti paria ajankohtaista algoritmitutkimuksen aluetta. Kumpikin on kiinnostava sekä algoritmiteorian että sovellusten kannalta. Toinen liittyy alkulukutestaukseen ja tietosuojaan, ja toinen bioinformatiikkaan, josta on tullut uuden molekyylibiologian kehittyessä voimakkaasti laajeneva monitieteinen tutkimusala. Bioinformatiikan menetelmät ovat laajasti edustettuina myös huippuyksikkömme tutkimusohjelmassa.

Alkulukutestaus helppoa

Eräs algoritmitutkimuksen tuore huomattava tulos on lausuttavissa lyhyesti: alkulukutestaus kuuluu joukkoon P. Tieto tästä saavutuksesta levisi vuoden 2002 kesällä, ja jopa New York Times kertoi siitä elokuussa. Mistä on kyse, kun tällainen teoreettisluonteinen tulos pystyi poikkeuksellisesti ylittämään uutiskynnykset?

Intian teknologisen instituutin tutkijat Manindra Agarwal, Neeraj Kayal ja Nitin Saxena onnistuivat löytämään algoritmin, joka testaa onko mielivaltainen annettu kokonaisluku alkuluku ts. sellainen luku, että jos se yritetään jakaa jollakin sitä pienemmällä kokonaisluvulla, jako ei mene tasan (paitsi jos jakajana on 1). Tämä keksijöidensä nimien perusteella AKS-algoritmiksi nimetty algoritmi on lisäksi sellainen - ja tämä on tuloksen uusi tärkeä ominaisuus - että sen toiminta-aika kasvaa syötteenä saadun luvun pituuden kasvaessa varsin kohtuullisesti, nimittäin kuten eräs pituuden potenssi.

Ollaksemme täsmällisiä, AKS-algoritmi vaatii laskenta-ajan joka on verrannollinen pituuden potenssiin 12, mikä tosin on algoritmin käytännön soveltamisen kannalta kiusallisen korkea asteluku. Teknisemmin ilmaistuna sanotaan, että tällaisen algoritmin aikavaatimus on polynominen syötteen pituuden suhteen. Edellä mainittu joukko P koostuu laskentaongelmista, joilla on tällainen polynomisessa ajassa toimiva ratkaisualgoritmi. Intialaisten tulos lopetti pitkään jatkuneen epätietoisuuden alkulukutestauksen vaikeudesta: se on kuin onkin joukon P jäsen.

Miksi sitten joukon P jäsenyys on arvokasta? Eikö riitä että ongelmalla on ylipäänsä jokin ratkaisualgoritmi, jolloin algoritmi voidaan ohjelmoida tietokoneelle ja sitten pannaan kone vain töihin? Asia ei ole näin yksinkertainen. Jos halutaan, että tietokone saa tulokset valmiiksi säällisessä ajassa, algoritmin pitää olla riittävän nopea.

Alkulukutestaus tarjoaa tästä asiasta valaisevan esimerkin. Välittömästi nimittäin huomataan, että alkulukutestaus onkin aivan helppo ratkaista: annetun luvun n alkulukuominaisuuden testaamiseksi kokeillaan vuoronperään kaikilla lukua n pienemmillä kokonaisluvuilla luvusta 2 alkaen, jakavatko ne tasan luvun n. Tasan jakaminen selviää tunnetulla menetelmällä, ja jos tasan menevä jako löytyy, n ei ole alkuluku, mutta muuten on.

Tämä algoritmi on kuitenkin hitautensa takia täysin käyttökelvoton. Jos luvussa n on vaikkapa 300 numeroa (näin pitkiä kokonaislukuja käytetään nykyaikaisissa tiedonsuojausmenetelmissä), on helppo arvioida että algoritmimme tarvitsema jakolaskujen määrä on suuruudeltaan niin supertähtitieteellinen ettei mikään nykyisten tietokoneiden kyvyillä varustettu laskentalaite (tai rakennettavissa oleva rinnakkaisten laskentalaitteiden kokoelma) pysty saamaan tulosta valmiiksi siedettävässä ajassa, ei vaikka koneiden nopeus tunnetun Mooren lain mukaisesti kasvaisi rajustikin. Tarvitaaan parempi algoritmi.

Luokkaa P voidaan myös luonnehtia niin, että se on 'käytännössä' algoritmeilla ratkeavien ongelmien luokka. Kokemusperäisesti on nimittäin havaittu että polynomisessa ajassa toimiva algoritmi on yleensä käyttökelpoisen nopea. Jos toisaalta aikavaatimus kasvaa nopeammin kuin mikään polynomi, ei algoritmi voi olla yleisesti käyttökelpoinen. Polynomisissa algoritmeissa on myös teoreettista viehätystä: niiden edellytyksenä yleensä on, että ongelman sisäisestä kombinatorisesta rakenteesta on paljastunut vahvaa säännönmukaisuutta, joka avulla ratkaisu löytyy 'suoraan' ilman että on tarpeen turvautua edellä mainittuun hitaaseen yrityksen ja erehdyksen menetelmään.

Alkulukutestauksen saaminen luokkaan P onkin huomattava saavutus, onhan alkulukuominaisuus klassinen matemaattinen käsite jonka tutkimuksella on vuosituhantinen perinne. Kiinalaisilla oli jo noin 10. vuosisadalla ennen ajanlaskumme alkua (virheelliseksi osoittautunut) ehdotus alkulukutestausalgoritmiksi ja (oikein toimiva) ns. Eratosteneen seula on noin vuodelta 240 ennen ajanlaskun alkua.

Lisäksi tunnetaan useita uudempia alkulukutestejä, joiden tehokkuus on jonkun lisäoletuksen (kuten laajennetun Riemannin hypoteesin) varassa tai jotka eivät ole deterministisiä vaan käyttävät apuna lantinheittoa. Tällaiset testit ovat jo laajassa käytössä eikä ole selvää, että uusi deterministinen AKS-algoritmi on käytännössä näitä parempi. Deterministinen algoritmi on kuitenkin ratkaissut ongelman sisäistä vaikeutta koskevan pitkäaikaisen avoimen kysymyksen. Mahdollisesti algoritmia pystytään vielä parantamaan paljonkin, nyt kun pää on saatu auki.

Tekijöihin jako vaikeaa

Alkulukutestaus on klassista lukuteoriaa ja sellaisenaan kiehtova ongelma, jonka ratkaisulla voi olla odottamattomiakin seurauksia. Vielä kiinnostavampi on sen lähisukuinen ongelma, nimittäin annetun luvun jakaminen tekijöihinsä. Nyt tehtävänä on selvittää, mitkä ovat annetun kokonaisluvun tekijät ts. luvut, joiden tulo annettu luku on.

Toistaiseksi ei tunneta nopeaa tekijöihinjakoalgoritmia. Toisaalta käänteinen tehtävä, luvun määrittäminen kun sen tekijät on annettu, on ilmeisen nopeasti laskettavissa. Tekijöihin jako onkin lupaava ehdokas niin sanotuksi yksisuuntaiseksi funktioksi. Tällaisen funktion laskeminen on nopeaa toiseen suuntaan mutta hidasta toiseen.

Yksisuuntaisia funktioita tarvitaan nykyaikaisissa julkisen avaimen salakirjoitukseen perustuvissa tiedonsuojausmenetelmissä. Näiden menetelmien turvallisuus on yksisuuntaisuusoletuksen varassa. Paljon käytetty Rivest-Shamir-Adleman salakirjoitusmenetelmä käyttää tekijöihin jakoa yksisuuntaisena funktiona. Sen turvallisuus perustuu siis oletukseen, että tekijöihinjako on hidasta. Nopean tekijöihinjakoalgoritmin löytyminen murtaisi samalla tämän salakirjoitusmenetelmän.

Tätä kirjoitettaessa ei ole tiedossa mitään siihen viittaavaa, että uuden AKS-alkulukutestin seurauksena myös tekijöihin jakaminen ratkeasi nopeammin. Uusi testi ei näytä antavan viitteitä testattavan luvun tekijöiden arvoista; se ainoastaan sanoo onko tekijoitä olemassa. Tilanne saattaa muuttua, jos ns. kvanttitietokone onnistutaan joskus rakentamaan. Tällainen kone tarjoaisi uudentyyppisiä laskentaoperaatioita, joilla on mahdollista suorittaa tiettyjä tehtäviä oleellisesti nopeammin kuin nykyisillä tietokoneilla. Nevanlinna-palkittu Peter Schorr osoitti jo lähes 10 vuotta sitten, että kvanttitietokoneella mahdollisia operaatioita käyttäen voidaan tekijöihin jakaminen suorittaa nopeasti. Kvanttitietokoneen tultua jouduttaisiinkin salakirjoitusmenetelmät miettimään uudestaan.

Merkkijonoalgoritmit ja bioinformatiikka

Toinen algoritmitutkimuksen ajankohtainen ongelmien lähde ja sovellusalue on molekyylibiologia. Lähtökohtana on DNA-molekyylin sisältämän perinnöllisen informaation koodaustapa. DNA-molekyylin oleellinen sisältö voidaan kuvata neljää erilaista merkkiä sisältävänä sekvenssinä eli yksinkertaisena merkkijonona. Kun tietokoneet käyttävät kaksiarvoisia bittejä, on luonto omaksunut neliarvoiset 'kvatit' DNA:n sisältämän perinnöllisen informaation koodaamiseen.

Useiden organismien DNA:n merkkijonot on jo selvitetty (eli sekvensoitu) ja useita on valmistumisvaiheessa. Näin kertyy valtavasti mielenkiintoista merkkijonomuotoista dataa. Tämän datan käsittely ja analyysi on tehtävä, jossa tietojenkäsittelytieteen piirissä pitkään jatkuneella merkkijonomenetelmien ja muiden kombinatoristen algoritmien tutkimuksella on paljon annettavaa, koska kyseessä on luonteeltaan diskreeteistä symboleista (eikä enemmän tai vähemmän epätarkoista luvuista) koostuva data.

Uuden molekyylibiologisen datan analyysitarpeet ovat synnyttäneet uuden tutkimusalan, bioinformatiikan. Sillä tarkoitetaan biologisen informaation ja biologisten systeemien rakenteen analyysiä ja mallittamista tietojenkäsittelytieteen, tilastotieteen ja matematiikan tarjoamien välineiden avulla. Bioinformatiikasta on tullut bioteknisen tutkimuksen ja teollisuuden eräs keskeinen tekijä, jonka osaajista on maailmanlaajuinen pula.

DNA-palapeli

DNA-jonojen kokoaminen lyhyemmistä palasista on eräs välttämätön laskentatehtävä, joka pitää ratkaista kaikissa genomien sekvensointihankkeissa. Ongelma syntyy siitä, että DNA:n rakennetta osataan lukea laboratoriossa sekvensointilaitteita käyttäen vain suhteellisen lyhyissä palasissa. Näiden palasten pituus on tyypillisesti 150 - 800 merkkiä. Paloista pitäisi koota koko genomia esittävä oikeassa järjestyksessä oleva yhtenäinen merkkijono, jonka pituus on kenties miljoonia tai miljardeja merkkejä.

Palojen oikea sijainti ja kulkusuunta lopullisessa jonossa ei ole etukäteen tarkalleen tiedossa vaan ne voivat olla enemmän tai vähemmän 'haulikolla ammuttuja'. Lisäksi paloissa voi olla pieni määrä eri syistä johtuvia virheitä (puuttuvia, muuttuneita tai lisättyjä merkkejä).

DNA-jonon palasista muodostuu tällä tavoin varsin ainutlaationen, valtaisa palapeli. Esimerkiksi ihmisen genomin kokoamista varten näitä paloja on tuotettu lähes 30 miljoonaa ja palapelin lopputuloksena pitäisi muodostua noin 3 miljardia merkkiä pitkä jono. Palapelin ratkaiseminen on hieno algoritmitutkimuksen ongelma, joka on algoritmiteoreettisesti haastava ja jolla on relevanttia käyttöä.

Ratkaisu lähtee liikkeelle siitä, että joidenkin palasten tiedetään olevan osittain päällekkäin alkuperäisessä jonossa. Sekvensointi on tätä varten tarkoituksellisesti tehty niin, että palaset peittävät saman alueen moneen kertaan. Silloin palasten alkuperäisestä järjestyksestä saadaan vihiä etsimällä pareja, joilla on samanlainen alku- ja loppuosa ja jotka näinollen voisivat olla alkuperäisessä jonossa osittain päällekkäin.

Näin muodostuu palaparien keskinäistä järjestystä koskevia paikallisia ehdotuksia. Näiden perusteella voidaan seuraavaksi muodostaa ehdotuksia yhä laajempien palajoukkojen keskinäiseksi asetelmaksi. Tehtävää vaikeuttaa se, että usein on tarjolla useita erilaisia lupaavia asetelmavaihtoehtoja. Tämä voi johtua siitä, että paloja on sekvensoitu liian vähän tai paloissa on virheitä. Suurin vaikeus on kuitenkin se, että DNA-jonot voivat sisältää useaan kertaan toistuvia pitkiä jaksoja, mikä voi sotkea palapelin sallimalla useita ratkaisuja.

Kuvattu palapeli johtaa useisiin algoritmisiin osatehtäviin. Tarvitaan esimerkiksi merkkijonomenetelmiä palaparien likimääräisten päällekkäisyyksien hakemiseen ja erilaisia verkkoteorian algoritmeja palapelin kokonaisratkaisun muodostamiseen. Jos ratkaisu muotoillaan kombinatoriseksi optimointiprobleemaksi, se osoittautuu tunnetun kauppamatkustajan ongelman sukulaiseksi ja on luonteeltaan ns. NP-kova ongelma. Tämän ongelmaluokan tarkka ratkaiseminen on kaikilla tunnetuilla menetelmillä toivottaman hidasta, joten erilaiset likimääräisratkaisut ovat tarpeen. Jonojen toisteisuus vaatii vielä erikseen räätälöityjä menetelmiä, jotta lopputulos olisi biologisesti mahdollisimman tarkka.

Kaikki palapelin vaiheet osataan toteuttaa tehokkailla algoritmeilla, mikä datan suuresta koosta johtuen onkin välttämätöntä. Silti isot genomihankkeet tarvitsevat varsin järeän tietokonepatterin merkkijonojensa hallintaa ja analyysiä varten. Käsityökin on edelleen välttämätöntä ratkaisun viimeistelyvaiheessa.

DNA-jonojen tulkinta

DNA-jonojen kokoaminen on tietenkin vasta lähtölaukaus jonojen sisällön analysoinnille. Koottukin jono on vasta dataa joka odottaa tulkitsijaansa. Esimerkiksi varsinaisten geenien paikallistaminen DNA-jonosta laboratoriossa on työläs tehtävä, jota voidaan auttaa laatimalla tietokone-ennusteita geenien paikoista. Tämä on luonteeltaan merkkijonojen luokitteluongelma, joka on onnistuttu ratkaisemaan kohtuullisen hyvin. Uudet arviot eri organismien geenien määristä perustuvat tällaisiin ennusteisiin.

On myös havaittu että samankaltaisten jonojen biologinen merkitys on usein sama. Näin syntyy tarve verrata merkkijonoja ja löytää samankaltaisia jonoja tai jonojen alueita (ns. homologioita) tai jonoissa esiintyviä yhteisiä merkkihahmoja. Tähän tarkoitukseen on kehitetty laaja joukko merkkijonojen etäisyysmittoja ja niihin perustuvia algoritmeja ja tietokoneohjelmia, joilla verrataan jonoja toisiinsa ja etsitään annetun jonon sukulaisjonot erilaisista DNA-jonojen tietokannoista.

Tällaiset merkkijonojen vertailu- ja hakuohjelmat ovat laajassa päivittäisessä käytössä lähes kaikessa molekyylibiologisessa tutkimuksessa, ja biologeista on tullut Suomen supertietokoneiden suurin käyttäjäryhmä. Jälleen algoritmien tehokkuus on tärkeää, koska laajamittaisten sekvensointihankkeiden ansiosta tietokantojen koko kasvaa räjähdysmäisesti.

Kunkin organismin DNA voidaan ymmärtää eräänlaiseksi ohjelmaksi, jonka ohjaamana organismi kasvaa ja elää. On valtava haaste selvittää, miten tämä ohjelma toimii. Työ etenee tietenkin vähittäin. Koko genomin toiminnasta järjestelmällistä tietoa antavien mittausmenetelmien kehittäminen ja systemaattisten mittausten suorittaminen 'systeemibiologian' hengessä on tässä avainasemassa. Eräs tällainen uusi mittausmenetelmä on ns. DNA-siru. Sillä voidaan samanaikaisesti mitata organismin kaikkien - mahdollisesti kymmenien tuhansien - geenien aktiivisuutta eri olosuhteissa.

Näin saadaan tietoa DNA-ohjelman toiminnan sisäisistä tiloista, minkä perusteella pyritään muodostamaan esimerkiksi geenien välisiä säätelysuhteita kuvaavia verkostorakenteita tai jopa kokonaisen solun toimintaa kuvaavia tietokonemalleja. Tällaisten säätelyverkkojen ja mallien laskeminen mittausdatan perusteella on jälleen algoritmin kehittäjälle huomattavan kova haaste. Sen ratkaisemiseksi on intensiivinen tutkimus käynnissä eri puolilla maailmaa.

Kirjallisuutta

M. Agrawal, N. Kayal ja N. Saxena (2002): PRIMES is in P. Indian Institute of Technology, Kanpur, India, August 6 2002, (www.cse.iitk.ac.in/users/manindra/index.html).

A. Brazma, I. Jonassen, J. Vilo ja E. Ukkonen (1998): Predicting gene regulatory elements in silico on a genomic scale. Genome Research 8, 1202-1215.

D. Gusfield (1997): Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology. Cambridge University Press.

E. W. Myers et al. (2000): A whole-genome assembly of Drosophila. Science 287, 2196-2204.

Ylös