TKTL / Merkkijonomenetelmät
 Yliopiston etusivulle Suomeksi Inte på svenska No english version available
Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

Ohjelmointiprojekti (merkkijonomenetelmät, kevät 2005)

Projektin (alustava) kuvaus

Projektissa toteutetaan jokin luentojen aiheisiin liittyvä algoritmi. Toteutuksen toimivuutta ja tehokkuutta testataan sopivalla aineistolla. Toteutuskielenä esim. C, C++ tai Java. Kurssin päätteeksi järjestetään posteritilaisuus, johon kukin opiskelija(ryhmä) laatii algoritmin toimintaa ja kokeellisia tuloksia esittelevän posterin. Toteutetun algoritmin lähdekoodi sekä ohjeet sen kääntämiseen tulee toimittaa harjoitustyön ohjaajalle viikkoa ennen posteritilaisuutta. Projektin voi tehdä kahden hengen ryhmissä.

Aikataulu

  • Luentojen ja laskuharjoitusten yhteydessä voi tulla varaamaan aiheen. Katso alla oleva aihelistaus.
  • Kurssin viimeisissä laskuharjoituksissa osa ajasta on varattu harjoitustyön ohjaukseen.
  • Projektin suunnitelma palautetaan 4.4. mennessä.
  • Toteutettu algoritmi on palautettava 26.4. mennessä.
  • Posteriesittely järjestetään tiistaina 3.5. klo 10-13 salissa Z.
  • Postereiden ohjausta järjestetään viikolla 17.

Arvostelu

Projektista voi saada 20p. Arvostelussa huomioidaan toteutuksen, testauksen ja posteriesityksen taso, sekä aiheen vaikeus.

Suunnitelma

Projektista palautetaan 4.4. mennessä vapaamuotoinen suunnitelma, josta selviää ainakin
  • Tehtävän kuvaus, esim. mitkä algoritmit toteutetaan ja miten niitä vertaillaan.
  • Toteutuskieli ja -ympäristö.
  • Työnjako ryhmässä.
Suunnitelma voi olla kirjoitettu esimerkiksi ranskalaisilla viivoilla. Suunnitelman esitystapa ei vaikuta arvosteluun.

Posteri

Kukin ryhmä tekee posterin (kokoa A1), joka sisältää mm.
  • Algoritmin kuvauksen: Minkä ongelman algoritmi ratkaisee, algoritmin perusidea (kuvin havainnollistettuna), mitä muita algoritmeja samaan ongelmaan tunnetaan.
  • Toteutuksen kuvauksen: Mitä muutoksia alkuperäiseen (perustelu), kuten tietorakenneratkaisut, heuristiikat.
  • Suoritusympäristön kuvauksen, kuvauksen kokeissa käytetystä datasta, ym.
  • Kokeelliset tulokset esitettynä taulukoin, diagrammein, ym.
  • Kokeellisissa tuloksissa mm. vertailut muihin menetelmiin (esim. toisen ryhmän eri algoritmin toteutukseen samaan ongelmaan), sekä oman menetelmän tarkempi vertailu eri parametrien arvoilla (syötteen pituus, aakkoston koko, sallittujen virheiden määrä, ym.)
  • Tulosten tulkinta (millä syötteellä algoritmi toimii hyvin/huonosti)
  • Esitä asiat siinä muodossa, että myös kurssia käymätön voi asian ymmärtää.
Teknisiä ohjeita:
  • Posteritelineeseen mahtuu noin 3 x 3 A4-kokoista arkkia leveyssuunnassa (plus otsikko).
  • A4-palasista koostuvan posterin voi tehdä esim. Windowsin Powerpointilla tai Linuxissa OpenOfficen vastaavalla työkalulla tai LaTeXilla (google: latex poster).
  • Värejä kannattaa käyttää rohkeasti.
  • Posteritelineet ja tykötarpeet posterin pystytykseen tulevat talon puolesta.

Aiheet

  • Uusi nopea variantti Boyer-Moore algoritmista: Artikkelissa [CF03] on kuvattu ns. Forward-Fast-Search-algoritmi, joka kokeiden mukaan toimii usein nopeammin kuin aikaisemmat Boyer-Moore-algoritmin variaatiot (joita on useita). Tehtävänä on toteuttaa tämä algoritmi, ja verrata sen toimintaa esim. Boyer-Moore-Horspool algoritmiin, tai johonkin muuhun helposti toteutettavaan varianttiin.
  • Eliminointimenetelmä: Tehtävänä on toteuttaa luennolla kuvattu eliminointimenetelmä. Siinä tarvittavan witness taulukon W lineaariaikainen muodostusalgoritmi on kuvattu 2. laskuharjoituksen 4. tehtävän mallivastauksessa. Menetelmän nopeutta voi verrata esimerkiksi Knuth-Morris-Pratt-algoritmiin.
  • Aho-Corassic-algoritmi: Tehtävänä on toteuttaa luennolla kuvattu Aho-Corassic-algoritmi sekä jokin/joitakin sen sovelluksia. Esimerkiksi luennolla esitetyt Bird-Baker-algoritmi kaksi-ulotteiseen merkkijononsovitukseen ja/tai hahmon ositukseen perustuva seulontamenetelmä likimääräiseen merkkijononhakuun. Työssä haasteena on tilasiirtymien tehokas toteutus (vaihtoehtoina mm. listat, taulukot, tasapainoiset hakupuut, hajautus, ym.).
  • Kalain algoritmi hahmonsovitukseen jokerimerkeillä: Tehtävänä on toteuttaa artikkelissa [Kal02] kuvattu O(n log m) ajassa toimiva satunnaisalgoritmi hahmonsovitukseen jokerimerkeillä. Toteutusta voi verrata esimerkiksi triviaalialgoritmiin tai shift-or-algoritmin yleistykseen (Laskuharjoitus 3, tehtävä 3).
  • Lävistäjämenetelmä: Tehtävänä on toteuttaa luennoilla kuvattu lävistäjämenetelmä kahden merkkijonon editointietäisyyden laskentaan. Tällä tarkoitetaan tehostettua versiota algoritmista, joka toimii ajassa O(sm) ja tilassa O(s min(s,m)), missä s on vertailtavien jonojen editointietäisyys. Menetelmän nopeutta tulee verrata esimerkiksi O(mn) aikaiseen perusalgoritmiin.
  • Myersin bittirinnakkainen algoritmi: Tehtävänä on toteuttaa luennoilla kuvattu Myersin bittirinnakkainen algoritmi likimääräiseen hahmonsovitukseen, sekä mahdollisesti tämän yleistys tapaukseen jossa hahmon pituus on suurempi kuin tietokoneen sananpituus. Toteutusta tulisi verrata perus-dynaamiseen ohjelmointiin.
  • Binäärihaku loppuosataulukosta: Tehtävänä on toteuttaa luennoilla kuvattu O(m + log n) ajassa toimiva merkkijonojen binäärihaku loppuosataulukolle. Loppuosataulukon voi muodostaa jollakin valmiilla toteutuksella. Toteutusta tulisi verrata yksinkertaisempiin O(m log n) ajassa toimiviin hakualgoritmeihin.
  • RMQ-esiprosessointi: Taulukon T osaväliminimi (range minimum) RM(i,j) on osataulukon T[i..j] pienin alkio. Mikä tahansa taulukko on mahdollista esiprosessoida lineaarisessa ajassa niin, että mikä tahansa osaväliminimi voidaan laskea vakioajassa. Tehtävänä on toteuttaa artikkelin [AGKR02] luvussa 2.2 on kuvattu algoritmi tähän tarkoitukseen.
  • Shift-or-algoritmi superaakkostossa: Artikkelissa [Fre03] on kuvattu shift-or-algoritmin muunnelma tilanteeseen, jossa useampi tekstin merkki on pakattu yhteen supermerkkiin. Tehtävänä on toteuttaa algoritmi ja verrata sitä normaaliin shift-or-algoritmiin.
  • Yksinkertainen seulontamenetelmä Artikkelissa [GL89] on kuvattu yksinkertainen seulontamenetelmä likimääräiseen hakuun. Menetelmä perustuu merkkijakauman ylläpitoon hahmon pituisessa tekstin ikkunassa; likimääräisessä esiintymässä pitää merkkijakaumien täsmätä sopivalla tarkkuudella. Menetelmä on kuvattu k epätäsmäystä -ongelmalle, mutta työssä on tarkoitus muokata se k virhettä -ongelmaan.
  • Loppuosapuun ja LZW-pakatun loppuosataulukon vertailu.
  • Harva dynaaminen ohjelmointi.
  • Geneerinen Boyer-Moore-Horspool.
  • Oma aihe
  • Lähteitä

    [AKGR02]
    S. Alstrup, C. Gavoille, H. Kaplan, T. Rauhe: Nearest common ancestors: a survey and a new distributed algorithm Proc. 14th Symposium on Parallel Algorithms and Architectures (SPAA '02). Sivut 258-264, 2002.
    [CF03]
    D. Cantone ja S. Faro: Forward-Fast-Search: Another Fast Variant of the Boyer-Moore String Matching Algorithm. Teoksessa Proc. Prague Stringology Conference (PSC '03), sivut 10-24, 2003.
    [Kal02]
    A. Kalai: Efficient Pattern-Matching with Don't Cares. Proc. 13th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA '02), sivut 655-656, 2002.
    [Fre03]
    Kimmo Fredriksson: Shift-or string matching with super-alphabets. In Information Processing Letters (IPL), sivut (87:)201-204, 2003.
    [GL89]
    R. Grossi ja F. Luccio: Simple and efficient string matching with k mismatches. In Information Processing Letters (IPL), sivut (33(3)):113-120, 1989.

    Pasi Rastas