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



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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Diskreetit rakenteet

10. Painotetut graafit

Johdatus graafiteoriaan

Harjoitus 3 ( )

Harjoitus 1 ( )

Malliratkaisut Demot

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

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

Harjoitus 3 ( )

Algoritmit 2. Luento 11 Ti Timo Männikkö

13 Lyhimmät painotetut polut

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

Malliratkaisut Demot

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

Mat Lineaarinen ohjelmointi

Johdatus verkkoteoriaan 4. luento

Kombinatorinen optimointi

Johdatus graafiteoriaan

Algoritmi on periaatteellisella tasolla seuraava:

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

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Harjoitus 1 ( )

Kokonaislukuoptimointi

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen

Esimerkkejä kokonaislukuoptimointiongelmista

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

TIE Tietorakenteet ja algoritmit 261

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

10. Painotetut graafit

Harjoitus 4 ( )

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Silmukkaoptimoinnista

Datatähti 2019 loppu

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

Malliratkaisut Demot

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Algoritmit 2. Luento 2 To Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 7 Ti Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Mat Lineaarinen ohjelmointi

T : Max-flow / min-cut -ongelmat

Optimoinnin sovellukset

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

PARITUS KAKSIJAKOISESSA

Mat Lineaarinen ohjelmointi

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

Rinnakkaistietokoneet luento S

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

Lyhin kahden solmun välinen polku

Johdatus verkkoteoriaan luento Netspace

v 8 v 9 v 5 C v 3 v 4

Kustannustehokkaat riskienhallintatoimenpiteet kuljetusverkostossa (Valmiin työn esittely)

Totaalisesti unimodulaariset matriisit voidaan osoittaa olevan rakennettavissa oleellisesti verkkomalleihin liittyvistä matriiseista

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2

Johdatus verkkoteoriaan luento Netspace

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

9. Graafit Graafin abstrakti tietotyyppi

Taulun avoimista haaroista saadaan kelvolliset lausejoukot

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Verkon värittämistä hajautetuilla algoritmeilla

Kysymys: Voidaanko graafi piirtää tasoon niin, että sen viivat eivät risteä muualla kuin pisteiden kohdalla?

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

Tiraka, yhteenveto tenttiinlukua varten

Graafin virittävä puu 1 / 20

Algoritmit 1. Luento 12 Ti Timo Männikkö

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

0 v i v j / E, M ij = 1 v i v j E.

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

4. Luennon sisältö. Lineaarisen optimointitehtävän ratkaiseminen Simplex-menetelmä

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Tentissä on viisi tehtävää, jotka arvosteellaan asteikolla 0-6. Tehtävien alakohdat ovat keskenään samanarvoisia ellei toisin mainita.

Tietorakenteet ja algoritmit - syksy

3.4 Peruutus (backtracking)

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.

Rakenteellinen tasapaino ja transitiivisyys

Transkriptio:

Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut: Haaraan liittyvät solmut Kaaren alku- ja loppusolmut: Kaareen liittyvät solmut Solmun aste: Solmuun liittyvien haarojen lukumäärä 1

b 2 1 d e c a 3 4 f 5 Suuntaamaton graafi G(N, A) Solmut N = {1,2,3,4,5} Haarat A = {a, b, c, d, e, f} = {(1,4),(1,2),(1,3),(2,3),(2,3),(3,5)} 2

2 b 1 d e c a 3 4 f 5 Suunnattu graafi G(N, A) Solmut N = {1,2,3,4,5} Kaaret A = {a, b, c, d, e, f} = {(1,4),(2,1),(1,3),(2,3),(3,2),(5,3)} 3

Polku: Katkeamaton jono solmuja ja haaroja/kaaria Silmukka: Polku, jonka alku- ja loppusolmut ovat samat Yksinkertainen polku: Solmu esiintyy polussa vain kerran Yhdistetyt solmut: Solmujen välillä on ainakin yksi polku 4

Yhtenäinen (yhdistetty) graafi: Kaikki solmuparit ovat yhdistettyjä Renkaaton graafi: Ei yhtään silmukkaa Puu: Graafi, joka on yhtenäinen ja renkaaton 5

Verkko: Graafi, jonka solmuihin ja haaroihin/kaariin liittyy numeerisia arvoja (esimerkiksi pituus, kustannus tai kapasiteetti) Virtaus: Tavara tms. kulkee solmusta toiseen kaaria/haaroja pitkin Lähdesolmu: Solmu, josta tulee lisää tavaraa verkkoon Viemärisolmu: Solmu, josta tavaraa poistuu verkosta Virtauksen säilyvyys: Solmuun saapuva ja siitä lähtevä virtaus ovat samat (paitsi lähde- ja viemärisolmuissa) 6

Tuotannon ajoitus Tuotetta valmistetaan usean tuotantokauden aikana Tuotteen tarve kaudella i on d i Tuotetta voidaan valmistaa myös varastoon Valmistuksesta ja varastoinnista aiheutuvat tietyt kustannukset Tavoite: Määrää tuotteen valmistusmäärät kullakin kaudella siten, että kokonaiskustannukset minimoituvat 7

x i = valmistusmäärä kaudella i v i = varaston koko kaudelta i kaudelle i + 1 Solmut kuvaavat kausia, solmu 0 kuvaa alkutilannetta Kaaret kuvaavat tuotteen kulkeutumista kaudelta toiselle Jokaiseen kaareen liittyy joko valmistuskustannus tai varastointikustannus 8

d 1 + d 2 + d 3 + d 4 0 x 1 x 2 x 3 x 4 v 1 v 2 v 3 1 2 3 4 d 1 d 2 d 3 d 4 Tehtävä: Etsi minimihintainen virtaus verkon läpi 9

Lukujärjestysongelma Seminaarissa kuusi tunnin esitelmää Seminaarin kokonaiskesto neljä tuntia Esitelmän 1 kanssa ei samanaikaisesti esitelmää 3 Esitelmän 3 kanssa ei samanaikaisesti esitelmiä 1, 4, 5, 6 Esitelmän 4 kanssa ei samanaikaisesti esitelmiä 3, 5, 6 Esitelmän 5 kanssa ei samanaikaisesti esitelmiä 3, 4, 6 Esitelmän 6 kanssa ei samanaikaisesti esitelmiä 3, 4, 5 Tavoite: Järjestä esitelmät siten, että rajoitteet toteutuvat 10

Solmut kuvaavat esitelmiä Solmut yhdistetään haaralla, jos vastaavat esitelmät eivät saa olla samanaikaisesti Neljä eri tunnusta, yksi kullekin seminaarin tunnille 11

1 2 3 4 5 6 Tehtävä: Liitä jokaiseen solmuun yksi tunnus siten, että kahdella solmulla ei saa olla sama tunnus, jos niiden välillä on haara 12

Jakeluongelma Pizzerialla on kotiinkuljetusta varten käytössä n autoa Tavoite: Toimita pizzat asiakkaille siten, että toimituksille luvattu aikaraja ei ylity 13

Solmut kuvaavat pizzeriaa ja eri asiakkaita Haarat kuvaavat lyhimpiä reittejä eri solmujen välillä Jokaiseen haaraan liitetään ajoaika kyseisellä reitillä (= haaran pituus) Tehtävä: Muodosta n silmukkaa siten, että pizzeriasolmu on mukana jokaisessa silmukassa jokainen asiakassolmu on mukana jossain silmukassa jokaisen silmukan pituus viimeiseen asiakassolmuun asti ei ylitä aikarajaa 14

Koneen vaihto-ongelma Tarkastellaan n:ää aikaperiodia Jokaisen periodin alussa vanha kone voidaan vaihtaa uuteen tai säilyttää vanha kone Kun hankitaan uusi kone periodin i alussa ja myydään se periodin j alussa, siitä aiheutuu kustannus c ij Tavoite: Määrää, milloin kone vaihdetaan, jotta kokonaiskustannukset minimoituvat 15

Solmut kuvaavat periodeja 1,..., n + 1 Kaari (i, j) tarkoittaa, että kone hankitaan periodin i alussa ja myydään periodin j alussa Jokaiseen kaareen (i, j) liitetään vastaava kustannus c ij (= kaaren pituus) 16

1 2 3 4 5 Tehtävä: Etsi lyhin reitti solmusta 1 solmuun n + 1 17

Toimintaverkko Projektissa on n osatehtävää Osatehtävät on suoritettava tiettyjen sääntöjen mukaisessa järjestyksessä Osatehtävän i suoritusaika on t i Tavoite: Määrää osatehtävien suoritusjärjestys siten, että kokonaissuoritusaika minimoituu 18

s i = osatehtävän i aloitusaika Solmut kuvaavat osatehtäviä Solmu 0 on projektin aloitusosatehtävä, solmu n + 1 lopetusosatehtävä Kaari (i, j) tarkoittaa, että osatehtävä i on saatava valmiiksi ennen osatehtävän j aloittamista Jokaiseen kaareen (i, j) liitetään rajoite s j s i + t i 19

0 1 2 3 4 5 6 Tehtävä: Ratkaise min s n+1 s 0 kun s j s i + t i (i, j) A 20

Tavallisesti kuitenkin toimintaverkko kuvataan seuraavasti: Solmut kuvaavat osatehtävien alku- ja lopputapahtumia Kaaret kuvaavat osatehtäviä Jokaiseen kaareen liitetään osatehtävän kesto (= kaaren pituus) Kaikkien tiettyyn solmuun päättyvien osatehtävien täytyy olla suoritettu ennen kuin mikään kyseisestä solmusta alkava osatehtävä voidaan aloittaa Tehtävä: Etsi pisin polku ensimmäisestä solmusta viimeiseen solmuun 21

Graafien ja verkkojen tietorakenteita Naapurimatriisit Insidenssimatriisit Haara- ja kaarilistat Naapurilistat 22

1 2 3 4 5 Naapurimatriisi, suuntaamaton graafi: HUOM: Symmetrinen 1 2 3 4 5 1 0 1 1 0 0 2 1 0 0 1 1 3 1 0 0 1 1 4 0 1 1 0 1 5 0 1 1 1 0 23

1 2 3 4 5 Naapurimatriisi, suunnattu graafi: 1 2 3 4 5 1 0 1 1 0 0 2 0 0 0 0 1 3 0 0 0 1 0 4 0 1 0 0 1 5 0 0 1 0 0 24

1 2 3 4 5 Insidenssimatriisi, suuntaamaton graafi: (1,2) (1,3) (2,4) (2,5) (3,4) (3,5) (4,5) 1 1 1 0 0 0 0 0 2 1 0 1 1 0 0 0 3 0 1 0 0 1 1 0 4 0 0 1 0 1 0 1 5 0 0 0 1 0 1 1 HUOM: Täysin unimodulaarinen 25

1 2 3 4 5 Insidenssimatriisi, suunnattu graafi: (1,2) (1,3) (2,5) (3,4) (4,2) (4,5) (5,3) 1 1 1 0 0 0 0 0 2 1 0 1 0 1 0 0 3 0 1 0 1 0 0 1 4 0 0 0 1 1 1 0 5 0 0 1 0 0 1 1 HUOM: Täysin unimodulaarinen 26

1 6 12 2 2 4 3 2 5 4 7 5 Haaralista, suuntaamaton verkko: Päätesolmu Päätesolmu Pituus (1,2) 1 2 6 (1,3) 1 3 12 (2,4) 2 4 2 (2,5) 2 5 4 (3,4) 3 4 2 (3,5) 3 5 5 (4,5) 4 5 7 27

1 6 12 2 2 2 4 5 3 4 7 5 Kaarilista, suunnattu verkko: Alkusolmu Loppusolmu Pituus (1,2) 1 2 6 (1,3) 1 3 12 (2,5) 2 5 4 (3,4) 3 4 2 (4,2) 4 2 2 (4,5) 4 5 7 (5,3) 5 3 5 28

1 2 3 4 5 Naapurilista, suuntaamaton graafi: Naapurisolmut 1 2 3 2 1 4 5 3 1 4 5 4 2 3 5 5 2 3 4 29

1 2 3 4 5 Naapurilista, suunnattu graafi: Naapurisolmut (lähtevät kaaret) 1 2 3 2 5 3 4 4 2 5 5 3 Naapurisolmut (tulevat kaaret) 1 2 1 4 3 1 5 4 3 5 2 4 30

Graafin tai verkon virittävä puu Aligraafi: Graafi, jossa on mukana osa (tai kaikki) solmuista ja osa (tai kaikki) haaroista Virittävä aligraafi: Aligraafi, jossa on mukana kaikki solmut Yhtenäinen virittävä aligraafi: Virittävä aligraafi, joka on yhtenäinen Minimaalinen yhtenäinen virittävä aligraafi: on mukana mahdollisimman vähän haaroja Yhtenäinen virittävä aligraafi, jossa 31

Puu: Graafi, joka on yhtenäinen ja renkaaton Yhtenäisen graafin minimaalinen yhtenäinen virittävä aligraafi on puu = Graafin virittävä puu (Verkon virittävä puu vastaavasti) Graafi on yhtenäinen, jos sillä on olemassa virittävä puu 32

Esimerkki Tiedetään, ketkä kylän asukkaista keskustelevat keskenään Tavoite: Selvitä, saavuttaako juoru kaikki kylän asukkaat Solmut kuvaavat asukkaita Haara (i, j) tarkoittaa, että asukkaat i ja j keskustelevat keskenään Tehtävä: Tutki, onko graafilla virittävää puuta 33

Esimerkki Rakennetaan kaapeliyhteyksiä eri kaupunkien välille Jokaisen kaupungin on oltava mukana kaapeliverkossa Kun rakennetaan yhteys kaupunkien i ja j välille, siitä aiheutuu kustannus c ij Tavoite: Määrää rakennettavat kaapeliyhteydet siten, että kokonaiskustannukset minimoituvat 34

Solmut kuvaavat kaupunkeja Haara (i, j) tarkoittaa, että kaupunkien i ja j välille voitaisiin rakentaa kaapeliyhteys Jokaiseen haaraan (i, j) liitetään vastaava kustannus c ij (= haaran pituus) Tehtävä: Etsi verkon virittävä puu, jonka kokonaispituus on mahdollisimman pieni 35

Virittävän puun etsiminen Aluksi puu on tyhjä, jokainen solmu muodostaa oman komponenttinsa ja kaikki haarat (tai kaaret) ovat tutkimattomia. 1. Jos tutkimattomia haaroja ei ole jäljellä, niin lopeta. Muuten valitse jokin haara ja merkitse se tutkituksi. 2. Jos valitun haaran molemmat päätesolmut kuuluvat samaan komponenttiin, jatka kohdasta 1. Muuten lisää haara puuhun ja yhdistä päätesolmujen komponentit samaksi komponentiksi. 3. Jos jäljellä on vain yksi komponentti, niin lopeta. Muuten jatka kohdasta 1. 36

Jos algoritmin päättyessä jäljellä on vain yksi komponentti, virittävä puu on löytynyt Jos halutaan löytää verkon lyhin virittävä puu, niin haarat valitaan pituuden mukaan kasvavassa järjestyksessä Jos halutaan löytää verkon pisin virittävä puu, niin haarat valitaan pituuden mukaan laskevassa järjestyksessä 37

Lyhimmät polut Lyhimpien polkujen tehtäviä: Etsi lyhin polku kahden solmun välillä Etsi lyhimmät polut jostain solmusta verkon kaikkiin muihin solmuihin Etsi lyhimmät polut verkon kaikkien solmujen välillä Seuraavassa oletetaan, että verkko on suunnattu, yhdistetty ja kaarien pituudet ovat kokonaislukuja 38

Esimerkki Pakkausongelma: max a 1 x 1 + + a n x n kun w 1 x 1 + + w n x n W x 1,..., x n N Vastaava lyhimmän polun tehtävä: Solmut 0,1,..., W Jokaista tavaraa j kohti kaaret (i, i + w j ), i = 0,1,..., W w j, joiden pituus on a j Lisäksi kaaret (i, i + 1), i = 0,1,..., W 1, joiden pituus on 0 (vastaavat puutemuuttujaa) Tehtävä: Etsi lyhin polku solmusta 0 solmuun W 39

Lyhimpien etäisyyksien puu Lyhimpien etäisyyksien puu: Sellainen verkon virittävä puu, jossa polut juurisolmusta s puun muihin solmuihin ovat samat kuin verkon lyhimmän etäisyyden polut solmusta s verkon muihin solmuihin Olkoon s = i 1 i 2 i p = t lyhin polku solmusta s solmuun t = s = i 1 i 2 i j on lyhin polku solmusta s solmuun i j kaikilla j = 2,..., p 1 = On aina olemassa lyhimpien etäisyyksien puu 40

Lyhimmät polut yhdestä lähtösolmusta alkaen Solmuihin liitetään tunnuksia (etäisyys lähtösolmusta, solmun edeltäjäsolmu, jne.) Tunnukset voivat olla väliaikaisia tai lopullisia Väliaikaisia tunnuksia muutetaan iteratiivisesti Tunnuksen asettavat menetelmät: Joka iteraatiolla yksi väliaikainen tunnus kiinnitetään lopulliseksi Tunnusta korjaavat menetelmät: Kaikki väliaikaiset tunnukset kiinnitetään kerralla lopullisiksi sitten, kun muutoksia ei enää voi tehdä 41

Dijkstran menetelmä Tunnuksen asettava menetelmä Oletus: Kaarien pituudet d ij ovat ei-negatiivisia Tunnukset: d(i) = jonkin polun pituus lähtösolmusta s solmuun i e(i) = solmun i edeltäjäsolmu kyseisellä polulla Solmut jaetaan kahteen ryhmään: P = {solmut, joiden tunnukset ovat lopullisia} T = {solmut, joiden tunnukset ovat väliaikaisia} 42

1. Aluksi P =, T = N, d(s) = 0 ja d(i) = kaikilla i T \ {s}. 2. Jos P = N, niin lopeta. Muuten valitse jokin solmu i T siten, että d(i) = min{d(j) j T }. Kaikilla j T siten, että on olemassa (i, j) A tee seuraavaa: Jos d(i) + d ij < d(j), niin aseta d(j) = d(i) + d ij ja e(j) = i. 3. Kiinnitä solmun i tunnukset lopullisiksi, ts. aseta P = P {i} ja T = T \ {i}. Jatka kohdasta 2. 43

Algoritmin päätyttyä: Lyhin etäisyys lähtösolmusta s solmuun i on d(i) Vastaava polku on i e(i) e(e(i)) s Jos halutaan löytää lyhin polku lähtösolmusta s johonkin tiettyyn solmuun t, algoritmi voidaan lopettaa, kun solmun t tunnukset on kiinnitetty lopullisiksi 44

Solmuja n kpl Yhdellä iteraatiolla valitaan yksi solmu, jonka tunnukset ovat väliaikaisia = n operaatiota Yhdellä iteraatiolla kiinnitetään yhden solmun tunnukset lopullisiksi = n iteraatiota = Algoritmin suoritusaika (laskennallinen vaativuus) on O(n 2 ) 45

Dialin toteutustapa: Solmun valintaan kuluvaa aikaa pienennetään pitämällä joukon T solmut lajiteltuina väliaikaisten tunnusten d(i) mukaan kasvavassa järjestyksessä Käytössä on joukko lokeroita, jotka on numeroitu 0,1,2,... Lokeroon k tallennetaan ne joukon T solmut, joilla d(i) = k (jos d(i) =, solmua ei tarvitse tallentaa) = Valittava solmu löytyy ensimmäisestä epätyhjästä lokerosta 46

Olkoon C pisimmän kaaren pituus = Jokaisen solmun lopullinen d(i) on pienempi kuin nc = nc + 1 lokeroa riittää varmasti Jokaisella iteraatiokierroksella on d(i) d(j) d(i) + C kaikilla j T siten, että d(j) = Vain lokerot d(i), d(i) + 1,..., d(i) + C ovat epätyhjiä = C + 1 lokeroa riittää 47

Optimaalisuusehdot Olkoot d ij kaarien (i, j) A pituudet (voivat olla myös negatiivisia) Oletetaan, että verkossa ei ole silmukkaa, jonka pituus on negatiivinen Etäisyystunnukset d(i) ovat lyhimpien polkujen etäisyyksiä lähtösolmusta s solmuihin i, jos ja vain jos d(j) d(i) + d ij (i, j) A 48

Silmukka, jonka pituus on negatiivinen: Olkoon C = {silmukan kaaret} ja (i,j) C d ij < 0 Oletetaan, että optimaalisuusehdot ovat voimassa = d(j) d(i) + d ij (i, j) C = d(i) d(j) + d ij 0 (i, j) C = = (i,j) C (i,j) C (d(i) d(j) + d ij ) 0 d ij 0 = Ristiriita = Optimaalisuusehdot eivät voi olla voimassa 49

Optimaalisuusehtoihin perustuva menetelmä Tunnusta korjaava menetelmä Oletus: Verkossa ei ole silmukkaa, jonka pituus on negatiivinen Tunnukset: d(i) = jonkin polun pituus lähtösolmusta s solmuun i e(i) = solmun i edeltäjäsolmu kyseisellä polulla Tunnukset kiinnitetään lopullisiksi vasta, kun algoritmi on päättynyt 50

1. Aluksi d(s) = 0 ja d(i) = kaikilla i N \ {s}. 2. Jos d(j) d(i) + d ij kaikilla (i, j) A, niin lopeta. Muuten valitse jokin kaari (i, j) siten, että d(j) > d(i) + d ij ja tee seuraavaa: Aseta d(j) = d(i) + d ij ja e(j) = i. 3. Jatka kohdasta 2. Algoritmin päätyttyä: Lyhin etäisyys lähtösolmusta s solmuun i on d(i) Vastaava polku on i e(i) e(e(i)) s 51

Järjestys, jossa kaaret käydään läpi kullakin iteraatiolla, vaikuttaa algoritmin suoritusaikaan Huono järjestys (esim. satunnainen) = Suoritusaika voi olla eksponentiaalinen Järkevä järjestys (esim. aina samassa järjestyksessä) = Suoritusaika saadaan polynomiseksi 52

Algoritmin nopeuttaminen: Käydään kaaret läpi aina samassa järjestyksessä, siten että samasta solmusta lähtevät kaaret ovat aina peräkkäin Olkoon solmu i siten, että jollain iteraatiolla ehdot d(j) d(i) + d ij j siten että (i, j) A ovat voimassa Jos solmun i tunnukset eivät muutu kyseisellä iteraatiolla = Samat ehdot ovat voimassa myös seuraavalla iteraatiolla = Kaaria (i, j) A ei tarvitse tutkia seuraavalla iteraatiolla 53

Lyhimmät polut kaikkien solmuparien välillä Käytetään edellisiä menetelmiä n kertaa: Määrätään lyhimmät polut jostain lähtösolmusta s kaikkiin muihin solmuihin Vaihdetaan lähtösolmuksi s jokin muu solmu ja toistetaan Jos kaikki kaarien pituudet ei-negatiivisia, voidaan käyttää Dijkstran menetelmää; muuten täytyy käyttää (esimerkiksi) optimaalisuusehtoihin perustuvaa menetelmää 54

Kaarien pituuksien muuntaminen Olkoon osa kaarien pituuksista negatiivisia, mutta verkossa ei ole silmukkaa, jonka pituus on negatiivinen Määrätään lyhimmät polut jostain lähtösolmusta s kaikkiin muihin solmuihin optimaalisuusehtoihin perustuvalla menetelmällä = d(j) d(i) + d ij kaikilla (i, j) A Asetetaan jokaiselle kaarelle uusi pituus d ij = d ij + d(i) d(j) = d ij 0 kaikilla (i, j) A 55

Olkoon k = i 0 i 1 i p = l jokin polku ja P = {polun kaaret} = (i,j) P d ij = (i,j) P (d ij + d(i) d(j)) = (i,j) P d ij + d(k) d(l) = Polun pituus muuttuu vakiolla d(k) d(l) = Kaikki solmujen k ja l väliset polut muuttuvat samalla vakiolla = Lyhimmät polut säilyvät muunnoksessa = Lyhimmät polut kaikista muista solmuista N \ {s} alkaen voidaan määrätä Dijkstran menetelmällä 56

Floydin menetelmä Merkitään: D k ij = lyhimmän polun pituus solmusta i solmuun j, kun välisolmuina sallitaan solmut 1,2...,k Perusidea: Jos välisolmuina sallitaan solmut 1,2,..., k + 1 = Joko solmu k + 1 on mukana lyhimmällä polulla solmusta i solmuun j tai se ei ole mukana = Joko Dij k+1 = Di,k+1 k + Dk k+1,j tai Dk+1 ij = Dij k = Dij k+1 = min{di,k+1 k + Dk k+1,j, Dk ij } 57

1. Aluksi Dij 0 = d ij ja E ij = i kaikilla (i, j) A, Dij 0 ja Dii 0 = 0 kaikilla i N. Aseta k = 1. = kaikilla (i, j) / A, 2. Kaikilla (i, j) tee seuraavaa: Jos D k 1 ik + D k 1 kj < Dij k 1, niin aseta Dij k = Dk 1 ik ja E ij = E kj ; muuten aseta D k ij = Dk 1 ij. + D k 1 kj 3. Jos k = n, niin lopeta. Muuten aseta k = k + 1 ja jatka kohdasta 2. 58

Algoritmin päätyttyä: Dij n = lyhin etäisyys solmusta i solmuun j E ij = solmun j edeltäjäsolmu vastaavalla polulla Etäisyyksiä Dij k 1 ei enää tarvita, kun kaikki etäisyydet Dij k on laskettu = Laskenta voidaan suorittaa yhdessä etäisyysmatriisissa 59

Esimerkki 1 2 3 4 1 2 7 5 4 2 1 1 2 6 60

Aluksi: 2 7 5 1 2 2 4 2 6 1 1 4 1 3 0 1 2 1 1 1 1 1 D 0 = 2 0 7 6 5 0 2 E = 2 2 2 3 3 3 3 1 4 0 4 4 4 61

Kun k = 1 : 0 1 2 1 1 1 1 1 D 0 = 2 0 7 6 5 0 2 E = 2 2 2 3 3 3 3 1 4 0 4 4 4 = 0 1 2 1 1 1 1 1 D 1 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 62

Kun k = 2 : 0 1 2 1 1 1 1 1 D 1 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 = 0 1 2 1 1 1 1 1 D 2 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 63

Kun k = 3 : 0 1 2 1 1 1 1 1 D 2 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 = 0 1 2 1 1 1 1 1 D 3 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 64

Kun k = 4 : 0 1 2 1 1 1 1 1 D 3 = 2 0 4 3 6 5 0 2 E = 2 2 1 1 3 3 3 3 1 2 3 0 4 1 1 4 = 0 1 2 1 1 1 1 1 D 4 = 2 0 4 3 3 4 0 2 E = 2 2 1 1 4 1 3 3 1 2 3 0 4 1 1 4 65

0 1 2 1 1 1 1 1 D 4 = 2 0 4 3 3 4 0 2 E = 2 2 1 1 4 1 3 3 1 2 3 0 4 1 1 4 Esimerkiksi: Lyhimmän polun pituus solmusta 2 solmuun 4 on D 4 24 = 3 Solmun 4 edeltäjä polulla on E 24 = 1 Solmun 1 edeltäjä polulla on E 21 = 2 = Lyhin polku on 2 1 4 66