n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.



Samankaltaiset tiedostot
Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2

Merkitse kertolasku potenssin avulla ja laske sen arvo.

International Olympiad in Informatics 2013

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

3. Kongruenssit. 3.1 Jakojäännös ja kongruenssi

Tehtävä: FIL Tiedostopolut

Osa 1: Todennäköisyys ja sen laskusäännöt. Klassinen todennäköisyys ja kombinatoriikka

811120P Diskreetit rakenteet

TOD.NÄK JA TILASTOT, MAA10 Kombinaatio, k-kombinaatio

Matriisit. Määritelmä 1 Reaaliluvuista a ij, missä i = 1,..., k ja j = 1,..., n, muodostettua kaaviota a 11 a 12 a 1n a 21 a 22 a 2n A =

Algoritmit 1. Demot Timo Männikkö

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,...

MAB3 - Harjoitustehtävien ratkaisut:

Datatähti 2019 loppu

Matematiikan tukikurssi, kurssikerta 3

1 2 x2 + 1 dx. (2p) x + 2dx. Kummankin integraalin laskeminen oikein (vastaukset 12 ja 20 ) antaa erikseen (2p) (integraalifunktiot

6. Tekijäryhmät ja aliryhmät

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

MAB3 - Harjoitustehtävien ratkaisut:

Johdatus matematiikkaan

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3

Ratkaisu: a) Kahden joukon yhdisteseen poimitaan kaikki alkiot jotka ovat jommassakummassa joukossa (eikä mitään muuta).

Reaalilukuvälit, leikkaus ja unioni (1/2)

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 3 (9 sivua) OT

Datatähti 2000: alkukilpailun ohjelmointitehtävä

finnish BOI 2015, päivä 1. Muistiraja: 256 MB

Algoritmit 1. Luento 10 Ke Timo Männikkö

Jäännösluokat. Alkupala Aiemmin on tullut sana jäännösluokka vastaan. Tarkastellaan

Laskun vaiheet ja matemaattiset mallit

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Aluksi Kahden muuttujan lineaarinen yhtälö

Matematiikan tukikurssi

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

y z = (x, y) Kuva 1: Euklidinen taso R 2

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Kuvauksista ja relaatioista. Jonna Makkonen Ilari Vallivaara

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

811120P Diskreetit rakenteet

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

Algoritmit 1. Luento 2 Ke Timo Männikkö

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

Algoritmit 1. Demot Timo Männikkö

Stokesin lause LUKU 5

Laskun vaiheet ja matemaattiset mallit

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta.

Kompleksilukujen kunnan konstruointi

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

1 Peruslaskuvalmiudet

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Matematiikan peruskurssi 2

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

MS-A0402 Diskreetin matematiikan perusteet

PRELIMINÄÄRIKOE PITKÄ MATEMATIIKKA

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

5. Numeerisesta derivoinnista

Neure - tehtäväluettelo 1 / , 17:05

Johdatus todennäköisyyslaskentaan Klassinen todennäköisyys ja kombinatoriikka. TKK (c) Ilkka Mellin (2005) 1

isomeerejä yhteensä yhdeksän kappaletta.

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

9 Matriisit. 9.1 Matriisien laskutoimituksia

Topologia Syksy 2010 Harjoitus 9

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

ABHELSINKI UNIVERSITY OF TECHNOLOGY

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

Tietotekniikan valintakoe

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

LUKUKORTIT Lukukorteista on moneksi Toiminnallista matematiikkaa luokille. Riikka Lyytikäinen Liikkuva koulu Helsinki 2016

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

H7 Malliratkaisut - Tehtävä 1

1 Kompleksiluvut 1. y z = (x, y) Kuva 1: Euklidinen taso R 2

Matikka on hauskaa! Esimerkkejä alakoulun matematiikasta laskimen kanssa

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Johdatus matemaattiseen päättelyyn (5 op)

Johdatus todennäköisyyslaskentaan Kertymäfunktio. TKK (c) Ilkka Mellin (2005) 1

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

} {{ } kertaa jotain

Latinalaiset neliöt ja taikaneliöt

Jatkuvat satunnaismuuttujat

1 Kannat ja kannanvaihto

Kompleksiluvut., 15. kesäkuuta /57

Luento 2: Viivan toteutus

Kirjoita ohjelma jossa luetaan kokonaislukuja taulukkoon (saat itse päättää taulun koon, kunhan koko on vähintään 10)

Algoritmit 1. Luento 13 Ma Timo Männikkö

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

1 Lukujen jaollisuudesta

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Johdatus matemaattiseen päättelyyn

Matematiikan tukikurssi

Transkriptio:

IsoInt Tietokoneiden muisti koostuu yksittäisistä muistisanoista, jotka nykyaikaisissa koneissa ovat 64 bitin pituisia. Muistisanan koko asettaa teknisen rajoituksen sille, kuinka suuria lukuja tietokone kykenee konekäskyillään käsittelemään. Tämä rajoitus näkyy suoraan useimmissa ohjelmointikielissä, esimerkiksi C ja C++ -kielien pitkä kokonaisluku (long int) on nykyisillä koneilla yleensä 64-bittinen kokonaisluku. Vaikka 64-bittiset luvut riittävät mainiosti useimpiin tavanomaisiin laskutehtäviin, joissakin sovelluksissa (esim. salakirjoitus) tarvitaan vielä huomattavasti suurempia lukuja, eikä lukujen suuruus ole välttämättä etukäteen tiedossa. Tällaisten sovellusten toteuttamiseen tarvitaan ns. mielivaltaisen tarkkuuden kokonaislukuja. Tehtävänäsi on suunnitella ja toteuttaa mielivaltaisen tarkkuuden kokonaisluku (talletusrakenne, perusoperaatiot). äytämme jatkossa nimeä IsoInt tällaisille luvuille. Voit olettaa, että luvut eivät ole negatiivisia ts. luvun etumerkki voidaan jättää huomiotta. Toteutettavia perusoperaatioita ovat: ahden IsoInt:in yhteenlasku; tuloksena IsoInt; ja ahden IsoInt:in kertolasku; tuloksena IsoInt. Yllä kuvailtujen operaatioiden avulla on mahdollista toteuttaa erilaisia monimutkaisempia matemaattisia funktioita. Yksi tällainen on ns. binomikerroin, jonka arvot ovat tuttuja mm. Pascalin kolmion riveiltä. Binomikerroin on myös tärkeä käsite todennäköisyyslaskennassa; se kertoo, kuinka monta k:n kokoista (erilaista) osajoukkoa voidaan muodostaa joukosta, jossa on n alkiota. Matematiikassa binomikerrointa merkitään yleisesti ( n k). Perinteinen matemaattinen määritelmä binomikertoimen laskuun vaatii ns. kertoma-operaation ja jakolaskun toteuttamista (jakolaskun tulos on kuitenkin aina kokonaisluku): ( ) n = k n! k!(n k)! Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja. aavoissa binomikerrointa ( n k) on merkitty lähempänä ohjelmointikieliä olevalla notaatiolla B(n, k). B(n, 0) = 1 B(0, k) = 1 B(n, k) = B(n 1, k 1) + B(n 1, k) Tehtävänäsi on toteuttaa operaatio, joka laskee kahden annetun IsoInt:in binomikertoimen. Voit toteuttaa binomikertoimen laskun millä tavalla haluat. oska tehtävät tullaan tarkastamaan koneellisesti, operaatioiden käyttämiseen pitää toteuttaa komentotulkki, joka lukee laskutoimituksia oletussyötteestä (esim. C:ssä stdin) ja tulostaa laskutoimitusten tulokset oletustulokseen (C:ssä stdout). Syötteessä voi olla useita tällaisia kolmikoita peräkkäin. olmikoiden lukumäärä kerrotaan syötteen ensimmäisellä rivillä. Operaatiot tulee nimetä seuraavasti: yhteenlasku Y, kertolasku ja binomikerroin B. (jatkuu seuraavalla sivulla)

Esimerkki. Oikea vastaus syötteeseen 3 Y 22 11 22 11 B 22 11 on 33 242 705432 Pisteytys Oikein toimiva yhteenlasku: 20p. Oikein toimiva kertolasku: 20p. Oikein toimiva binomikerroin: 20p Binomikertoimen laskennan nopeus 0 40p. Laskennan nopeudesta saa pisteitä siten, että nopein toimitettu kilpailuvastaus saa 40p, hitain 1p ja muut vastaukset nopeutensa mukaan tältä väliltä. Laskentaan saa käyttää aikaa enintään 5 minuuttia (2.67 GHz PC) ja toteutuksessa saa käyttää muistia enintään 1 gigatavun verran. Voit olettaa, että syötteessä annetut luvut ja laskutoimitusten lopputulokset ovat enintään 10.000.000:n numeron pituisia (kymmenjärjestelmässä).

Ryhmittely Opettaja haluaa muodostaa oppilaistaan työryhmiä. Tarkoituksena on, että ryhmän jäsenten koulumenestys (todistuksen arvosanat) olisi mahdollisimman samankaltainen. Tämän samankaltaisuuden mittaamiseen hän kehittää seuraavan etäisyysmitan: Olkoot opiskelijoiden todistuksessa esiintyvät aineet numeroitu 1..n. Yksinkertaisuuden vuoksi oletamme, että kaikki oppilaat lukevat samoja aineita ja että ne esiintyvät todistuksissa samassa järjestyksessä. Eli aine numero i tarkoittaa samaa ainetta kaikilla oppilailla. Merkitään oppilaan x arvosanaa aineessa i merkinnällä x(i). Oppilaiden x ja y aine-etäisyys aineessa i, D(x, y, i), on arvosanojen erotuksen itseisarvo. Jos x(i) y(i), niin D(x, y, i) = x(i) y(i); jos taas y(i) > x(i), niin D(x, y, i) = y(i) x(i). Oppilaiden x ja y etäisyys, D(x, y), on x:n ja y:n kaikkien aine-etäisyyksien summa. Luku D(x, y) saadaan siis selville laskemalla yhteen arvot D(x, y, i) kaikille i = 1,..., n. Ryhmittely voidaan toteuttaa monilla eri tavoilla. Esimerkiksi, voidaan päättää ensin, että ryhmiä on tietty määrä (esim. 5), jonka jälkeen oppilaat sijoitetaan jossakin järjestyksessä näihin ryhmiin (esim. 1. sijoitetaan ryhmään 1, 2. ryhmään 2,..., 5. ryhmään 5, 6. ryhmään 1 jne.). oska tavoitteena on kuitenkin muodostaa hyviä ryhmiä, olisi suotavaa, että edellä kuvailtu D(x, y) olisi mahdollisimman pieni ryhmän jäsenten kesken. Tähän tarkoitukseen tarvitaan jokin ryhmien laatua kuvaava mittari. Olkoon G ryhmä (joukko) oppilaita ja ryhmän oppilaat x 1,..., x m. Ryhmän G laatu L(G) on sen jäsenten parittaisten etäisyyksien summa. Tämä luku voidaan laskea määrittämällä ryhmän oppilaiden x i ja x j väliset etäisyydet kaikille indeksipareille i, j joissa i < j ja laskemalla saadut etäisyydet yhteen. Esimerkiksi seuraava C-kielinen ohjelmanpätkä laskee ryhmän G laadun muuttujaan sum (oletettu, että G on toteutettu taulukkona opiskelijoita ja että ryhmän koko m on tiedossa): int i, j; int sum = 0; for (i = 0; i < m - 1; i++) for (j = i+1; j < m; j++) sum += D(G[i], G[j]); un osataan määrätä yksittäisen ryhmän G laatu, sen avulla voidaan määrätä koko ryhmittelyn laatu ryhmien laadun summana. Ryhmittely on mikä tahansa oppilaiden sijoittelu ryhmiin siten, että jokaisessa ryhmässä on vähintään yksi oppilas; jokainen oppilas on sijoitettu johonkin ryhmään; ja mikään oppilas ei kuulu useampaan kuin yhteen ryhmään.

Opettaja on jo tyytyväinen hienoon keksintöönsä, kunnes huomaa, että hänen upea mittarinsa antaa parhaan laadun sellaiselle ryhmittelylle, jossa jokainen oppilas on yksin omassa ryhmässään. Tämä ei ollut tarkoitus. Estääkseen tällaisen ilmiön hän päättääkin, että jokaisessa ryhmässä pitää olla vähintään tietty määrä jäseniä (esim. 4). Tehtävänäsi on kehittää ja toteuttaa menetelmä, joka määrää mahdollisimman laadukkaan ryhmittelyn eli sellaisen, jolle laatumittari antaa mahdollisimman pienen arvon ja jossa jokaisessa ryhmässä on vähintään k jäsentä. Huomaa, että sinun tulee päättää myös ryhmien lukumäärä. Tehtävä annetaan tekstitiedostona siten, että tiedoston ensimmäisellä rivillä on opiskelijoiden lukumäärä, toisella rivillä aineiden lukumäärä ja kolmannella rivillä ryhmän minimikoko. Näitä lukuja seuraavat kunkin oppilaan arvosanat, jotka ovat omilla riveillään välilyönneillä eroteltuina. Ohjelmasi pitää lukea tällainen tiedosto oletussyötteestä. Laadittu ryhmittely kirjoitetaan oletustulokseen seuraavassa muodossa ensimmäiselle riville tulostetaan ryhmien lukumäärä; ja seuraaville riveille tulostetaan ryhmien jäsenten numerot (järjestysnumerot syötteessä) pilkulla eroteltuna. Voit olettaa, että oppilaita on enintään 100000, aineita on enintään 30 kpl, ja että arvosanat ovat kokonaislukuja 5,6,7,8,9 ja 10. Esimerkki. Olkoon syöttötiedosto seuraava: 8 10 4 5 5 6 6 7 7 8 8 9 9 6 6 7 7 8 8 9 9 5 5 7 7 8 8 9 9 5 5 6 6 8 8 9 9 5 5 6 6 7 7 9 9 5 5 6 6 7 7 8 8 5 5 5 5 5 5 5 5 5 5 8 8 8 8 8 6 6 6 6 6 9 9 9 9 9 9 9 9 9 9 Jatkossa oppilaisiin viitataan heidän järjestysnumeroillaan ao. tiedostossa. Oppilaiden 1 ja 2 etäisyys eli D(1, 2) on (6 5) + (6 5) + (7 6) + + (9 5) = 16. Jos oppilaat 1,2,3 ja 4 sijoitetaan samaan ryhmään, on muodostetun ryhmän laatu D(1, 2) + D(1, 3) + D(1, 4) + D(2, 3) + D(2, 4) + D(3, 4) = 16 + 24 + 24 + 16 + 24 + 16 = 120

Vastaavasti toisen ryhmän laatu (jossa oppilaat 5, 6, 7 ja 8) on 20+16+20+20+40+20 = 136 ja koko tällaisen ryhmittelyn laatu on 120 + 136 = 256. Jos oppilaat ryhmitellään parittomiin ja parillisiin eli ryhmiin 1,3,5,7 ja 2,4,6,8, on tällaisen ryhmittelyn laatu 110 + 144 = 254. Jälkimmäinen ryhmittely on siis näistä kahdesta parempi. Ensimmäisen esimerkkitapauksen mukainen ryhmittely tulostettaisiin muodossa 2 1,2,3,4 5,6,7,8 Pisteytys. Toimiva ohjelma 20p. Ryhmittelyn laatu 80p. Ryhmittelyn laatu pisteytetään siten, että paras toimitettu kilpailuvastaus saa 80p, heikoin 1p ja muut vastaukset ryhmittelyn laadun mukaan tältä väliltä. Laskentaan saa käyttää aikaa enintään yhden minuutin (2.67 GHz PC) ja toteutuksessa saa käyttää muistia enintään 1 gigatavun verran. Aikarajan seuraamiseksi ajan kulumista kannattaa tarkkailla ratkaisujen etsimisen yhteydessä ja ajan loppuessa palauttaa paras löydetty tulos. Huomautus. Etenkin suurille tehtäville ei ole mahdollista löytää parasta mahdollista (optimaalista) ryhmittelyä annetussa ajassa. Tämä johtuu puhtaasti matemaattisista syistä; asiasta innostuneet voivat miettia erilaisten ryhmittelyjen lukumäärää. Tärkeintä onkin etsiä niin hyvä ratkaisu kuin annetussa ajassa on mahdollista käyttämällä mitä hyvänsä mieleen tulevia keinoja hyvien ratkaisujen etsimiseen.

uningattaret Shakissa kuningatar voi liikkua vaaka-, pysty- tai viistosuuntaisesti. Tehtävänäsi on laskea, kuinka monella tavalla kaksi kuningatarta voidaan sijoittaa n n -shakkilaudalle niin, että ne eivät uhkaa toisiaan. Esimerkiksi tapauksessa n = 3 mahdollisuudet ovat: Tapauksessa n = 10 mahdollisuuksia on jo 3480. Ohjelmasi tulee lukea standardisyötteestä yksi kokonaisluku: shakkilaudan koko n. Tämän jälkeen ohjelmasi tulee kirjoittaa standarditulostukseen yksi kokonaisluku: kuningatarten sijoitustapojen määrä. Esimerkkisyöte 1: 3 Esimerkkitulostus 1: 8 Esimerkkisyöte 2: 10 Esimerkkitulostus 2: 3480 Arvostelussa testataan sekä ohjelman toimivuutta että tehokkuutta. Ohjelman toimivuutta testataan 60 pisteen arvoisilla testeillä, joissa n on välillä 1 50. Ohjelman tehokkuutta testataan 40 pisteen arvoisilla testeillä, joissa n on välillä 1 100000. Yhteensä ohjelmasi voi saada siis 100 pistettä. Ohjelmasi käytössä on 1 sekunti suoritusaikaa (2.67 GHz PC) ja 1 gigatavu muistia.