Algoritmit 1. Luento 9 Ti Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Luento 8 Ke Timo Männikkö

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Algoritmit 1. Luento 14 Ke Timo Männikkö

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Johdatus graafiteoriaan

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Tieto- ja tallennusrakenteet

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

13 Lyhimmät painotetut polut

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

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.

A TIETORAKENTEET JA ALGORITMIT

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

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Johdatus verkkoteoriaan 4. luento

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

T : Max-flow / min-cut -ongelmat

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Diskreetit rakenteet

Algoritmit 2. Luento 4 To Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

TIE Tietorakenteet ja algoritmit 261

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Algoritmit 1. Luento 1 Ti Timo Männikkö

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Johdatus verkkoteoriaan luento Netspace

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Mat Lineaarinen ohjelmointi

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 5 Ti Timo Männikkö

Graafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005

Algoritmit 2. Luento 13 Ti Timo Männikkö

Lyhin kahden solmun välinen polku

Algoritmit 2. Luento 12 To Timo Männikkö

Malliratkaisut Demot

Johdatus graafiteoriaan

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

Algoritmit 1. Luento 12 Ti Timo Männikkö

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Datatähti 2019 loppu

Algoritmit 1. Luento 3 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Numeeriset menetelmät

Algoritmit 2. Luento 9 Ti Timo Männikkö

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Silmukkaoptimoinnista

Johdatus verkkoteoriaan luento Netspace

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

Harjoitus 3 ( )

Algoritmit 2. Luento 10 To Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

PARITUS KAKSIJAKOISESSA

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

Malliratkaisut Demot

Numeeriset menetelmät

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Harjoitus 1 ( )

Turingin koneen laajennuksia

j n j a b a c a d b c c d m j b a c a d a c b d c c j

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

isomeerejä yhteensä yhdeksän kappaletta.

Kognitiivinen mallintaminen 1

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

9. Graafit Graafin abstrakti tietotyyppi

Mat Lineaarinen ohjelmointi

Transkriptio:

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 star -rakenne Saavutettavat solmut Verkon läpikäynti Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 2/34

Graafit ja verkot Solmujen joukko N Kaarien joukko A Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 3/34

Graafit ja verkot Suunnattu graafi: Kaarilla suunta Alkusolmu ja loppusolmu Suuntaamaton graafi: Kaarilla ei ole suuntaa Molemmat suunnat tasa-arvoisia Verkko: Solmuihin tai kaariin liittyy muita kuvauksia Kaaren pituus, kaaren kapasiteetti, jne. Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 4/34

Kaaritaulukko Taulukko verkon kaarista (jossain järjestyksessä) Jokaisesta kaaresta tallennettu alkusolmu, loppusolmu ja muut tiedot, kuten esimerkiksi pituus Hyvin yksinkertainen tallennusrakenne Vaatii muistitilaa vakion verran jokaista kaarta kohden Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 5/34

Bittimatriisi Puhdas graafi: Vain solmuja ja kaaria Oletetaan, että ei rinnakkaisia kaaria Bittimatriisi: Solmuja n kpl, numeroidaan 0, 1,..., n-1 Matriisin alkio B ij = 1, jos on kaari solmusta i solmuun j, muuten B ij = 0 Suuntaamattomilla graafeilla bittimatriisi on symmetrinen Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 6/34

Esimerkki: Bittimatriisi 1 0 2 4 3 0 1 2 3 4 -------------- 0 0 1 0 1 0 1 0 0 1 1 0 2 1 1 0 1 0 3 0 0 0 0 1 4 0 0 1 0 0 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 7/34

Kaarien pituusmatriisi Verkko: Kaarilla on pituus Oletetaan, että ei rinnakkaisia kaaria Pituusmatriisi: Solmuja n kpl, numeroidaan 0, 1,..., n-1 Matriisin alkio d ij = solmusta i solmuun j johtavan kaaren pituus Jos kaarta ei ole, asetetaan d ij = (käytännössä jokin suuri luku M) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 8/34

Esimerkki: Pituusmatriisi 1 25 3 18 24 16 16 0 17 27 2 4 31 20 0 1 2 3 4 ------------------- 0 0 24 M 16 M 1 M 0 17 25 M 2 31 18 0 27 M 3 M M M 0 16 4 M M 20 M 0 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 9/34

Matriisien tilantarve Muistitilaa tarvitaan n 2 Suurilla ja harvoilla verkoilla vie liikaa tilaa (suurin osa matriisin alkioista lukuja 0 tai M) Solmun naapureita määrättäessä joudutaan käymään läpi matriisin koko rivi (vaikka naapureita olisi vain muutama) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 10/34

Verkon lyhimmät polut Suunnattu verkko, jossa jokaisella kaarella k on pituus l(k) Pituus voi olla myös negatiivinen Mutta verkossa ei saa olla silmukkaa, jonka pituus on negatiivinen Tehtävänä etsiä lyhimmät polut verkon kaikkien solmuparien välillä Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 11/34

Verkon lyhimmät polut Floydin menetelmä: Tallennusrakenteeksi sopii pituusmatriisi d = pituusmatriisi D = lyhimpien etäisyyksien matriisi Periaate: Tutkitaan solmunparien välistä etäisyyttä, kun polku kulkee ns. välisolmujen kautta Aluksi välisolmuja ei ole, sitten yksi välisolmu, sitten kaksi välisolmua jne. Yleisesti, kun välisolmuja ovat 0, 1,..., k, lisätään solmu k+1 välisolmuksi Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 12/34

Floydin menetelmä 1. Alustus: Asetetaan D ij = d ij kaikilla i ja j 2. Toistetaan kaikilla k = 0, 1,..., n-1: Toistetaan kaikilla pareilla i,j = 0, 1,..., n-1: Jos D ik + D kj < D ij, asetetaan D ij = D ik + D kj Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 13/34

Floydin menetelmä Algoritmin päätyttyä: Matriisissa D on lyhimpien polkujen pituudet Ensimmäinen solmu lyhimmällä polulla i j on se solmu k, jolla D ij = d ik + D kj Aikavativuus: Kolme sisäkkäistä n:stä riippuvaa silmukkaa Aikavaativuus O(n 3 ) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 14/34

Lähtevien ja tulevien kaarien listat Tietueet: Jokaista solmua kohti yksi solmutietue Jokaista kaarta kohti yksi kaaritietue Listat: Jokaisella solmulla lista siitä lähtevistä kaarista Jokaisella solmulla lista siihen tulevista kaarista Kaarien järjestys listoissa yleensä vapaa (Voidaan toteuttaa esimerkiksi vain lähtevien kaarien listat ja jättää tulevien kaarien listat pois) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 15/34

Lähtevien ja tulevien kaarien listat Sallii rinnakkaiset kaaret Kaaret, joiden alku- ja loppusolmu sama, voidaan periaatteessa myös esittää (mutta algoritmeissa hankalia käsitellä) Voidaan käyttää myös suuntaamattomille verkoille: Annetaan kaarille mielivaltainen suunta Solmusta lähtevät ja siihen tulevat kaaret käsitellään tasa-arvoisina Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 16/34

Solmutietue Solmutietueen kenttiä: Osoitin lähtevien kaarien listan ensimmäiseen kaareen: ffwa Osoitin tulevien kaarien listan ensimmäiseen kaareen: fbwa Osoitin seuraavaan solmuun, jos solmut linkitetty listaksi Muut solmukohtaiset tiedot Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 17/34

Kaaritietue Kaaritietueen kenttiä: Osoitin kaaren alkusolmuun: tail Osoitin kaaren loppusolmuun: head Osoitin seuraavaan kaareen, jolla sama alkusolmu: nxfw Osoitin seuraavaan kaareen, jolla sama loppusolmu: nxbw Muut kaarikohtaiset tiedot (esimerkiksi pituus) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 18/34

Esimerkki: Kaarien listat 0 1 0 3 2 3 1 2 4 5 solmun lähtevät tulevat numero kaaret kaaret 0 0, 1 1 4, 2 3, 0 2 3, 5 1, 2 3 5, 4 (Huom: Kaaret eivät ole listoissa numerojärjestyksessä) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 19/34

Esimerkki taulukoilla 0 1 0 3 2 3 1 2 Solmut Kaaret ffwa fbwa tail head nxfw nxbw pit ---------- --------------------------- 0 0 NIX 0 0 1 1 NIX 43 1 4 3 1 0 2 NIX 2 24 2 3 1 2 1 2 NIX NIX 26 3 NIX 5 3 2 1 5 0 32 4 1 3 2 NIX 15 5 2 3 NIX 4 17 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 20/34 4 5

Toteutus dynaamisesti solmu kaari lähtevien kaarien lista tulevien kaarien lista loppusolmu seur. tuleva kaari seur. lähtevä kaari alkusolmu Listojen tilantarve: Solmuja n kpl ja kaaria m kpl Osoittimia 2n + 4m kpl Lisäksi muut tallennettavat tiedot/osoittimet Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 21/34

Forward star -rakenne Kaaritaulukko: Taulukkopohjainen tivistetty versio lähtevien kaarien listasta Kaaret järjestetty alkusolmun tunnuksen mukaan kasvavaan järjestykseen Samasta solmusta lähtevät kaaret taulukossa peräkkäin Kaarista annettu vain loppusolmun tunnus ja tarvittavat kaarikohtaiset tiedot (esimerkiksi pituus) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 22/34

Forward star -rakenne Solmutaulukko: s[i] = solmusta i lähtevän ensimmäisen kaaren paikka kaaritaulukossa Muut samasta solmusta lähtevät kaaret seuraavissa paikoissa s[i+1] - s[i] = solmusta i lähtevien kaarien lukumäärä Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 23/34

Forward star -rakenne Solmutaulukko (jatkuu): Taulukossa n+1 paikkaa (yksi ylimääräinen) Viimeisessä paikassa viimeistä kaarta seuraavan paikan indeksi s[i+1] - s[i] = solmusta i lähtevien kaarien lukumäärä Kaava toimii myös solmun i = n-1 kohdalla Jos solmusta i ei lähde yhtään kaarta, on s[i+1] = s[i] Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 24/34

Esimerkki: Forward star s head pit ----- --------- 0 0 0 1 43 1 2 1 2 24 2 4 2 2 26 3 6 3 3 15 4 6 4 1 32 5 3 17 6 NIX NIX 0 1 0 3 2 3 1 2 4 5 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 25/34

Forward star -rakenne Tilantarve: n indeksiä solmutaulukossa m + 1 (tai m) kaarta kaaritaulukossa Sopii tallennusrakenteeksi: Fordin ja Fulkersonin menetelmä (lyhimpien polkujen algoritmi) Saavutettavissa olevien solmujen selvittäminen Vastaavasti voitaisiin esittää solmuihin tulevat kaaret: backward star -rakenne Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 26/34

Saavutettavat solmut Jos solmusta a johtaa solmuun b ainakin yksi polku, on solmu b saavutettavissa solmusta a Tehtävänä on selvittää, mitkä solmut ovat saavutettavissa annetusta lähtösolmusta a = lähtösolmu T = tutkittavien solmujen joukko R = saavutettavien solmujen joukko Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 27/34

Saavutettavat solmut 1. Alustus: Asetetaan T = {a} ja R = {a} 2. Jos joukko T on tyhjä, lopetetaan, muuten poistetaan joukosta T jokin solmu x 3. Käydään läpi kaikki solmusta x lähtevät kaaret: Jos kaaren loppusolmu j kuuluu joukkoon R, ei tehdä mitään Muuten lisätään loppusolmu j joukkoihin T ja R Jatketaan kohdasta 2 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 28/34

Verkon yhtenäiset komponentit Edellinen algoritmi: Kun kohdassa 2 joukko T tulee tyhjäksi, on löydetty yksi verkon yhtenäinen komponentti Jos kaikkia verkon solmuja ei ole vielä tutkittu, valitaan jokin tutkimaton solmu uudeksi lähtösolmuksi Saadaan toinen yhtenäinen komponentti Näin jatkamalla saadaan selville kaikki yhtenäiset komponentit Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 29/34

Verkon läpikäynti Verkon läpikäynti: Kaikkien solmujen tai kaarien tutkiminen tai käsittely jossain järjestyksessä Tarvitaan mm. edellisessä algoritmissa Joukon T toteutustapa vaikuttaa solmujen läpikäyntijärjestykseen (Mutta lopputuloksen kannalta samantekevää, missä järjestyksessä solmut tutkitaan) Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 30/34

Verkon läpikäynti Leveyshaku (breadth-first search): Joukko T toteutettu jonona Seuraavana käsitellään se T:n solmu, joka on ollut siellä kauimmin Käsitellään solmut, jotka ovat yhden kaaren päässä lähtösolmusta Käsitellään solmut, jotka ovat kahden kaaren päässä lähtösolmusta Jne. Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 31/34

Verkon läpikäynti Syvyyshaku (depth-first search): Joukko T toteutettu pinona Seuraavana käsitellään se T:n solmu, joka on lisätty sinne viimeksi Läpikäynti jatkuu viimeksi käsitellystä solmusta eteenpäin Kun ei enää päästä eteenpäin, palataan jatkamaan jostain aikaisemmin käsitellystä solmusta Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 32/34

Esimerkki: Leveyshaku 14 5 6 10 15 16 7 11 2 3 8 12 1 4 9 13 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 33/34

Esimerkki: Syvyyshaku 16 15 13 14 11 12 10 9 2 3 5 7 1 4 6 8 Algoritmit 1 Kevät 2017 Luento 9 Ti 7.2.2017 34/34