Viikko 3

Olen lukenut ja opiskellut Cormenista luvun 4.2, joka käsittelee Strassenin algoritmia neliömatriisien kertolaskulle. Lisäksi olen tutustunut Cormenin lukuun 28.1, joka käsittelee LUP-hajotelmaa ja sen soveltamista käänteismatriisin määrittämisessä.
Tällä viikolla sain koodattua luokan Strassen, joka sisältää Strassenin algoritmin toteuttavan metodin. Myös yksikkötestit sekä dokumentointi ovat tämän luokan kannalta valmiit. Olen myös testannut algoritmia käytännössä ja havainnut sen olevan nopeampi kuin naiivi matriisien kertolasku, mutta ainoastaan erittäin suurten matriisien tapauksessa.
Toistaiseksi algoritmi toimii ainoastaan neliömatriiseilla, mutta luonnollisesti tulen laajentamaan koodia siten, että algoritmi toimii yleisesti kaikilla matriiseilla, joilla kertolasku on määritelty. Se, miten tämä tehdään käytännössä, on toistaiseksi hämärän peitossa. Hieman epäselväksi jäi myös muuttujan LEAF_SIZE vaikutus algoritmin tehokkuuteen. Ilmeisesti arvot väliltä 32-128 ovat ainakin omalla koneellani paras ratkaisu. Lisäksi, jos ohjaajilta löytyy jotain vinkkejä koodin optimointiin, ne ovat lämpimästi tervetulleita!
Ohjelma on matriisien perusoperaatioiden toiminnallisuuden kannalta edistynyt hyvin. Tarkoitus oli toteuttaa tällä viikolla myös yksinkertainen tekstikäyttöliittymä ohjelmalleni, mutta se jäi ajanpuutteen takia tekemättä. Ensi viikolla siis.
Seuraavaksi siirryn toteuttamaan LU-hajotelmaa, jonka avulla ohjelmani pystyy laskemaan neliömatriisin determinantin sekä määrittämään käänteismatriisin. Lisäksi olen harkinnut laajentaa ohjelmaani käsittelemään muita hajotelmia, kenties myös määrittämään ominaisarvoja ja -vektoreita, sillä en yksinkertaisesti keksi, mitä tietorakenteita voin itse matriisin lisäksi toteuttaa. Jos ensi viikon keskiviikkona on taas ohjausta, tulen mielelläni keskustelemaan kyseisestä ongelmasta ja siitä, mitä toiminnallisuutta vaaditaan korkeimpaan arvosanaan.