TKT / Opinnot / T-79.161 / Vihjeitä kotitehtävään 3
Teknillinen korkeakoulu, 
     Tietojenkäsittelyteorian laboratorio

T-79.161 Kombinatoriset algoritmit / Kotitehtävä 3

Kolmannen kotitehtävän tehtävänanto osoittautui laajemmaksi kuin tarkoitettiin. Tehtävän helpottamiseksi tarjoamme seuraavassa kaksi C-kielistä aliohjelmaa, joilla multigraafeja voidaan käsitellä. Aliohjelmien bugittomuutta emme valitettavasti voi taata.

Tiedostossa kotit3.c on kaksi aliohjelmaa multigraafien käsittelyyn:

void canon(int vertices, char *s, char *canon);
void parent(int vertices, char *s, char *parent);

canon laskee multigraafin kanonisen muodon. Syötemultigraafi määritellään antamalla parametrissä vertices sen solmujen määrä ja parametrissä s merkkijono, joka määrittää itse multigraafin. Solmut ajatellaan numeroiduiksi 0...vertices-1 ja merkkijono

s=b_2,1 b_3,1 b_3,2 b_4,1 b_4,2 b_4,3 b_5,1 ... b_vertices-1,vertices-2
missä b_j,i on merkki, joka kuvaa, montako kaarta solmujen i ja j välillä on. Merkki '0' tarkoittaa 0 kaarta, merkki '1' yhtä kaarta jne. Aliohjelma muuntaa syötemerkkijonon graafiksi, laskee sen kanonisen muodon ja kirjoittaa merkkijonoon canon kanonista muotoa vastaavan merkkijonon. Käyttäjän tulee huolehtia muistin varaamisesta canon-merkkijonolle.

parent saa syötteensä samassa muodossa kuin canon. Se poistaa saamastaan syötteestä yhden sellaisen solmun, että yhtenäisten komponenttien määrä ei lisäänny; erityisesti jos syötemultigraafi on yhtenäinen, tulos on myös yhtenäinen. Aliohjelma kirjoittaa tuloksen merkkijonoon parent, jota varten käyttäjän tulee varata muistia. Huomattakoon, että parent ei millään lailla ota kantaa syötemultigraafin mahdolliseen kanonisuuteen.

Nämä aliohjelmat puolestaan käyttävät Brendan McKay:n nauty-aliohjelmakirjastoa. kotit3.c:n alussa rivi

#include "nauty22/nauty.h"
olettaa, että kotit3.c on hakemistossa, jossa sijaitsee nauty-alihakemisto nauty22. Rivi
#define MAXN 60
olettaa, että nautyllä käsiteltävissä graafeissa on enintään 60 solmua. Aliohjelmassa canon multigraafista tehdään graafi siten, että jokaisesta solmusta ja jokaisesta kaaresta tehdään solmu, joten tarkasteltavassa multigraafissa solmuja ja kaaria saa olla yhteensä korkeintaan MAXN -- tämä riittäisi 20-hiilisten hiilivetyjen tarkasteluun, joten sen ei pitäisi olla rajoittava tekijä.

kotit3.c sisältää myös minimaalisen pääohjelman, joka kutsuu kerran kumpaakin aliohjelmaa. Pikaisella kokeilulla vaikuttaisi siltä, että käännökseen ainakin Linux-alustalla riittäisi seuraavanlainen rivi:

cc -o kotit3 kotit3.c nauty22/nauty.c nauty22/nautil.c nauty22/naugraph.c

Pahoittelemme tämän ilmoituksen myöhäistä ajankohtaa. Tilanteen johdosta siirrämme viimeisen palautuspäivän torstaiksi 24.4.2003, ja pyrimme palauttamaan mahdolliset bumerangit perjantaina 25.4.2003. Koska tentti on kuitenkin jo 5.5. ja kotitehtävien tulee olla hyväksyttynä ennen tenttiä, suosittelemme lämpimästi kotitehtävän palauttamista niin pian kuin pääsiäisloma-aikatauluunne sopii. Pyrimme tarkastamaan palautetut kotitehtävät mahdollisimman pian palautuksen jälkeen.


[TKT pääsivu] [Yhteystiedot] [Henkilöstö] [Tutkimus] [Julkaisut] [Ohjelmistot] [Opinnot] [Uutisarkisto] [Linkkejä]
Päivitetty viimeksi 15.04.2003. Harri Haanpää (Harri.Haanpaa@hut.fi)