Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Miten tämä tehtäisiin

Alfkeke [27.03.2013 10:31:55]

#

On datamatriisi, rivin leveys 20 solua eli kokonaislukuja 20 kpl/rivi. Rivejä 600. Kokonaisluvut ovat alueella 1-80. Kullakin rivillä on satunnaisesti 20 lukua tuolla annetulla välillä ja yhtä lukua on kerrallaan rivillä vain kerran.
Esim. näin:

    13 17 20 25 26 31 37 39 45 48 49 51 53 54 55 58 64 67 71 77
    01 13 16 18 21 25 33 35 41 49 50 51 56 62 65 66 69 71 73 76
    07 12 18 23 25 27 30 34 36 40 42 44 46 48 50 52 56 62 77 78
    03 04 11 19 20 24 25 29 33 35 37 48 57 62 66 70 72 73 75 76
    01 02 03 04 05 07 09 15 17 22 25 26 32 35 49 55 62 69 71 74
    08 13 17 18 19 20 44 45 48 51 52 54 56 61 62 63 71 72 73 74
    01 02 08 11 12 13 17 18 26 32 35 39 43 44 48 49 50 61 67 75
    01 07 10 13 14 22 24 27 29 30 32 39 44 55 56 57 64 67 69 71
    04 18 19 21 23 25 26 32 34 35 41 47 55 56 60 62 63 64 69 71
    01 08 13 17 21 23 24 28 30 38 39 40 45 48 49 51 59 72 75 77

Nyt olis tarvis saada sellainen ohjelma/makro, jolla saisin koko datamatriisista etsittyä sellaiset viiden numeron sarjat(eli nämä viisi numeroa täytyy löytyä aina yhdeltä riviltä), joita esiintyy eniten koko aineistossa; Sarjan viisi numeroa ja esiintymiskerrat.

Esim. eo. datasta löytyy riveiltä 1,6 ja 10 numerosarja: 13,17,45,48 ja 51

Käytännössä numerot tarkoittavat jännitearvoja väliltä 0,1-8,0 V. Tarkoituksena on löytää samankaltaisia mittaustuloksia samantyyppisistä röntgenlaitteista, jolloin saisi säädettyä nämä muutkin laitteet vastaamaan mahdollisimman paljon toistensa kaltaisiksi.

Käytettävissäni on seuraavat ohjelmat Matlab, Maple, SPSS, SAS, Mathematica ja Excel 2010 ja ohjelmointialustat C++, Java ja Python. Käyttöjärjestelminä käy joko Windows tai OSX.

Eli jos jollain näistä em. ohjelmista/ohjelmointialustoista saisi tuon ohjelman/makron rakennettua.

Kiitos paljon ja Hyvää Pääsiäistä!

Antti Laaksonen [27.03.2013 18:16:05]

#

Tässä on kuvaamasi ohjelma Python-toteutuksena:

data = open("data.txt").readlines()

tilasto = {}
suurin = 0

for rivi in data:
    osat = rivi.strip().split(" ")
    if len(osat) != 20:
        continue
    osat.sort()
    for a in range(20):
        for b in range(a+1,20):
            for c in range(b+1,20):
                for d in range(c+1,20):
                    for e in range(d+1,20):
                        sarja = (osat[a],osat[b],osat[c],osat[d],osat[e])
                        if sarja not in tilasto:
                            tilasto[sarja] = 0
                        tilasto[sarja] += 1
                        suurin = max(suurin,tilasto[sarja])

for sarja in tilasto:
    if tilasto[sarja] == suurin:
        print (sarja, tilasto[sarja])

Esimerkkidatalla tulostus on:

('13', '17', '45', '48', '51') 3
('25', '35', '62', '69', '71') 3
('13', '17', '39', '48', '49') 3

Alfkeke [28.03.2013 17:12:27]

#

Suurkiitos!
Olipa todella ripeää toimintaa.
Jollain se vaan on homma hanskassa, hieno homma.
Nyt vain sitten ajoa päälle.

Lisäys:

Laittaisitko itsestäsi hieman tietoja Antti Laaksonen vaikkapa tekstarilla
numeroon 045-8797201
niin laitan sinulle hieman vaivanpalkkaa.

Ystävällisin terveisin
Alfkeke

mietinvaan [28.03.2013 20:09:37]

#

Miksi esimerkiksi mittaustulokset "1 3 5 7 9 10" ja "1 2 3 5 7 9" ovat samankaltaisia (toistuva numerosarja olisi siis tässä tapauksessa "1 3 5 7 9" ja lukuja vain kuusi kappaletta per rivi yksinkertaisuuden vuoksi)?

Lisäys: Tarkennus: Mielestäni on siis erikoista, että lukujen ei tarvitse esiintyä peräkkäin.

Tzaeru [29.03.2013 08:16:59]

#

Itse olin tähän alunperin kirjoittamassa geneerisempää puintia ilman valmista ratkaisua oletuksella, että numerosarjojen tulisi olla peräkkäin.

Huomattuani lukihäiriöni temppuilut, suutuin viestilleni ja poltin sen tulella.

Joka tapauksessa, tuo on minustakin vähän erikoista. Toisaalta jos ideana on saada röngten-laitteiden jännitekasvut vastaamaan toisiaan, periaatteessa asiaa voinee lähestyä kummallakin tavalla.

Alfkeke [30.03.2013 10:11:25]

#

Tarkoituksena on ainoastaan löytää datamatriisista viiden luvun sarja (sarjoja), joita esiintyy eri riveillä.
Millään suuruusjärjestyksellä tai esiintymisjärjestyksellä ei ole väliä, ainoastaan rivien samankaltaisuuksia viiden luvun suhteen haetaan ja tällöin riittää tieto, että mitä viiden luvun sarjaa (sarjoja) esiintyy eniten ja kuinka monta kappaletta.

mietinvaan [30.03.2013 11:32:14]

#

Miksi etsitään juuri viiden luvun sarjoja? Entä miksi järjestyksellä ei ole väliä? Voisitko valoittaa hieman asian taustaa?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta