Noin 5 vuotta sitten jäi yhden ohjelman kehitys kesken sattuneista syistä. Siinä on pallot ja kädet -mallilla sanottuna joukko palloja, joilla on eri määriä käsiä pituudeltaan 0 - 3. Käden pituus 0 tarkoittaa, että toinen pallo on samassa klusterissa. Käden pituus 1 tarkoittaa, että toinen pallo on ensimmäisen vieruskaverina (etäisyydellä 1). Käden pituus 2 tarkoittaa sitä, että välissä on yksi pallo, johon alkuperäisestä pallosta on etäisyys 1 ja siitä välissä olevasta pallosta on etäisyys 1 kohdepalloon. Näin syntyy palloverkosto pallojen klustereista.
Klustereiden välimatka on aina 1, jotta pallomeri on ristiriidaton. Verkostoon tuodaan aina yksi pallo lisää ja sillä on niitä käsiä. Pallo liitetään verkkoon edellämainituilla säännöillä. Verkostoon (pallomereen) voi toki jäädä jonnekin pallo, jolla on kahden tai kolmen yksikön yksikön käsi vailla kohdepalloa. Sellainen jää odottamaan uutta pallolisäystä verkostoon. Yhden yksikön etäisyys ilman kohdepalloa on kuitenkin kiinni verkostossa sen yhden yhteyden kautta. Toivottavasti tämä kuvaus oli kyllin selkeä. Tätä geneeristä mallinnusta voi käyttää moneen sovellukseen. Minulle tulee muutama muukin sovellus mieleen kuin se, josta tämä on peräisin.
Jos tällaisesta on olemassa ohjelmoinnin suunnittelumalli, niin kertokaa! Jos onnsitun ratkaisemaan tuon, yksi harrasteryhmä saanee mukavan ja tehokkaan työkalun. Se tekee sekunnissa sen työn, johon ihmiseltä menee tyypillisesti monta tuntia. Ja monesti sen verran, että viisas ihminen jättää tekemättä homman.
Tässä on yksi kuva:
Pallomeri. (Ihmisen mitokondrion dna-haploryhmän mutaatioiden klusterit ja näytteiden vanhimmat tunnetut äitilinjan äidit)
Opetellessani Pythonia tein tietorakenteet tupletteina. Siitä oli iso etu kun python tallensi koko verkon yhdellä käskyllä JSON-muotoiseksi tiedostoksi. Sitten kun vaihdoin tietorakenteet olio-ohjelmoinnin luokiksi, niin sepä ei enää mennytkään automaattisesti. Tämä ei tuohon mallinnukseen kuulu, mutta kerronpa vain.