TEKNINEN MÄÄRITTELY. PROJEKTITYÖ Tik Wclique
|
|
- Kaija Koskinen
- 7 vuotta sitten
- Katselukertoja:
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-.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ätiedotVAATIMUSMÄÄ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
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ätiedotVAATIMUSMÄÄ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ätiedotTOIMINNALLINEN 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ätiedotTOIMINNALLINEN 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ätiedotTEKNINEN 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ätiedotWCLIQUE. 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ätiedotC-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ätiedotDigi-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ätiedotOhjelmoinnin 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ätiedotSisä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ätiedot2. 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ätiedotKä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ätiedotYleistä. 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ätiedotSisä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ätiedot811120P 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ätiedotWCLIQUE. 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ätiedotOhjelmoinnin 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ätiedotTEKNINEN 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ätiedotTaulukot. 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ätiedotOhjelmoinnin 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ätiedotSisä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ätiedotAlgoritmit 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ätiedotIDL - 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ätiedot1. (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ätiedot12. 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ätiedotATK 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ätiedotTIE 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ätiedotAlgoritmit 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ätiedotTAMPEREEN 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ätiedot815338A 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ätiedotPerusteet. 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotWCLIQUE. 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ätiedot811120P 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ätiedotTietueet. 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ätiedotTietorakenteet 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ätiedotPerusteet. 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ätiedotOhjelmoinnin 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ätiedotOhjelmassa 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ätiedot811312A 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ätiedot811312A 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ätiedotLoppukurssin 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ätiedotTietorakenteet, 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ätiedot811312A 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ätiedot815338A 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ätiedotC++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ätiedotAlgoritmit 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ätiedot10. 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ätiedotTiedostot. 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ätiedotAlgoritmit 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ätiedotLyhyt 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ätiedot13 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ätiedotOhjelmoinnin 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ätiedotOsoitin 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ätiedotMerkkijono 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ätiedot2) 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ätiedotTAMPEREEN 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ätiedotTietorakenteet 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ätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
LisätiedotOhjelmoinnin 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ätiedotOhjelmassa 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ätiedotMäärittelydokumentti
Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta
LisätiedotC-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ätiedot6.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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedot812347A 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ätiedot811312A 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ätiedotOhjelmoinnin 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ätiedotModuli 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ätiedotOhjelmoinnin 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ätiedotZeon 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ätiedotOhjelmoinnin 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ätiedotLuento 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ätiedotLoppukurssin 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ätiedotMetodit. 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ätiedot811312A 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ätiedot11. 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ätiedotTietorakenteet 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ätiedotProseduurit, 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ätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotPROSEDUURIT, 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ätiedotHohde 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ätiedot815338A 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ätiedotTietorakenteet 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ätiedot811120P 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ätiedotSisä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ätiedotA 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ätiedotRakenteiset 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ätiedotOhjelmointiharjoituksia 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ätiedotOhjelmointitaito (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ätiedotTietorakenteet 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ätiedot1. 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot58131 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