Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (periodi III) : Aiheita

 
 
Aiheen voi keksiä itse, tai valita alla olevasta listasta itselleen mielenkiintoinen aihe. Listalla olevat aiheet ovat vain ehdotuksia, niitä voi muokata ja kehittää - lopullinen aihe sovitaan yhdessä ohjaajan kanssa.
 
 
 
Verkot ja polunesintä
Miten löydetään tehokkaasti nopein/lyhyein reitti labyrintistä ulos. Labyrintti voi olla tehty esimerksi ascii-merkeistä tai piirretty kuva.
 
Miten löydetään tehokkaasti nopein/lyhyin reitti verkossa kahdeen pisteen välillä. Verkon pisteet voivat olla esimerkiksi katuosoitteita, joukkoliikenteen pysäkkejä tai koordinaatteja. Huomioi että A* ei yksinään ole tarpeeksi laaja aihe. Hyvä artikkeli aiheesta: http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html 
 
Joulupukin ongelma: Joulupukin on käytävä miljoonissa suomalaiskodeissa yhden vuorokauden aikana. Suunnittele hänelle lyhyin mahdollinen reitti, joka alkaa Korvatunturilta ja käy kaikissa Suomen kaupungeissa. Lopuksi Joulupukki palaa tietty Korvatunturille. (tämä on käytännössä kauppamatkustajan ongelma: http://en.m.wikipedia.org/wiki/Travelling_salesman_problem ) 
 
 
Tiedon tiivistys
Tiedosto tulisi saada mahtumaan pienempään tilaan, miten tämä onnistuu? Toivottava lopullinen koko on 40-60% alkuperäisestä koosta. Tiedosto pitää myös pysytä avaamaan alkuperäiseen muotoon myöhemmin.
 
 
Tekoälyt
Shakki, go (laajennettu risti-nolla) ja  ovat hauskoja ja haastavia pelejä. Niitä olisi kiva pelata tietokonetta vastaan, tehtävänäsi on kehittää valitsemallesi pelille tekoäly. Tekoälyn pitää pystyä pelamaan niin ihmistä kuin itseään vastaan.
 
Kehitä Muurahaisten taistoon tekoäly. Googlen AI Challenge 2011: http://aichallenge.org/problem_description.php
 
Kivi-sakset-paperi on kaikille tuttu peli. Onnistutko toteuttamaan tekoälyn, joka päihittää ohjaajan? Kun tekoälysi on hyvä voit jatkaa kehitystä ottamalla mukaan vielä kaksi vaihtoehtoa: Lisko ja Spock. http://upload.wikimedia.org/wikipedia/commons/a/ad/Pierre_ciseaux_feuille_l%C3%A9zard_spock_aligned.svg sekä http://www.youtube.com/watch?v=x5Q6-wMx-K8
 
15-pelin ratkaisija. Kaikille tuttu 15-peli voi olla haastava ratkaistava. Saatko kehitettyä ohjelman joka ratkaisee pelin kuin pelin? http://en.m.wikipedia.org/wiki/15_puzzle
 
 
Salaus ja Tietoturva:
Tietoturva on tänä päivänä tärkäempää kuin koskaan monien toimintojemme siirryttyä verkkoon. Salausta voi tehdä monilla eri tavoin ja moniin käyttötarkoituksiin, oheinen sivusta tarjoaa paljon luettavaa aiheesta: http://en.m.wikipedia.org/wiki/Topics_in_cryptography
 
 
Tietorakennevertailut
Tietorakenteita on monenlaisia, mikä olisi paras kuhunkin ongelmaan? Vertaile neljää eri tietorakennetta (esimerkiksi puita tai kekoja), joita ei ole käsitelty Tietorakenteet ja Algoritmit kurssilla. Tutki missä tilanteessa kukin on paras, eli missä tilanteessa käyttäisit kutakin rakennetta.
 
 
Luolastogeneraattori
Suosituksi noussut aihe on esimerkiksi rogue-peleissä käytettävien luolien generointi. Tähän on tarjolla valmiita algoritmejä joita voi toteuttaa, mutta oma toteutus on myös täysin mahdollinen. Luolaston generointi voi joko olla etukäteen tapahtuva tai dynaamisesti pelin aikana kehittyvä pelaajan liikkumisen mukaan.
 
 
Optimointia:
Rahtifirma NopsaToimitus haluaa optimoida konttikuljetuksissa käytettävän tilan. Suunnittele miten voidaan täyttää yksi tai useampi kontti mahdollisimman tehokkaasti, jos tiedetään pakettien määrä ja koot. Ideaa voi hakea kuutiopalapelin ratkaisijasta.
 
 
Muuta Kivaa:
 
Suunnittele säännöllisten lauseiden tulkki. Miksi? Loistava vastaus: http://blog.stevenlevithan.com/archives/10-reasons-to-learn-and-use-regular-expressions
 
Matriisien laskenta käsin on rankkaa puuhaa. Suunnittele matriisilaskin joka osaa perusoperaatioiden lisäksi lasken matriisin determinantin.