TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

Koko: px
Aloita esitys sivulta:

Download "TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique"

Transkriptio

1 TEKNINEN MÄÄRITTELY PROJEKTITYÖ Tik

2 SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria JOHDANTO Tarkoitus ja kattavuus Tuote ja ympäristö Määritelmät, merkintätavat ja lyhenteet Viitteet Yleiskatsaus dokumenttiin JÄRJESTELMÄN YLEISKUVAUS Sovellusalueen kuvaus Järjestelmän liittyminen ympäristöönsä Laitteistoympäristö Ohjelmistoympäristö Toteutuksen keskeiset reunaehdot Sopimukset ja standardit ARKKITEHTUURIN KUVAUS Ratkaisun "filosofia" (suunnitteluperiaatteet) Tietokanta-arkkitehtuuri Ohjelmistoarkkitehtuuri, moduulit ja prosessit Loogiset rakenteet Ohjelman moduulirakenne Sisäiset tietorakenteet moduuleittain Graafin ratkaisumoduuli Apuohjelmamoduuli Komentorivitulkkimoduuli PSEUDOKOODIMODUULIEN JA PROSESSIN KUVAUS Ohjelman kulun pääperiaate loogisella tasolla Pseudokoodimoduuli uw_maxclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli uw_sclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli uw_allsclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli uw_allnlessclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli w_maxclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli w_sclique Kuvaus Toteutus... 22

3 4.7.3 Virhekäsittely Pseudokoodimoduuli w_allsclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli w_nlessclique Kuvaus Toteutus Virhekäsittely Pseudokoodimoduuli w_allnlessclique Kuvaus Toteutus Virhekäsittely Pääohjelma Graafin järjestäminen Painotetun graafin värittäminen Painottamattoman graafin värittäminen DIMACS ASCII formaatin lukeminen Ohjelman funktiot MUUT ERITYISET TEKNISET RATKAISUT Komentorivikutsu Ohjelman kääntäminen HYLÄTYT RATKAISuVAIHTOEHDOT Bittikarttaesitys VIRHEKÄSITTELY LIITE 1: Käyttäjän funktiot VERSIOHISTORIA Versio Päivämäärä Laatija Kuvaus Dufva Proposal Dufva First draft Dufva Second draft Dufva Third draft Dufva Edited according to comments received from Patric Östergård and Harri Haanpää

4 TEKNINEN MÄÄRITTELY 4 (36) 1. JOHDANTO Tässä dokumentissa kerrotaan kuinka tekninen osuus projektityöstä on tehty. 1.1 Tarkoitus ja kattavuus Tekninen osuus pitää sisällään -ohjelman rakenteellisen selvityksen ja kuinka sen osat toimivat ja kommunikoivat eri moduulien kesken. Dokumentti on tarkoitettu projektin tekijöille sekä henkilöille jotka ovat kiinnostuneet ohjelman toiminnasta. 1.2 Tuote ja ympäristö Tuote joka tässä projektissa tehdään on -ohjelma, mikä toimii Unix ja Linux ympäristössä. 1.3 Määritelmät, merkintätavat ja lyhenteet : Projektityön kohde. Ohjelma jonka tarkoituksena on etsiä haluttuja ominaisuuksia annetuista graafeista. Ohjelma kirjoitetaan isolla jos ohjelmasta puhutaan yleisesti tai viitataan projektityön nimeen. Kun varsinainen ohjelma koodataan, puhutaan wcliquesta pienellä alkukirjaimella. Graafi: Useissa yhteyksissä tarkastellaan joukkoa solmuja, joista joko on tai ei ole kaaria toisiin solmuihin. Tyypillisiä esimerkkejä tällaisista ovat kartta, johon on merkitty kaupunkeja, sekä näiden väliset suorat liikenneyhteydet, tietokoneohjelman kulkua kuvaava vuokaavio ja sukupuut. Graafi, eli verkko G = ( V, E ) muodostuu äärellisistä joukoista V ja E, joista V on ns. solmujen joukko ja E on sivujen joukko. Solmu: Solmuista käytetään joissain yhteyksissä myös nimityksiä kärki tai piste. Kartta vertauksessa solmua edustaisi kaupunki. Kaari: Käytössä myös nimitykset kaari ja haara. Kartassa kaari olisi kaupungit yhdistävä tie. Algoritmi: Algoritmilla voidaan ratkaista olemassa olevasta graafista asioita, joista ollaan kiinnostuneita. Algoritmi jonka ympärille ohjelma rakennetaan on julkinen. Algoritmin toimintaa on kuvattu Internetissä seuraavissa dokumenteissa: "A Fast Algorithm for the Maximum Clique Problem" ~ pat/paper1.ps "A New Algorithm for the Maximum-Weight Clique Problem" ~ pat/paper2.ps Klikki: Klikki tarkoittaa sellaista solmujoukkoa joista kaikista on kaari kaikkiin. Ansi C: Ohjelmointikieli, jolla ohjelma toteutetaan

5 TEKNINEN MÄÄRITTELY 5 (36) 1.4 Viitteet [Vaat] [Unixprog] Vaatimusmäärittely Brian W. Kernighan, Rob Pike: The Unix Programming Environment 1.5 Yleiskatsaus dokumenttiin Johdanto-osuudessa luodaan yleiskatsaus dokumenttiin. Siinä selvitetään termit, lyhenteet ja viitteet jotka auttavat lukijaa tutustumaan tähän dokumenttiin ja -ohjelmaan. Toinen luku tarkentaa ohjelmaa yleisellä tasolla. Jos lukija ei ole kiinnostunut pikkutarkasta ohjelman kuvauksesta, niin usein riittää tämän luvun lukeminen ohjelman idean ymmärtämiseksi. Arkkitehtuuriosuudessa käydään läpi ohjelman rakenne, tiedostot, moduulit ja sisäiset tietorakenteet. Neljännessä luvussa tarkennetaan toisessa luvussa esitettyjä ohjelman ominaisuuksia ja toimintoja mm. pseudokoodiesityksillä ohjelman sisäisistä loogisista kokonaisuuksista. Luvussa 5 käydään läpi mm. komentoriviesitys, luvussa 6 hylätyt ratkaisuvaihtoehdot ja luvussa 7 virhekäsittelyä.

6 TEKNINEN MÄÄRITTELY 6 (36) 2. JÄRJESTELMÄN YLEISKUVAUS 2.1 Sovellusalueen kuvaus Sovellus toimii standardi Unix/Linux ympäristössä. 2.2 Järjestelmän liittyminen ympäristöönsä Ohjelma ei itsessään vaadi liityntöjä järjestelmään, mutta voi kirjaston ominaisuudessa olla itse osana suurempaa järjestelmää. 2.3 Laitteistoympäristö Standardi Unix / Linux käyttöympäristö. 2.4 Ohjelmistoympäristö Ohjelma toimii /Unix / Linux ympäristössä. Kun n toiminta on havaittu toimivaksi tässä ympäristössä, tehdään sta myös Windows ympäristössä toimiva versio. 2.5 Toteutuksen keskeiset reunaehdot Ohjelma sisältää seuraavat ominaisuudet [vaat]: Painottamattomien graafien vaatimukset: Yhden maksimiklikin laskeminen Kaikkien maksimiklikkien laskeminen Yhden kokoa S olevan klikin laskeminen Kaikkien kokoa S olevien klikkien laskeminen Yhden vähintään kokoa S olevan klikin laskeminen Kaikkien vähintään kokoa S olevien klikkien laskeminen Eri syöteformaattien lukeminen Graafin järjestäminen Painotettujen graafien vaatimukset Yhden maksimiklikin laskeminen Kaikkien maksimiklikkien laskeminen Yhden kokoa S olevan klikin laskeminen Kaikkien kokoa S olevien klikkien laskeminen Yhden vähintään kokoa S olevan klikin laskeminen Kaikkien vähintään kokoa S olevien klikkien laskeminen Eri syöteformaattien lukeminen Graafin järjestäminen

7 TEKNINEN MÄÄRITTELY 7 (36) 2.6 Sopimukset ja standardit Koodauksessa noudatetaan Brian W. Kernighan, Rob Pike: The Unix Programming Environment ja Kenneth Oksasen C-ohjelmointiopas -kirjoissa mainittuja hyvän koodin tunnusmerkkejä Sopimukset: Vaatimusmäärittely ja tekijänoikeussopimus. 3. ARKKITEHTUURIN KUVAUS 3.1 Ratkaisun "filosofia" (suunnitteluperiaatteet) - n koodi voidaan ajatella koostuvan useasta loogisesta kokonaisuudesta jotka on esitetty pseudokoodimoduuleina. Pseudokoodimoduulit on esitetty luvussa 4. Nämä kyseiset moduulit on nimetty seuraavasti: w_xxx tai uw_xxx, riippuen siitä onko kyseessä painotettu vai painottamaton graafi. - C-kieli, asiakkaan vaatimus 3.2 Tietokanta-arkkitehtuuri ei sisällä tietokantaominaisuuksia. 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit Loogiset rakenteet Ohjelmassa on kolme tiedostoa: otsikkotiedosto wclique.h, kirjastotiedosto wclique.c sekä pääohjelma main.c, josta käytetään kirjaston tarjoamia palveluja. Ohjelma koostu useista loogisista kokonaisuuksista jotka on lueteltu tässä alla. Tarkempi kuvaus on esitetty luvussa Yhden painottamattoman maksimiklikin laskeminen (uw_maxclique) - uw_maxclique - etsii graafista YHDEN maksimiklikin (laskee myös maksimiklikin koon). 2. Kaikkien painottamattomien maksimiklikkien laskeminen - ei omaa moduulia vaan tehdään moduulissa uw_allsclique (S=uw_maxclique). 3. Yhden painottamattoman klikin laskeminen kokoa S (uw_sclique) - uw_sclique etsii painottamattomasta graafista YHDEN annetun kokoisen klikin. 4. Kaikkien painottamattomien klikkien laskeminen kokoa S (uw_allsclique) - uw_allsclique etsii painottamattomasta graafista KAIKKI annetun kokoiset klikit. 5. Yhden painottamattoman klikin laskeminen vähintään kokoa S - sama kuin 4, koska algoritmi löytää ensin kuitenkin kokoa S olevan klikin (>=S). 6. Kaikkien painottamattomien klikkien laskeminen vähintään kokoa S (uw_allnlessclique) - uw_allnlessclique etsii painottamattomasta graafista kaikki vähintään annetun kokoiset klikit. 7. Graafin solmujen järjestäminen (uw_coloring) 8. Yhden painotetun maksimiklikin laskeminen (w_maxclique) - w_maxclique etsii painotetusta graafista YHDEN maksimiklikin.

8 TEKNINEN MÄÄRITTELY 8 (36) 9. Kaikkien painotettujen maksimiklikkien laskeminen - Ei omaa moduulia vaan tehdään moduulissa w_allsclique (S=w_maxclique). 10. Yhden painotetun klikin laskeminen kokoa S (w_sclique) - w_sclique etsii painotetusta graafista YHDEN annetun kokoisen klikin. 11. Kaikkien painotettujen klikkien laskeminen kokoa S (w_allsclique) - w_allsclique etsii painotetusta graafista KAIKKI annetun kokoiset klikit. 12. Yhden painotetun klikin laskeminen vähintään kokoa S (w_nlessclique) - w_nlessclique painotetusta graafista YHDEN vähintään annetun kokoisen klikin. 13. Kaikkien painotettujen klikkien laskeminen vähintään kokoa S (w_allnlessclique) - w_allnlessclique painotetusta graafista KAIKKI vähintään annetun kokoiset klikit Ohjelman moduulirakenne - Graafin ratkaisumoduuli - Painotetun maksimiklikin ratkaisu - Painotetun kokoa S olevien klikkien ratkaisut - Painottamattoman maksimiklikin ratkaisu - Painottamattomien kokoa S olevien klikkien ratkaisut - Graafin ratkaisussa sisäisesti tarvittavien tietorakenteiden varaus (ei sisällä rekursiossa varattavia tietorakenteita) - Edellä mainittujen tietorakenteiden vapautus - Painotetun graafin solmujen järjestäminen - Painottamattoman graafin solmujen järjestäminen - Otsikkomoduuli graafin ratkaisumoduulille - Apuohjelmamoduuli - Graafin solmujen lukumäärän lukeminen DIMACS ASCII -formaatissa olevasta tiedostosta - Graafin solmujen lukumäärän lukeminen DIMACS binääri -formaatissa olevasta tiedostosta - Graafin kaarien ja painojen lukeminen DIMACS ASCII -formaatissa olevasta tiedostosta - Graafin kaarien ja painojen lukeminen DIMACS binääri -formaatissa olevasta tiedostosta - Graafin kaarimuistirakenteen varaus - Graafin solmujen painomuistirakenteen varaus - Tulosklikin solmumuistirakenteen varaus - Kaarimuistirakenteen alustaminen - Kaaren lisääminen kaarimuistirakenteeseen - Kaaren poisto kaarimuistirakenteesta - Solmun painon lisääminen painomuistirakenteeseen - Muistirakenteen vapautus - Otsikkomoduuli apuohjelmamoduulille - Komentorivitulkkimoduuli - Pääohjelma - Komentoriviparametrien luku (graafin ratkaisulle annetuiden parametrien tulkinta) - Graafin ratkaisun tulostaminen (funktio, jonka osoitin välitetään graafin ratkaisumoduulille) - Ohjelman opastuksen tulostaminen - Otsikkomoduuli komentorivitulkkimoduulille

9 TEKNINEN MÄÄRITTELY 9 (36) 3.4 Sisäiset tietorakenteet moduuleittain Graafin ratkaisumoduuli Monessa funktiossa käytettävät tietorakenteet (osoittimia välitetään funktioparametreina) - Tietorakenne solmujen uudelle järjestykselle (yksiulotteinen kokonaislukutaulukko jossa kokonaislukutaulukon koko on graafin solmujen lukumäärä) - Tietorakenne maksimiklikkien kooille (yksiulotteinen kokonaislukutaulukko graafin c- arvoille) - Tietorakenne käsittelyssä olevan klikin solmuille (yksiulotteinen kokonaislukutaulukko jossa kokonaislukutaulukon koko on graafin solmujen lukumäärä. Taulukon alkion arvo on yksi, jos ratkaistavana oleva klikki sisältää kyseisen solmun). - Edellä mainittujen tietorakenteiden osoittimet sisällytetään seuraavankaltaisiin struktuureihin, jotka sisältävät graafin ja graafin ratkaisun aikaista informaatiota. Struktuuri graafi-informaatiolle: typedef struct { unsigned int nbrofvertices; unsigned int *edgetblptr; unsigned int *weighttblptr; unsigned int *sortordertblptr; //graafin solmujen lukumäärä (syötteenä moduulille) //osoitin kaaritietorakenteeseen (syötteenä moduulille) //osoitin solmujen painotietorakenteeseen (syötteenä moduulille) //osoitin solmujen järjestyksen tietorakenteeseen } wc_graph_variables;

10 TEKNINEN MÄÄRITTELY 10 (36) Struktuuri graafin ratkaisun aikaiselle informaatiolle: typedef struct { unsigned int *maxclique; short int cliquefound; char *curcliquetblptr; char *rescliquetblptr; //osoitin löydetyn maksimiklikin kokoon (syötteenä moduulille/arvoa muutetaan moduulissa) //true/false tieto, onko etsityn kaltainen klikki löydetty (arvo muutetaan false:sta true:ksi, kun etsityn kaltainen klikki on löydetty) //osoitin käsittelyssä olevan klikin solmutietorakenteeseen //osoitin tulosklikin solmutietorakenteeseen (syötteenä moduulille/sisältöä muutetaan moduulissa) unsigned int *weightsofcliquestblptr; //osoitin maksimiklikkien kokojen (c-arvot) tietorakenteeseen } wc_clique_variables; Paikallisesti käytettävät tietorakenteet - Tietorakenne käsiteltävän solmun naapureille (yksiulotteinen kokonaislukutaulukko, jossa naapurit järjestetyssä järjestyksessä). Naapureita käsitellään taulukon indeksin perusteella pienimmästä suurimpaan. Jokaiselle rekursiokierrokselle varataan oma taulukkonsa, joka saa sisältönsä syötteenä tulevasta naapuritaulukosta. Tämän taulukon koko on määritelty wclique.h tiedostossa. - Naapureiden painojen summa (yksiulotteinen kokonaislukutaulukko) alustetaan painotetun graafin järjestelyfunktiossa ja naapuripainoja päivitetään järjestelyn aikana. - Solmun asteluku (yksiulotteinen kokonaislukutaulukko) alustetaan painottamattoman graafin järjestelyfunktiossa ja astelukua päivitetään järjestelyn aikana Apuohjelmamoduuli - Seuraavassa kahdessa tietorakenteessa solmuja indeksoidaan välillä 0...n-1, vaikka ohjelmasta ulospäin solmuja indeksoidaan välillä 1...n. Solmujen indeksoinnin muuttaminen tehdään ohjelmassa sisäisesti. - Tietorakenne graafin kaarille (tietorakenteen osoitin välitetään kutsuvalle moduulille, mutta varaus suoritetaan tässä moduulissa, joten tietorakenteen voinee esittää tämän moduulin yhteydessä). Kaksiulotteinen taulukko, jossa toinen ulottuvuus on graafin solmun numero kokonaislukuna 0...n-1 ja toinen ulottuvuus bittivektori 0...n-1, siten, että ykkösenä oleva bitti kertoo solmujen välillä olevasta kaaresta.

11 TEKNINEN MÄÄRITTELY 11 (36) - Esimerkki edellisestä (graafi, jossa yhdeksän solmua): solmu kaari solmuun Esimerkki kaaritaulukosta jossa unsigned int on 8 bittiä Tietorakenne graafin solmujen painoille (tietorakenteen osoitin välitetään kutsuvalle moduulille, mutta varaus suoritetaan tässä moduulissa, joten tietorakenteen voinee esittää tämän moduulin yhteydessä) (yksiulotteinen kokonaislukutaulukko jossa kokonaislukutaulukon koko on graafin solmujen lukumäärä). - Tietorakenne tulosklikin solmuille (tietorakenteen osoitin välitetään kutsuvalle moduulille, mutta varaus suoritetaan tässä moduulissa, joten tietorakenteen voinee esittää tämän moduulin yhteydessä) (yksiulotteinen kokonaislukutaulukko jossa kokonaislukutaulukon koko on graafin solmujen lukumäärä). Taulukon alkion arvo on yksi, jos ratkaistavana oleva klikki sisältää kyseisen solmun.

12 TEKNINEN MÄÄRITTELY 12 (36) Komentorivitulkkimoduuli - Tietorakenne graafista ratkaistavan klikin optioille. Tietorakenteen osoitin annetaan syöteparametrina graafin ratkaisumoduulille, jossa tietorakenteesta tehdään paikallinen kopio. Tietorakenne on seuraavaa muotoa: typedef struct { /* if true, running time information is displayed */ short int info; short int reorder; short int atleastsizes; short int maxclique; unsigned int sizes; short int allcliques; short int weighted; void (*printfunc)(); //true=graafin solmut järjestetään ennen ratkaisua //true=etsitään ainakin kokoa S oleva klikki //true=etsitään maksimiklikki //etsittävän klikin koko, mikäli etsitään tietyn tai vähintään tietyn kokoista klikkiä //true=etsitään kaikkia klikkejä //true=etsitään painotettua klikkiä //osoitin käyttäjän määrittelemään funktioon, jota kutsutaan aina graafin ratkaisun löydyttyä (syötteenä moduulille) } wc_options; Esimerkiksi muuttujien reorder, maxclique, allcliques ja weighted arvojen ollessa true, graafin solmut järjestetään painojensa perusteella, jonka jälkeen järjestetystä painotetusta graafista etsitään kaikkia painoltaan maksimi klikkejä.

13 TEKNINEN MÄÄRITTELY 13 (36) 4. PSEUDOKOODIMODUULIEN JA PROSESSIN KUVAUS Alla olevassa kuvassa 1, esitetään painottamattoman graafin tapauksessa tapahtuva prosessi. Aloitus Komentorivi: graafin syöte, kutsuttava funktio 4 Tulkitse komentorivi Jokin muu 1,2 tai 3 Etsi maksimiklikki 1 tai 2 3 Etsi yksi klikki / kaikki klikit kokoa S Lopetus Kuva 1. Painottamattomien graafien laskeminen Kommentteja: Tässä käsitelty tapaukset 1-4 (painottamaton). Ensimmäisessä moduulissa kutsutaan parametrilla annettua funktiota, joka esim. tulostaa klikin koon tai solmut. Toisessa moduulissa samoin. Lisäksi tutkitaan ehtoa, jonka perusteella päätettä, etsitäänkö vielä ensimmäisen löytyneen jälkeen loputkin. Tapaukset: 1. Painottoman maksimiklikin koko 2. Yhden maksimiklikin laskeminen 3. Kaikkien maksimiklikkien laskeminen 4. Yhden klikin laskeminen kokoa S

14 TEKNINEN MÄÄRITTELY 14 (36) 4.1 Ohjelman kulun pääperiaate loogisella tasolla Seuraavat operaatiot suoritetaan komentorivitulkkimoduulin pääohjelmassa käyttäen apuna moduulin omia, sekä apuohjelmamoduulin sisältämiä palveluita. - Mikäli ohjelman suoritus lopetetaan hallitusti virheellisen tapahtuman johdosta, virheilmoitus tilanteesta kirjoitetaan stderr:iin - Tulkitaan komentoriviparametrit - Mikäli --help tai -h parametri annettu, tulostetaan ohjelman opastusteksti stdout:iin ja lopetetaan ohjelman suoritus - Avataan tiedosto komentorivillä annetulla tiedoston nimellä. Mikäli nimeä ei ole annettu, luetaan stdin:nniä. - Luetaan graafin solmujen lukumäärä tiedostosta. Mikäli --type parametrin arvo on binary, yritetään lukea binääri-muotoista tiedostoa. Mikäli --type parametrin arvo on ASCII, yritetään lukea ASCII-muotoista tiedostoa. - Mikäli lukeminen estyy, ohjelman suoritus lopetetaan - Varataan muistialue kaaritaulukolle - Varataan muistialue solmujen painotaulukolle - Varataan muistialue tulosklikiin solmutaulukolle - Mikäli jokin varaus epäonnistuu, ohjelman suoritus lopetetaan - Alustetaan painotaulukko ykkösillä, joka on solmun oletuspaino, mikäli solmulle ei ole annettua painoa vaikka käsitellään painotettua graafia - Luetaan graafin kaaret tiedostosta ja täytetään kaaret kaaritaulukkoon. Mikäli type parametrin arvo on binary, luetaan binäärimuotoista tiedostoa. Mikäli --type parametrin arvo on ASCII, luetaan ASCII-muotoista tiedostoa. ASCII-tiedoston tapauksessa luetaan myös tiedoston mahdollisesti sisältämät solmujen painot ja täytetään ne solmujen painotaulukkoon. Mikäli tiedostosta löytyy yksikin ykkösestä poikkeava solmun paino, graafia käsitellään painotettuna graafina. - Mikäli tiedoston lukeminen estyy, ohjelman suoritus lopetetaan - Kutsutaan graafin ratkaisua, antaen samalla syötteenä osoittimet varattujen tietorakenteiden alkuun sekä tuloksen tulostusfunktioon, graafin solmujen lukumäärän, parametrit tietyn tyyppisen klikin ratkaisemiselle ja osoitin maksimiklikin kokoa varten - Graafin ratkaisumoduulista palattua, vapautetaan varatut muistialueet

15 TEKNINEN MÄÄRITTELY 15 (36) Seuraavat operaatiot suoritetaan graafin ratkaisumoduulissa - Kopioidaan syöteparametreina annetut osoittimet paikallisiksi osoittimiksi - Varataan muistialueet solmujen uudelle järjestykselle, maksimiklikkien kooille (c-arvo) ja käsittelyssä olevan klikin solmuille - Mikäli jonkin muistialueen varaus epäonnistuu, palataan virhekoodilla (false) moduulia kutsuneeseen ohjelmaan - Mikäli --reorder tai -r parametri on annettu, graafin solmujen läpikäyntijärjestys talletetaan kokonaisluku taulukkoon väritysmenetelmän avulla. Sekä painotetulle, että painottamattomalle graafille on oma järjestelyfunktio ja menetelmä. Väritysmenetelmät on kuvattu tarkemmin luvussa Ratkaistaan graafi seuraavien annettujen parametrikombinaatioiden perusteella: - --size=max, --type=one, --weighted; ratkaistaan yksi maksimiklikki painotetusta graafista - --size=max, --type=all, --weighted; ratkaistaan kaikki maksimiklikit painotetusta graafista - --size=s, --type=one, --weighted; ratkaistaan yksi kokoa S oleva klikki painotetusta graafista - --size=s, --type=all, --weighted; ratkaistaan kaikki kokoa S olevat klikit painotetusta graafista - --size=+s, --type=one, --weighted; ratkaistaan yksi vähintään kokoa S oleva klikki painotetusta graafista - --size=+s, --type=all, --weighted; ratkaistaan kaikki vähintään kokoa S olevat klikit painotetusta graafista - --size=max, --type=one; ratkaistaan yksi maksimiklikki painottamattomasta graafista - --size=max, --type=all; ratkaistaan kaikki maksimiklikit painottamattomasta graafista - --size=s, --type=one; ratkaistaan yksi kokoa S oleva klikki painottamattomasta graafista - --size=s, --type=all; ratkaistaan kaikki kokoa S olevat klikit painottamattomasta graafista - --size=+s, --type=one; ratkaistaan yksi vähintään kokoa S oleva klikki painottamattomasta graafista - --size=+s, --type=all; ratkaistaan kaikki vähintään kokoa S olevat klikit painottamattomasta graafista - Tarkempaa informaatiota ratkaisuista saa luvuista joissa on esitetty graafien oleviin pseudokoodeihin... - Lisäyksenä pseudokoodien ulkopuolelta, mikäli --info tai -i parametri on annettu, tulostetaan graafin ratkaisusta väliaikatietoa stderr:iin. Väliaikatietona käsiteltävän solmun numero, löytyneen maksimiklikin koko ja ratkaisuun tähän mennessä käytetty aika.

16 TEKNINEN MÄÄRITTELY 16 (36) - Tulosklikin solmujen tulostus tapahtuu ratkaistavan graafin tyypistä riippuen ratkaisun eri vaiheissa. Periaate kaikissa tulostuksissa on kuitenkin sama. Kutsutaan moduulille syöteparametrina annettua funktio-osoitinta. Itse tulostusfunktio on kutsuvassa ohjelmassa (komentorivitulkkimoduulissa), mutta suorituksellisesti funktiota ajetaan tässä vaiheessa. Funktiossa luetaan läpi suurimman tai tulosklikin solmuille varattu tietorakenne ja tulostetaan sen sisältö stdout:iin. Mikäli on etsitty ainoastaan yhtä maksimiklikkiä, tulostetaan myös tämän klikin koko stdout:iin. - Graafin ratkaisumoduulissa varattujen muistialueiden vapautus

17 TEKNINEN MÄÄRITTELY 17 (36) 4.2 Pseudokoodimoduuli uw_maxclique Kuvaus Toteutus Pseudokoodimoduuli sisältää algoritmin painottamattomalle klikille, josta lasketaan maksimiklikin koko. /**** uw_maxclique etsii painottamattomasta graafista maksimiklikin *****/ function uw_maxclique(u; size) 1: if U = 0 then 2: if size > max then 3: max := size 4: \\ save new record 5: found := true 6: end if 7: return 8: end if 9: while U!= 0 do 10: if size + U <= max then 11: return 12: end if 13: i := min { j v j E U } 14: if size + c[i] <= max then 15: return 16: end if 17: U := U \ {v i } 18: uw_maxclique(u & N(v i ); size + 1) 19: if found = true then 20: return 21: end if 22: end while 23: return function uw_max 24: max := 0 25: for i := n downto 1 do 26: found := false 27: uw_maxclique(s i & N(v i ); 1) 28: c[i] :=max 29: end for 30: \\ call function x with maxclique 31: return Virhekäsittely Ei sisällä virheenkäsittelyä.

18 TEKNINEN MÄÄRITTELY 18 (36) 4.3 Pseudokoodimoduuli uw_sclique Kuvaus Toteutus Virhekäsittely uw_sclique etsii painottamattomasta graafista YHDEN annetun kokoisen klikin /**** uw_sclique etsii painottamattomasta graafista YHDEN annetun kokoisen klikin *****/ function uw_sclique(u; size) 1: if U = 0 then 2: if size > max then 3: max := size 4: if max = S then 5: \\ save new record 6: end if 7: found := true 8: end if 9: return 10: end if 11: while U!= 0 do 12: if size + U <= max then 13: return 14: end if 15: i := min { j v j E U } 16: if size + c[i] <= max then 17: return 18: end if 19: U := U \ {v i } 20: uw_sclique(u & N(v i ); size + 1) 21: if found = true then 22: return 23: end if 24: end while 25: return function uw_s 26: max := 0 27: for i := n downto 1 do 28: found := false 29: uw_sclique(s i & N(v i ); 1) 30: if max = S then 31: \\ call function x 32: return 33: end if 34: c[i] :=max 35: end for 36: return Ei sisällä virheenkäsittelyä.

19 TEKNINEN MÄÄRITTELY 19 (36) 4.4 Pseudokoodimoduuli uw_allsclique Kuvaus Toteutus uw_allsclique etsii painottamattomasta graafista KAIKKI annetun kokoiset klikit /**** uw_allsclique etsii painottamattomasta graafista KAIKKI annetun kokoiset klikit *****/ function uw_allsclique(u; size) 1: if size > max then 2: if size = S then 3: \\ call function x 4: else 5: max := size 6: found := true 7: end if 8: return 9: end if 10: while U!= 0 do 11: if size + U <= max then 12: return 13: end if 14: i := min { j v j E U } 15: if size + c[i] <= max then 16: return 17: end if 18: U := U \ {v i } 19: uw_allsclique(u & N(v i ); size + 1) 20: if found=true 21: return 22: end if 23: end while 24: return function uw_alls 25: max := 0 26: for i := n downto 1 do 27 found := false 28: uw_allsclique(s i & N(v i ); 1) 29: c[i] :=max 30: end for 31: return Virhekäsittely Ei sisällä virheenkäsittelyä.

20 TEKNINEN MÄÄRITTELY 20 (36) 4.5 Pseudokoodimoduuli uw_allnlessclique Kuvaus uw_allnlessclique painottamattomasta graafista kaikki vähintään annetun kokoiset klikit Toteutus /**** uw_allnlessclique painottamattomasta graafista kaikki vähintään annetun kokoiset klikit ****/ function uw_allnlessclique(u; size) 1: if size > max then 2: if size >= S then 3: \\ call function X 4: else 5: max := size 6: found := true 7: return 8: end if 9: end if 10: while U!= 0 do 11: if size + U <= max then 12: return 13: end if 14: i := min { j v j E U } 15: if size + c[i] <= max then 16: return 17: end if 18: U := U \ {v i } 19: uw_allnlessclique(u & N(v i ); size + 1) 20: if found := true 21: return 22: end if 23: end while 24: return function uw_allnless 25: max := 0 26: for i := n downto 1 do 27: found := false 28: uw_allnlessclique(s i & N(v i ); 1) 29: c[i] :=max 30: end for 31: return Virhekäsittely Ei sisällä virheenkäsittelyä.

21 TEKNINEN MÄÄRITTELY 21 (36) 4.6 Pseudokoodimoduuli w_maxclique Kuvaus Toteutus w_maxclique etsii painotetusta graafista maksimi klikin function w_maxclique(u; size) 1: if U = 0 then 2: if size > max then 3: max := size 4: \\ save new record 5: end if 6: return 7: end if 8: while U!= 0 do 9: if size + wt(u) <= max then 10: return 11: end if 12: i := min { j v j E U } 13: if size + C[i] <= max then 14: return 15: end if 16: U := U \ {v i } 17: w_maxclique(u & N(v i ); size + w[i]) 18: end while 19: return function w_max 20: max := 0 21: for i := n downto 1 do 22: w_maxclique(s i & N(v i ); w[i]) 23: C[i] :=max 24: end for 25: \\ call function x with maxclique 26: return Virhekäsittely Ei sisällä virheenkäsittelyä.

22 TEKNINEN MÄÄRITTELY 22 (36) 4.7 Pseudokoodimoduuli w_sclique Kuvaus Toteutus Virhekäsittely w_sclique etsii painotetusta graafista YHDEN annetun kokoisen klikin /**** w_sclique etsii painotetusta graafista YHDEN annetun kokoisen klikin *****/ function w_sclique(u; size) 1: if size > max then 2: max := size 3: if max = S then 4: \\ save new record 5 found := true 6: return 7: end if 8: end if 9: while U!= 0 do 10: if size + wt(u) <= max then 11: return 12: end if 13: i := min { j v j E U } 14: if size + C[i] <= max then 15: return 16: end if 17: U := U \ {v i } 18: if size + w[i] > S then 19: continue 20: end if 21: w_sclique(u & N(v i ); size + w[i]) 22: if found = true then 23: return 24: end if 25: end while 26: return function w_s 27: max := 0 28: found := false 29: for i := n downto 1 do 30: w_sclique(s i & N(v i ); w[i]) 31: if found = true then 32: \\ call function x 33: return 34: end if 35: C[i] :=max 36: end for 37: return Ei sisällä virheenkäsittelyä.

23 TEKNINEN MÄÄRITTELY 23 (36) 4.8 Pseudokoodimoduuli w_allsclique Kuvaus Toteutus w_allsclique etsii painotetusta graafista KAIKKI annetun kokoiset klikit /**** w_allsclique etsii painotetusta graafista KAIKKI annetun kokoiset klikit *****/ function w_allsclique(u; size) 1: if size > max then 2: if size = S then 3: \\ call function x 4: return 5: else 6: max := size 7: end if 8: end if 9: while U!= 0 do 10: if size + wt(u) <= max then 11: return 12: end if 13: i := min { j v j E U } 14: if size + C[i] <= max then 15: return 16: end if 17: U := U \ {v i } 18: if size + w[i] > S then 19: continue 20: end if 21: w_allsclique(u & N(v i ); size + w[i]) 22: end while 23: return function w_alls 24: max := 0 25: for i := n downto 1 do 26: w_allsclique(s i & N(v i ); w[i]) 27: C[i] :=max 28: end for 29: return Virhekäsittely Ei sisällä virheenkäsittelyä.

24 TEKNINEN MÄÄRITTELY 24 (36) 4.9 Pseudokoodimoduuli w_nlessclique Kuvaus Toteutus w_nlessclique painotetusta graafista YHDEN vähintään annetun kokoisen klikin function w_nlessclique(u; size) 1: if size > max then 2: max := size 3: if max >= S then 4: \\ save new record 5 found := true 6: return 7: end if 8: end if 9: while U!= 0 do 10: if size + wt(u) <= max then 11: return 12: end if 13: i := min { j v j E U } 14: if size + C[i] <= max then 15: return 16: end if 17: U := U \ {v i } 18: w_nlessclique(u & N(v i ); size + w[i]) 19: if found = true then 20: return 21: end if 22: end while 23: return function w_nless 24: max := 0 25: found := false 26: for i := n downto 1 do 27: w_nlessclique(s i & N(v i ); w[i]) 28: if found = true then 29: \\ call function x 30: return 31: end if 32: C[i] :=max 33: end for 34: return Virhekäsittely Ei sisällä virheenkäsittelyä.

25 TEKNINEN MÄÄRITTELY 25 (36) 4.10 Pseudokoodimoduuli w_allnlessclique Kuvaus Toteutus w_allnlessclique painotetusta graafista KAIKKI vähintään annetun kokoiset klikit function w_allnlessclique(u; size) 1: if size > max then 2: if size >= S then 3: \\ call function x 4: else 5: max := size 6: end if 7: end if 8: while U!= 0 do 9: if size + wt(u) <= max then 10: return 11: end if 12: i := min { j v j E U } 13: if size + C[i] <= max then 14: return 15: end if 16: U := U \ {v i } 17: w_allnlessclique(u & N(v i ); size + w[i]) 18: end while 19: return function w_allnless 20: for i := n downto 1 do 21: w_allnlessclique(s i & N(v i ); w[i]) 22: C[i] :=max 23: end for 24: return Virhekäsittely Ei sisällä virheenkäsittelyä.

26 TEKNINEN MÄÄRITTELY 26 (36) 4.11 Pääohjelma Alla on esitetty pääohjelman vuokaavio. start getparameters() Open File no if formatbinary yes getnbrofverticesfromasciifile() getnbrofverticesfrombinaryfile() allocwcedgetbl() allocwcweighttbl() allocwcresulttbl() fillwcweighttbl() no if formatbinary yes readdimacsbinary() readdimacsascii() //read Graph Close File wclique() freewcedgetbl() freewcweighttbl() freewcresulttbl() Kuva 2. Pääohjelman vuokaavio. end

27 TEKNINEN MÄÄRITTELY 27 (36) Pääohjelman wclique() funktio wclique: WCIntMask[] initialization local copy for options alloccliquetbls() sortcliquetbl no if weighted yes getuwcliques() getwcliques() no if findallmaxcliques yes no if weighted yes cliqueoptions getuwcliques() getwcliques() releasecliquetbls return

28 TEKNINEN MÄÄRITTELY 28 (36) 4.12 Graafin järjestäminen Graafin järjestämisellä pyritään nopeuttamaan varsinaisen algoritmin toimintaa. Tämä tapahtuu siten, että haun alkuvaiheessa maksimaalinen klikin koko pyritään pitämään pienenä, jolloin tähän perustuva haun typistys toimii mahdollisimman tehokkaasti. Solmut järjestetään väritysmenetelmällä siten, että naapurisolmut eivät saa olla samanvärisiä: Solmut Värit a1-an, b1-bn,...,m1-mn A,B,...,M Tietoa siitä, mitkä solmut väritetään samalla värillä ei käytetä, mutta läpikäyntijärjestys talletetaan kokonaislukutaulukkoon, jota varsinainen algoritmi käyttää Painotetun graafin värittäminen Järjestelyn periaate on seuraava: Valitaan painoarvoltaan pienin solmu. Samanpainoisten solmujen tapauksessa valitaan se solmu, jonka naapurien painot ovat suurimmat. Seuraavaksi valitaan solmuja, jotka eivät ole valitun solmun (eivätkä keskenään) naapureita yllämainittujen ehtojen mukaisesti. Nämä solmut "väritetään" samalla värillä ts. ne on listattu valintajärjestyksessä. Poistetaan väritetyt solmut ja päivitetään näiden naapureiden naapuripainot. Toistetaan yllämainitut toimenpiteet niin kauan kuin solmuja riittää Painottamattoman graafin värittäminen Painottamattomalla graafilla väritysperiaate on sama kuin edellä, mutta nyt käytetään valintakriteerinä ainoastaan solmun astelukua, eli solmusta lähtevien kaarien määrää. Poistettaessa väritetyt solmut graafista päivitetään myös näiden naapurien asteluvut.

29 TEKNINEN MÄÄRITTELY 29 (36) 4.13 DIMACS ASCII formaatin lukeminen Alla on esimerkki DIMACS:in ASCII formaatista jota ohjelma lukee syötteenä. c The following lines are all comments c number of vertices : 10 c nonisolated vertices: 9 c number of edges : 18 c This is the last comment line p clq 7 11 e 1 2 e 1 3 e 1 4 e 1 5 e 2 3 e 2 5 e 2 7 e 3 4 e 3 5 e 3 6 e 5 6 n 1 7 n 2 2 n 3 1 n 4 2 n 5 1 n 6 9 n Ohjelman funktiot initcliqueproc -rutiinilla kirjastolle kerrotaan solmujen lukumäärä, T/F tieto järjestämisestä, T/F tieto haetaanko vähintään kokoa S olevia klikkejä, T/F tieto haetaanko maksimiklikkiä, koko S, T/F tieto haetaanko kaikkia klikkejä ja osoitin kirjaston kutsumaan tulostusrutiiniin. /* initcliqueproc(nbrofvertices,reorder,atleastsizes,maxsize,sizes,allcliques,*printcliquestd) */ fillcliquetbl -rutiinilla kirjastolle kerrotaan kaksi solmua, joiden välillä on kaari. /* fillcliquetbl(n1,n2) */ fillweighttbl -rutiinilla kirjastolle kerrotaan solmu ja sen paino. /* fillweighttbl(i,weigth) */ wclique -rutiinilla kerrotaan T/F tiedolla ollaanko laskemassa painotettua vai painottamatonta graafia sekä aloitetaan graafin ratkaiseminen alustusehdoilla. /* wclique(weighted) */

30 TEKNINEN MÄÄRITTELY 30 (36) 5. MUUT ERITYISET TEKNISET RATKAISUT 5.1 Komentorivikutsu Komentorivikutsu, eli komentoriviltä annettava kutsu parametreineen, tapahtuu seuraavan toteutusmallin mukaisesti: wclique [-hir] [--help] [--info] [--reorder] [--format={ascii,binary}] [--size={[+]n,max}] [--type={one,all}] [name] -h, --help -i, --info -r, --reorder tulostaa aputekstin tulostaa haun etenemisen näytölle. solmujen heuristinen järjestäminen --format={ascii,binary} syötetiedoston tyyppi, oletus on ASCII. --size={[+]n,max} haettujen klikkien koko, oletus on max, N := annettu koko, +N := >= annettu koko. --type={one,all} haettujen klikkien lukumäärä, oletus on one. Muutama tarkennus: 1. Painotettu/painottamaton: binaaritiedosto => aina painottamaton, ASCII => selviää tiedoston sisällöstä. 2. Jos syöte tiedoston nimi puuttuu luetaan standardi syöte. 3. Ohjelma tulostaa aina kaikki klikit, yksi klikki per rivi -> standardi tuloste. 5.2 Ohjelman kääntäminen Ohjelman käännöskomento on: gcc wcfinder.c -o wclique O2, missä wclique on ohjelman nimi.

31 TEKNINEN MÄÄRITTELY 31 (36) 6. HYLÄTYT RATKAISUVAIHTOEHDOT 6.1 Bittikarttaesitys Sisäisessä tietorakenteessa luovuttiin bittikarttaesityksestä tehokkuussyistä. 7. VIRHEKÄSITTELY sisältää ainoastaan seuraavat virheenkäsittely ominaisuudet: Syötetiedosto viallinen. Ohjelman suoritus keskeytetään mikäli graafin määrittelyrivi puuttuu tai on viallinen. Ohjelman suoritus keskeytyy myös tilanteessa jos solmujen numerot ovat liian suuria. Muistin loppuminen (tapauksessa että allokointi ei onnistu). Kyseisessä tilanteessa ohjelman suoritus loppuu. Tässä on huomioitavaa että graafin kokoa ei kiinteästi rajoiteta. Muita virhetapauksia varten lopputuotteessa ei ole virheenkäsittelyä. Control-C ja muut epänormaalit ohjelmansuorituksen lopetukset ovat Unix käyttöjärjestelmän toiminnallisuutta. Ohjelma ainoastaan varmistaa että käytönaikaiset tiedostot jäävät eheiksi [unixprog].

32 TEKNINEN MÄÄRITTELY 32 (36) LIITE 1: KÄYTTÄJÄN FUNKTIOT Alla on esitetty kaikki ohjelmassa esiintyvät käyttäjälle tärkeät funktiot. wclique -moduuli: Funktio graafin ratkaisuun. short int wclique(unsigned int nbrofvertices,wc_options *options,unsigned int *edgetbl,unsigned int *weighttbl,char *rescliquetbl,unsigned int *maxclique) NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. Wc_options -parametri määrittää ominaisuuden, jota graafista etsitään. Tietorakenne on kuvattu tarkemmin teknisessä määrittelyssä. EdgeTbl -parametri on osoitin graafin kaaritaulukkoon. Käyttäjän on varattava ja täytettävä muistialue tietorakenteelle ennen funktiokutsua. Kaaritaulukko on kuvattu tarkemmin teknisessä määrittelyssä. WeightTbl -parametri on osoitin graafin solmujen painotaulukkoon. Käyttäjän on varattava ja täytettävä muistialue tietorakenteelle ennen funktiokutsua. ResCliqueTbl -parametri on osoitin tulosklikkiin. Käyttäjän on varattava muistialue tietorakenteelle ennen funktiokutsua. Tietorakenne on kuvattu tarkemmin teknisessä määrittelyssä. MaxClique -parametri on osoitin maksimiklikin kokoon, jonka arvona on maksimiklikin koko siinä tapauksessa, että käyttäjä on pyytänyt laskemaan yhden maksimiklikin. Paluuarvona funktion palauttaa true/false tiedon onnistumisesta tai epäonnistumisesta.

33 TEKNINEN MÄÄRITTELY 33 (36) wcutils -moduuli: Funktio kaaritaulukon varausta varten (funktio myös alustaa taulukon). short int allocwcedgetbl(unsigned int nbrofvertices,unsigned int **tblptr) NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. TblPtr -parametri on osoitin graafin kaaritaulukkoon, jonka funktio palauttaa. Funktio graafin solmujen painotaulukon varausta varten. short int allocwcweighttbl(unsigned int nbrofvertices,unsigned int **tblptr) NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. TblPtr -parametri on osoitin graafin solmujen painotaulukkoon, jonka funktio palauttaa. Funktio tulosklikin taulukon varausta varten. short int allocwcresulttbl(unsigned int nbrofvertices,char **tblptr) NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. TblPtr -parametri on osoitin tulosklikkiin, jonka funktio palauttaa. Funktio kaaritaulukon alustusta varten. void initwcedgetbl(unsigned int nbrofvertices,unsigned int *tblptr) NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. TblPtr -parametri on osoitin graafin kaaritaulukkoon.

34 TEKNINEN MÄÄRITTELY 34 (36) Funktio yhden kaaren lisäämiseksi graafitaulukkoon. void fillwcedgetbl(unsigned int *edgetblptr,unsigned int nbrofvertices,unsigned int vertex1,unsigned int vertex2) EdgeTblPtr -parametri on osoitin graafin kaaritaulukkoon. NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. Vertex1 -parametri on kaaren toisen pään solmu ja Vertex2 -parametri toisen pään solmu. Funktio yhden kaaren poistamiseksi graafitaulukosta. void removewcedgetbl(unsigned int *edgetblptr,unsigned int nbrofvertices,unsigned int vertex1,unsigned int vertex2) EdgeTblPtr -parametri on osoitin graafin kaaritaulukkoon. NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. Vertex1 -parametri on kaaren toisen pään solmun indeksi ja Vertex2 -parametri toisen pään solmun indeksi. Funktio yhden solmun painon lisäämiseksi painotaulukkoon. void fillwcweighttbl(unsigned int *weighttblptr,unsigned int vertex,unsigned int weight) WeightTbl -parametri on osoitin graafin solmujen painotaulukkoon. Vertex -parametri on solmun indeksi. Weight -parametri on solmun paino.

35 TEKNINEN MÄÄRITTELY 35 (36) Funktio graafin solmujen lukumäärän lukemiseksi Dimacs ascii formaatissa olevasta tiedostosta. short int getnbrofverticesfromasciifile(file *f,unsigned int *nbrofvertices) F -parametri on osoitin tiedostoon. NbrOfVertices -parametri on osoitin graafin solmujen lukumäärään, jonka funktio palauttaa. Funktio graafin solmujen lukumäärän lukemiseksi Dimacs binääri formaatissa olevasta tiedostosta. short int getnbrofverticesfrombinaryfile(file *f,unsigned int *nbrofvertices) F -parametri on osoitin tiedostoon. NbrOfVertices -parametri on osoitin graafin solmujen lukumäärään, jonka funktio palauttaa. Funktio graafin kaarien ja solmujen painojen lukemiseksi Dimacs ascii formaatissa olevasta tiedostosta (funktio lisää kaaret ja solmujen painot itsenäisesti kaari- ja solmujen painotaulukoihin). short int readdimacsascii(unsigned int *edgetblptr,unsigned int *weighttblptr,file *f,unsigned int nbrofvertices,short int *weighted) EdgeTblPtr -parametri on osoitin graafin kaaritaulukkoon. WeightTbl -parametri on osoitin graafin solmujen painotaulukkoon. F -parametri on osoitin tiedostoon. NbrOfVertices -parametri määrittää graafin solmujen lukumäärän. Weighted -parametri on osoitin informaation, jolla kerrotaan funktiota kutsuneelle prosessille, onko tiedostosta luettu graafi painotettu (true) vai painottamaton (false).

36 TEKNINEN MÄÄRITTELY 36 (36) Funktio graafin kaarien lukemiseksi Dimacs binääri formaatissa olevasta tiedostosta (funktio lisää kaaret itsenäisesti kaaritaulukkoon). void readdimacsbinary(unsigned int *edgetblptr,file *f,unsigned int nbrofvertices) EdgeTblPtr -parametri on osoitin graafin kaaritaulukkoon. F -parametri on osoitin tiedostoon. NbrOfVertices -parametri määrittää graafin solmujen lukumäärän.

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique TOIMINNALLINEN MÄÄRITTELY PROJEKTITYÖ Tik-.115 SISÄLLYSLUETTELO Sisällysluettelo... Versiohistoria... 1. JOHDANTO... 4 1.1 Tarkoitus ja kattavuus... 4 1. Tuote... 4 1. Määritelmät, termit ja lyhenteet...

Lisätiedot

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique VAATIMUSMÄÄRITTELY PROJEKTITYÖ Tik-76.115 SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria... 3 1. JOHDANTO... 4 1.1 Algoritmi... 4 1.2 Graafi... 4 1.3 Nauty... 5 1.4 Mermaid... 5 2. YLEISKUVAUS...

Lisätiedot

- painottamattoman graafin solmujen järjestäminen. - painotetun graafin solmujen järjestäminen

- painottamattoman graafin solmujen järjestäminen. - painotetun graafin solmujen järjestäminen 1. DEMO TUOTTEEN OMINAISUUKSISTA Tuotteesta demotaan seuraavat asiat: - käyttöliittymä - painottamattoman graafin solmujen järjestäminen - painotetun graafin solmujen järjestäminen - yhden maksimiklikin

Lisätiedot

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique

VAATIMUSMÄÄRITTELY. PROJEKTITYÖ Tik Wclique VAATIMUSMÄÄRITTELY PROJEKTITYÖ Tik-76.115 SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria... 3 1. JOHDANTO... 4 1.1 Algoritmi... 4 1.2 Graafi... 4 1.3 Nauty... 5 1.4 Mermaid... 5 2. YLEISKUVAUS...

Lisätiedot

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique TOIMINNALLINEN MÄÄRITTELY PROJEKTITYÖ Tik-7.115 SISÄLLYSLUETTELO Sisällysluettelo... Versiohistoria... 1. JOHDANTO... 4 1.1 Tarkoitus ja kattavuus... 4 1. Tuote... 4 1. Määritelmät, termit ja lyhenteet...

Lisätiedot

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique

TOIMINNALLINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique TOIMINNALLINEN MÄÄRITTELY PROJEKTITYÖ Tik-.115 SISÄLLYSLUETTELO Sisällysluettelo... Versiohistoria... 1. JOHDANTO... 4 1.1 Tarkoitus ja kattavuus... 4 1. Tuote... 4 1. Määritelmät, termit ja lyhenteet...

Lisätiedot

TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique

TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique TEKNINEN MÄÄRITTELY PROJEKTITYÖ Tik-76.115 SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria... 2 1. JOHDANTO... 3 1.1 Tarkoitus ja kattavuus... 3 1.2 Tuote ja ympäristö... 3 1.3 Määritelmät, merkintätavat

Lisätiedot

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma TKK/DISKO/Tik-76.115 WCLIQUE Projektiryhmä Clique http://www.hut.fi/~jekahkon/wclique/testplan.pdf WCLIQUE Ohjelmistoprojekti WCLIQUE_TP Projektiryhmä Clique: Janne Dufva, 75008T, email: janne.dufva@nokia.com

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä www.niksula.cs.hut.fi/~jjkankaa// Demosovelluksen tekninen määrittely v. 0.6 Päivitetty 11.12.2000 klo 20:26 Mickey Shroff 2 (12) Dokumentin versiohistoria Versio Päivämäärä Tekijä / muutoksen tekijä Selite

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma TKK/DISKO/Tik-76.115 WCLIQUE Projektiryhmä Clique http://www.hut.fi/~jekahkon/wclique/testplan.pdf WCLIQUE Ohjelmistoprojekti WCLIQUE_TP Projektiryhmä Clique: Janne Dufva, 75008T, email: janne.dufva@nokia.com

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique

TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik-76.115 Wclique TEKNINEN MÄÄRITTELY PROJEKTITYÖ Tik-76.115 SISÄLLYSLUETTELO Sisällysluettelo... 2 Versiohistoria... 2 1. JOHDANTO... 3 1.1 Tarkoitus ja kattavuus... 3 1.2 Tuote ja ympäristö... 3 1.3 Määritelmät, merkintätavat

Lisätiedot

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

TIE Tietorakenteet ja algoritmit 261

TIE Tietorakenteet ja algoritmit 261 TIE-20100 Tietorakenteet ja algoritmit 261 12 Graafit Seuraavaksi tutustutaan tietorakenteeseen, jonka muodostavat pisteet ja niiden välille muodostetut yhteydet graafiin. Keskitymme myös tyypillisimpiin

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma

WCLIQUE. Ohjelmistoprojekti. Testaussuunnitelma TKK/DISKO/Tik-76.115 WCLIQUE Projektiryhmä Clique http://www.hut.fi/jekahkon/wclique/testplan.html WCLIQUE Ohjelmistoprojekti Projektiryhmä Clique: Janne Dufva, 75008T, email: janne.dufva@nokia.com, 75014C,

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

Lisätiedot

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu 811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,

Lisätiedot

Loppukurssin järjestelyt C:n edistyneet piirteet

Loppukurssin järjestelyt C:n edistyneet piirteet C! Loppukurssin järjestelyt C:n edistyneet piirteet 30.3.2017 Ohjelmassa Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Esikääntäjä Parametrilistat Funktio-osoittimet Kunniamainintoja Kuura

Lisätiedot

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] = = T [i + 1] 4 return True 5

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

C++11 lambdat: [](){} Matti Rintala

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja

Lisätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

13 Lyhimmät painotetut polut

13 Lyhimmät painotetut polut TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

Määrittelydokumentti

Määrittelydokumentti Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

6.4. Järjestyssuhteet

6.4. Järjestyssuhteet 6.4. Järjestyssuhteet Joukon suhteilla voidaan kuvata myös alkioiden järjestystä tietyn ominaisuuden suhteen. Järjestys on myös kaksipaikkainen suhde (ja on monia erilaisia järjestyksiä). Suhde R joukossa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2011 1 / 37 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Moduli 5: Kehittyneitä piirteitä

Moduli 5: Kehittyneitä piirteitä C! : Kehittyneitä piirteitä 19.4.2016 Aikataulusta 5. harjoituskierroksen määräaika: pe 22.4. Maari-C keskiviikkoisin ja torstaisin (12-14) Ti 26.4. Harjoitustentti (eli kertausluento) Normaalin luennon

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.2.2010 1 / 36 Esimerkki: asunnon välityspalkkio Kirjoitetaan ohjelma, joka laskee kiinteistönvälittäjän asunnon

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

Loppukurssin järjestelyt

Loppukurssin järjestelyt C! Loppukurssin järjestelyt 29.3.2018 Ohjelmassa Yhteenvetoa palautteesta Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Kysyttävää / kerrattavaa 10-kierroksen asioista? Aikatauluista 10. kierroksen

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

Lisätiedot

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008 Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT Jouni Huotari S2008 2 Proseduurit Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

Hohde Consulting 2004

Hohde Consulting 2004 Luento 5: XQuery AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XQuery XQuery uudet funktiot sekvenssit muuttujat Iterointi järjestys suodatus järjestäminen Ehtorakenteet Muita toimintoja www.hohde.com

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Useampitasoiset ADT:t Käytetään esimerkkiohjelmaa Ratkaisuyritys 1 Ratkaisuyritys 2 Lopullinen ratkaisu Lopullisen ratkaisun toteutusyritys Lopullisen ratkaisun oikea toteutus

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot