University of Joensuu - Computer Science

Tietojenkäsittelytieteen teoreettiset perusteet (3 ov)

Theoretical Foundations of Computer Science

Ajankohtaista

  • Kurssin palautetilaisuus pe 20.5. klo 12.00-12.30 salissa B179. Voit tutustua suorituksesi arviointiin ja keskustella opettajien kanssa. Luvassa erikoiskunniaa hyvin suoriutuneille. Myös parhaat lunttilaput palkitaan! Tervetuloa!
  • Kurssin lopputulokset
  • 2. välikokeen tulokset
  • Toinen välikoe Mallivastaukset. Tarkennuksia kokeen arvosteluun
  • Puuttuvat kaakelit Näillä kolmella kaakelityypillä ei voi kaakeloida mitään lattiaa siten, että samanväriset sivut olisivat aina vierekkäin. (Materiaalissa oli väärä kuva ko. kohdassa)
  • 2. välikoe to 21.4. 12-15 d106. Koelaue kattaa harjoituksissa 6-10 käsitellyn asian. Säännöllisistä kielistä ei tule enää erityisiä kysymyksiä, mutta sinun tulee silti kyetä määrittelemään ongelman vaikeus, mikä merkitsee myös säännöllisten kielten tunnistamista. Kokeeseen saat laatia henkilökohtaiset "lunttilaput", joihin kirjoitat haluamasi muistiinpanot. Palauta ne kokeen yhteydessä - saat ne jälkikäteen takaisin, jos haluat.
  • kurssin arvostelukriteerit
  • Välikokeet on tarkastettu! Tulokset löytyvät ohessa. Saat tutustua mallivastauksiin, arvostelukriteereihin ja oman paperisi arvosteluun laskuharjoituksissa tai luennon jälkeen viikolla 11. Arvostelukriteerit
  • Esimerkki kontekstittomasta kieliopista (html-listarakenteet)
  • lisäsarjakuvia monisteeseen: sar1, sar2, sar3,
  • Ilmoittautuminen Anna harjoitusryhmän numero sekä toiseen kenttään opiskelijanumerosi, nimesi ja sähköposti-osoitteesi.
  • Teethän lähtötasotestin! Se antaa sekä itsellesi että luennoijallesi hyvää palautetta, mitä kannattaa erityisesti kerrata. Jotta testistä olisi hyötyä, se tulee tehdä itsenäisesti. Tuloksella ei ole mitään vaikutusta arvosanaasi. Sen sijaan jokainen testin omalla nimellään tehnyt saa 2 laskuharjoituspistettä! Yhteenveto vastauksista

    Luennot 24.1.- 14.4.

    ma 14-16 B181 ja to 12-14 TD106
    to 14-16 TD106 extraluento suomeksi
    (Välikoeviikolla ja pääsiäisenä ei ole luentoja.)

    Luennoija: Wilhelmiina Hämäläinen (ilman skandeja etunimi.sukunimi@cs.joensuu.fi)
    Helmikuun ajan: Maxim Mozgovoy (englanniksi) ja Jussi Nuutinen (suomeksi).

    Laskuharjoitukset 31.1.-22.4.

    ma 12-14 B180 Jussi Nuutinen
    ke 8-10 B180 English group (Jussi Nuutinen)
    ke 10-12 TB180 (Marko Tuononen)


    1. välikoe to 3.3. 12-15, 2. välikoe to 21.4. 12-15 d106

    Esitiedot

    Kurssilla tarvitaan matematiikan ja ohjelmoinnin perustaitoja. Matematiikan taitojesi riittävyydestä saat hyvän käsityksen suorittamalla alkutestin. Mikäli et ole suorittanut matematiikan opintoja, on tänä keväänä hyvä tilaisuus osallistua laitoksen omalle Diskreetit rakenteet -kurssille! Voit myös itse opiskellen kerrata tarvittavaa matematiikkaa oheisesta materiaalista (sama ps:nä).

    Ohjelmointia tarvitaan vähemmän. Harjoituksissa on pieniä ohjelmointitehtäviä ja tietysti sinun tulee ymmärtää materiaalin esimerkkitoteutukset.

    Kuvaus

    TEPE-kurssin aihepiirinä on laskennanteoria, joka jaetaan perinteisesti kahteen osaan:
    1. Laskettavuuden teoria (theory of computability), jossa tutkitaan ongelmien ratkeavuutta ja arvioidaan niiden vaikeutta ennen ratkaisualgoritmin laatimista.
    2. Laskennan vaativuusteoria (Theory of computational complexity), jossa arvioidaan ongelman laskennallista tila- ja aikavaativuutta.

    Tällä kurssilla käsittelemme vain laskettavuuden teoriaa, mutta kurssin päätteeksi voit tehdä vapaaehtoisen harjoitustyön laskennan vaativuusteoriasta.



    Kurssilla saat hyvät eväät arvioida mitä tahansa ongelmia:

    1. Onko ongelma luonteeltaan laskennallinen? Ts. voisiko sen edes periaatteessa ratkaista tietokoneella?
    2. Jos ongelma on laskennallinen, niin onko se ratkeava? Ts. voiko sille laatia ratkaisuohjelman, joka pysähtyy aina kaikilla syötteillä?
    3. Jos ongelma on ratkeava, niin kuinka vaikea se on? Ennen ratkaisualgoritmin laatimista voimme jo erottaa helpot ja nopeasti ratkaistavat ongelmat työläämmistä. Tällä kurssilla jaamme ongelmat Chomskyn hierakian mukaan kolmeen vaikeusluokkaan, joita vastaavat säännölliset kielet, kontekstittomat kielet ja rajoittamattomat kielet.
    4. Jos ongelma on ratkeava ja sen vaikeus tunnetaan, niin miten se kannattaa ratkaista? Tämä kysymys menee osittain kurssin aihepiirin ulkopuolelle, mutta tulet oppimaan näppäriä ja tehokkaita menetelmiä tietyn tyyppisiin ongelmiin.

    Ekskursioina kurssi esittelee myös joukon kiinnostavia käytännön sovelluksia formaaleille työkaluille, joihin tutustutaan (mm. hahmontunnistus, kääntäjät, kasvikieliopit). Tietojenkäsittelytieteen teoria antaa myös hyvät eväät filosofisille pohdinnoille tietokoneiden luomasta maailmasta sekä ihmisen ja koneen kilpajuoksusta.

    Kurssin suoritus

    Tänä vuonna kurssia ei voi suorittaa ongelmalähtöisesti, vaikkakin otamme ongelmia luennoilla mahdollisuuksien mukaan. Uutuutena olemme lisänneet harjoituksiin käytännöllisiä ohjelmointitehtäviä. Kurssin suoritus koostuu harjoituksista, pienistä ohjelmointitehtävistä sekä kahdesta välikokeesta. Harjoituksista saa tavallista enemmän pisteitä, joten niihin kannattaa panostaa. Toinen vaihtoehto on suorittaa kurssi loppukokeella. Pisteet muodostuvat seuraavasti: Kukin ohjelmointitehtävä on 2-3 laskuharjoituspistettä ja jokaisen tulee tehdä ainakin 3 tehtävää 7:stä. Ylimääräisistä ohjelmointitehtävistä saat aitoja lisäpisteitä! Ohjelmien koodi sekä esimerkkitulosteet palautetaan harjoitusten pitäjälle.

    Alustava ohjelma

    Tarkka ohjelma. (Päivitetään tarpeen mukaan.)
    1. Johdanto
      • Kurssin esittely
      • Ongelmien mallintaminen ja ratkeavuus, formaalit kielet ja niiden hierarkia
      • Äärelliset automaatit ja säännölliset kielet
        • Säännölliset lausekkeet ja kielet
        • Deterministiset äärelliset automaatit
        • Äärellisen automaatin minimointi
        • Epädeterministinen äärellinen automaatti, determinisointi
        • Automaatin muunnos säännölliseksi lausekkeeksi ja säännöllisen lausekkeen muunnos automaatiksi
        • Säännöllisten kielten rajoituksia (Pumppauslemma)
        • Säännöllisten kielten sovellukset?
      • Kieliopit ja jäsentäminen
        • Kontekstittomat kieliopit ja kielet: perusidea
        • kontekstittomat kielet <-> automaatit (lineaarisen kieliopin muunnos automaatiksi ja päinvastoin)
        • *Ekskursio: kasvikieliopit?
        • Pinoautomaatit
        • Rekursiivisesti etenevä jäsentäminen (LL(1)-kieliopit)
        • *Exkursio: Attribuuttikieliopit?
        • CYK-agoritmi
        • Chomskyn normaalimuoto
        • Kontekstittomien kielten sovellukset ja rajoitukset
      • Turingin koneet ja rajoittamattomat kielet
        • Turingin koneet: perusidea
        • Laajennoksia: moniuraiset ja moninauhaiset koneet
        • epädeterministiset <-> deterministiset koneet
        • Rajoittamattomat ja kontekstiset kieliopit
      • Ratkeavuus ja ratkeamattomuus
        • Rekursiiviset ja rekursiivisesti numeroituvat kielet sekä ratkeamattomat ongelmat
        • koneiden itsetutkiskelu, universaalikoneet ja -kielet
        • *Ekskursio: mekaanisen laskettavuuden <-> inhimillisen päättelyn rajat?
        • Ongelmien vertailu ja palautus
      • Laskennan vaativuusteoriaa Vapaaehtoinen projektityö 1 ov
        • Turingin koneiden aika- ja tilavaativuus
        • NP-täydellisyys

    Kirjallisuus

    Luentomoniste Hämäläinen, W.: Hauskaa ja havainnollista laskennanteoriaa. Rekursiosta. Tai Orponen, Pekka: Automaatit ja kieliopit. Tilauslista täytetään 1. luennolla!

    Kurssilla ei ole yhtä virallista kurssikirjaa, mutta sen sijaan joukko suositeltavaa kirjallisuutta (ks. alla). Luentomoniste kattaa koko kurssin sisällön, mutta saattaa olla paikoin tiivis, joten kannattaa ehdottomasti käyttää tukena kirjoja. Luentomoniste sopii hyvin myös omien kattavien muistiinpanojesi rungoksi.

    Muuta materiaalia