Tietojenkäsittelytieteen teoreettiset perusteet (3 ov)
Theoretical Foundations of Computer Science (3 cu)
FAQ
Luennot 20.1.- 1.4. ma, ti 12-14 Louhelasali Wilhelmiina Hämäläinen (whamalai@cs.joensuu.fi)
Laskuharjoitukset
ti 16-18 TD106 Anssi Kautonen
ke 14-16 B180 Roman Bednarik (englanniksi)
to 14-16 B180 Wilhelmiina Hämäläinen, TD106B Anssi Kautonen
Ajankohtaista
Kuvaus
Kurssin keskeisenä sisältönä on ongelmien formaali
mallintaminen ja ratkaiseminen. Formaali mallintaminen voi kuulostaa
tylsältä, mutta se kätkee taakseen hyvin tärkeitä ja kiinnostavia
löytöjä. Ennen kuin ongelmaan voi alkaa suunnitella parasta
mahdollista ratkaisualgoritmia, täytyy tietää, kuinka vaikeasta
ongelmasta on kyse tai onko ongelma ylipäätänsä
ratkaistavissa. Toisaalta itse ratkaisu - sen olemassaolo tai
tehokkuus - on riippumaton käytettävästä ohjelmointikielestä tai
muusta laskennallisesta välineestä ja siksi puhtaan abstrakti ratkaisu
on useimmiten helpommin analysoitavissa. Ekskursioina kurssi esittelee
myös joukon kiinnostavia käytännön sovelluksia formaaleille
työkaluille, joihin tutustutaan. Tietojenkäsittelytieteen teoria antaa
myös hyvät eväät filosofisille pohdinnoille tietokoneiden luomasta
maailmasta sekä ihmisen ja koneen kilpajuoksusta.
Esitiedot
Esitietoina edellytetään Johdatus tietojenkäsittelytieteeseen ja
matematiikan perusopintojakso tai vastaavat valmiudet. Kurssin alussa
kerrataan tarvittavat matemaattiset peruskäsitteet.
Kurssin suoritus
Kurssin voi periaatteessa suorittaa kolmella vaihtoehtoisella tavalla:
- Ongelmalähtöisesti, jolloin suoritus koostuu opintopäiväkirjasta
sekä laskuharjoituksista. Ongelmalähtöisestä menetelmästä tarkemmin alla.
- Itseopiskellen, jolloin suoritus koostuu kahdesta välikokeesta ja
laskuharjoituksista.
- Loppukokeella. Kevään viralliset loppukokeet 16.5. ja 13.6.
Epävirallinen koe 28.2. niille, joiden valmistuminen edellyttää pikaista
tenttiä. Saa osallistua, jos lupaa päästä läpi!
Ongelmalähtöinen vaihtoehto on suositeltavin ja tutkimusten mukaan
myös oppimistulokset ovat sillä tavalla parhaimpia. Mikäli haluat
valita tämän kokeettoman syväoppimismenetelmän, ole valmis
osallistumaan aktiivisesti "luentoihin" ja harjoituksiin sekä
panostamaan opiskeluun myös kotona.
Ongelmalähtöinen oppiminen
Ongelmat
Ongelmalähtöinen oppiminen merkitsee sitä, että
perinteisten luentojen sijasta asioita opitaan ongelmia
ratkomalla. Aina välillä luennoija pitää pieniä opetustuokioita
tarpeen mukaan. Kuten lienet huomannutkin, ei tietoa voi "kaataa
päähän", vaan se on itse opittava. Ongelmalähtöisessä oppimisessa se
kuitenkin tapahtuu melkeinpä varkain ongelmia ratkoessa. Ainoana
ehtona on, että olet ennakkoluuloton ja valmis heittäytymään uusien
ongelmien kimppuun sekä tarpeeksi sinnikäs selättämään ne. Sinun ei
kuitenkaan tarvitse selviytyä yksin vaikeista asioista, vaan ongelmia
pohjustetaan ryhmissä ja itseopiskelun jälkeen tulokset puretaan
samassa ryhmässä. Tämän jälkeen luennoija voi vielä syventää opittua
ja paneutua juuri niihin asioihin, jotka olivat vaikeimpia.
Ongelmalähtöinen oppimisprosessi koostuu seuraavista vaiheista:
- Epäselvien käsitteiden selventäminen
- Ongelman määrittely
- Aivoriihi
- Ilmiötä kuvaavan selitysmallin rakentaminen
- Oppimistavoitteiden määrittely
- Itsenäinen opiskelu
- Opiskelutulosten purkusessio
Ongelmalähtöiseen metodiin tutustutaan ensimmäisellä
luentokerralla. Siksi on tärkeää, että olet paikalla heti
ensimmäisellä luennolla! Toimiva ongelmalähtöinen oppiminen
edellyttää myös aktiivista osallistumista luentoihin (=ongelmien
pohjustus- ja purkutilaisuuksiin).
Ongelmalähtöisesti opiskelevilta ei edellytetä koetta, mutta sekä
luennoijalle että itsellesi on hyvää palautetta, jos silti teet
kokeet. Hyvin mennyt koe voi myös korottaa arvosanaasi! Sen sijaan
jokaisen ongelmiaratkovan tulee palauttaa viikottain palanen
luentopäiväkirjaa, joka sisältää ongelmaraportin sekä pohdintoja niin
opitusta kuin oman oppimisen edistymisestä.
kaikki materiaali tähän saakka
pdf
- Johdanto
- Kurssin esittely (viikko 1)
- Matemaattiset matkaeväät (viikko 1)
luentokalvot0
pdf
- Ongelmien mallintaminen ja ratkeavuus, formaalit kielet ja
niiden hierarkia (viikko 1-2)
luentokalvot1
pdf
- Äärelliset automaatit ja säännölliset kielet
- Säännölliset lausekkeet ja kielet (viikko 2)
luentokalvot2
pdf
- Deterministiset äärelliset automaatit (viikko 2-3)
- Äärellisen automaatin minimointi (viikko 3)
- Epädeterministinen äärellinen automaatti, determinisointi
viikko 3
luentokalvot3
pdf
- Automaatin muunnos säännölliseksi lausekkeeksi ja säännöllisen
lausekkeen muunnos automaatiksi viikko 4
Huom! Ti 11.2. urheilupäivä, ei luentoa.
- Säännöllisten kielten rajoituksia viikko 5
luentokalvot4
pdf
- Kieliopit ja jäsentäminen
- Kontekstittomat kieliopit ja kielet: perusidea viikko 5
- kontekstittomat kielet <-> automaatit (lineaarisen kieliopin
muunnos automaatiksi ja päinvastoin) (viikko 5)
- *Ekskursio: kasvikieliopit (viikko 5)
luentokalvot5
pdf
- Pinoautomaatit (viikko 6)
luentokalvot6
pdf
- Rekursiivisesti etenevä jäsentäminen (viikot 6-7)
luentokalvot7
pdf
- *Attribuuttikieliopit
- CYK-agoritmi (viikko 7)
luentokalvot8
pdf
- Chomskyn normaalimuoto (viikot 7-8)
- Kontekstittomien kielten sovellukset ja rajoitukset (viikko 8)
luentokalvot9
pdf
VIIKKO 8:
TAIDENÄYTTELY ti 11.3 luennolla
Välikoe pe 14.3. klo 12.00-15.00 TD106
- Turingin koneet ja rajoittamattomat kielet
- Turingin koneet: perusidea (viikko 9)
- Laajennoksia: moniuraiset ja moninauhaiset koneet (viikko 9)
- epädeterministiset <-> deterministiset koneet (viikko 9)
luentokalvot10
pdf
- Rajoittamattomat ja kontekstiset kieliopit (viikko 10)
luentokalvot11
pdf
- Ratkeavuus ja ratkeamattomuus
- Rekursiiviset ja rekursiivisesti numeroituvat kielet sekä
ratkeamattomat ongelmat (viikot 10)
- koneiden itsetutkiskelu, universaalikoneet ja -kielet (viikko 10)
luentokalvot12
pdf
- *Ekskursio: mekaanisen laskettavuuden <-> inhimillisen päättelyn rajat
(viikko 11)
- Ongelmien vertailu ja palautus (viikko 11)
luentokalvot13
pdf
- Laskennan vaativuusteoriaa
Vapaaehtoinen
projektityö 1 ov
- Turingin koneiden aika- ja tilavaativuus
- NP-täydellisyys
Kirjallisuus
Kurssilla ei ole yhtä virallista kurssikirjaa, mutta sen sijaan joukko
suositeltavaa kirjallisuutta. Kurssin kuluessa päivitän ylläolevaa
listaa kuhunkin aihepiiriin liittyvistä sopivista kirjan
kohdista. Kannattaa silti tutustua omatoimisesti muuhunkin
kirjallisuuteen! Lisäksi pistän verkkoon luentomateriaalia, joka
kattaa koko kurssin sisällön (ja joista luennoidaan tarpeen mukaan)
pdf:nä - niitä voi käyttää runkona, joista itse täydentää mieleisensä
muistiinpanot. Paras tapa oppia on laatia oma oppimateriaali!
-
Sipser, M. Introduction to the Theory of Computation.
(Hauskalukuinen, mielenkiintoisia esimerkkejä ja tehtäviä, mutta paikoin
liian suppea.)
-
Hopcroft, J.E., Motwani, R., Ulman, J.D. Introduction to Automata
Theory, Languages, and Computation. Addison-Wesley, 2001. (Varsin
perusteellinen, mutta asioita selitetty turhankin pitkästi. Hopcroftin ja
Ullmanin vanha painos on tiiviimpi, tosin hieman matemaattisempi.)
-
Kinber, E. & Smith, C. Theory of Computing. A Gentle Introduction.
Prentice Hall, 2001. (Hyvin havainnollinen, kiltti johdatus aiheeseen
:)
-
Lewis, H.R. & Papadimitriou, C.H. Elements of the Theory of
Computation, Second Edition, Prentice-Hall, 1998. (Klassikko, pätevä
ja perusteellinen, mutta ainakin 1. painos aika matemaattinen.)
-
Wood, D. Theory of Computation, Harper & Row, 1987.
-
Sudkamp, T.A. Languages and Machines. An Introduction to the Theory of
Computer Science. (Hyvä käsikirja jos haluat tietää enemmän etkä pelkää
matematiikkaa. Varsinkin rekursiiviset ja rekursiivisesti numeroituvat
kielet selitetty hyvin, vaatimattomammat kielet löytyvät kauniimmin muista
lähteistä.)
Muuta materiaalia