Voiko tietokonealgoritmien/funktioiden toimintaa kuvata matemaattisilla merkinnöillä, jos algoritmi on yhtään monimutkaisempi? Esimerkki: funktio f(a,b,c,d,e,f) palauttaa 6-rivisen matriisin, joka muuten on nollamatriisi mutta jokaiselle riville yksi nolla korvataan ykkösellä riippuen syötetyn parametrin arvosta.
Esim.
f(1,3,5,2,4,6) =
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 1 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 1
Toimintaperiaate on siis varsin looginen. Onko olemassa mitään erityistä matemaattista esitysasua tällaisen toiminnan kuvaamiseen "oikein", vai liittyykö aihe enemmänkin tietotekniikkaan?
Esim.
f(1,3,5,2,4,6) =
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 1 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 1
Toimintaperiaate on siis varsin looginen. Onko olemassa mitään erityistä matemaattista esitysasua tällaisen toiminnan kuvaamiseen "oikein", vai liittyykö aihe enemmänkin tietotekniikkaan?
Vastaukset 4
Vanhimmat
Matematiikassa voi tietysti käyttää normaalia tekstiä silloin kun merkinnät eivät enää riitä. Eli kaikki tietokoneen funktiot voidaan kuvata myös matemaattisesti, funktiosta sitten riippuu kuinka paljon joudutaan sanallisesti kuvailemaan funktion toimintaa.
Matriiseja on hiukan vaikea kuvailla pelkästään näillä ASCII-merkeillä mutta tässä on minun yritykseni kuvata matemaattisesti funktiosi:
f(x1,...,x6) = 6 x 6 matriisi A missä ((a ij)) = 0 kun xi j ja ((a ij)) = 1 kun xi = j
Yrityksesi on erinomainen. Ehto tosin ei toimi. Sanallisesti selitettynä asia menisi niin että jokaiselle parametrille on järjestysnumeronsa k jolloin puhutaan listasta (ki, xi) eli esim. (1,1), (2,3), (3,5), ... jonka jälkeen A[i,j] = 1 kun (i,j) kuuluu edellä mainittuun listaan, muutoin A[i,j] = 0.
Kun puhuin matemaattisesta kuvaamisesta niin tarkoitus nimenomaan oli pohtia, olisiko mahdollista kuvata algoritmi ilman sanallista kuvailua, eli hakea jotakin yleispätevää tapaa joka ei ole kielisidonnainen. Matematiikka on kieli mitä suurin osa väestöstä puhuu. Tietokonemaailmassa käytetään pseudokoodia ja ilmeisesti myös UML-mallinnusta ohjelmien kuvaamiseen. Olen kuitenkin hieman hämilläni jos matematiikka kaikessa loogisuudessaan ei voisi kuvata algoritmiä, joka niinikään toimii loogisesti. Jos matemaattisesta algoritmistä voidaan tehdä sitä noudattava tietokonefunktio, niin miksi tämän suunnan kuvaaminen toisin päin ei voisi olla mahdollista.
Pohtimisen arvoinen aihe todellakin.
Matematiikan ja tietokonekoodin välillä on se ero että koodi toimii käskyinä tietokoneelle kun taas matematiikan kieli on abstraktimpaa. Molemmat siis kuvaavat asioita eksaktisti ja loogisesti mutta siinä missä matematiikalla viestitään ihmisten välillä hyvinkin abstrakteista asioista niin koodia kirjoitetaan ihmiseltä koneelle.
Esimerkiksi matematiikan funktio
f(x) = x!
antaa luvun x kertoman, esim. f(3) = 1 * 2 * 3 = 6
Tämä on abstrakti kuvaus joka pätee kaikille ei-negatiivisille kokonaisluvuille x.
Vastaava tietokoneohjelma voisi olla tällainen:
function kertoma(x:Int):Int {
var i:Int=1;
var tulos:Int=1;
while(i
Palsta näköjään rikkoi ohjelmakoodin mutta toivottavasti ajatus välittyi.