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

Samankaltaiset tiedostot
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 8 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

13 Lyhimmät painotetut polut

Johdatus verkkoteoriaan 4. luento

Johdatus graafiteoriaan

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

Malliratkaisut Demot

Kombinatorinen optimointi

Algoritmit 1. Luento 13 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Harjoitus 3 ( )

Johdatus graafiteoriaan

Harjoitus 3 ( )

Algoritmit 2. Luento 12 Ke Timo Männikkö

Mat Lineaarinen ohjelmointi

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

Diskreetit rakenteet

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

Kokonaislukuoptimointi

Esimerkkejä kokonaislukuoptimointiongelmista

JYVÄSKYLÄN YLIOPISTO. 3. Luennon sisältö

Malliratkaisut Demot

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen

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

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

10. Painotetut graafit

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Johdatus verkkoteoriaan luento Netspace

Optimoinnin sovellukset

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

10. Painotetut graafit

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

v 8 v 9 v 5 C v 3 v 4

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

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

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

Malliratkaisut Demot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Datatähti 2019 loppu

Algoritmit 2. Luento 2 To Timo Männikkö

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

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

Mat Lineaarinen ohjelmointi

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

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 Ke Timo Männikkö

TIE Tietorakenteet ja algoritmit 261

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.

Harjoitus 1 ( )

Johdatus verkkoteoriaan luento Netspace

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

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Harjoitus 1 ( )

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Lyhin kahden solmun välinen polku

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Liite: Verkot. TKK (c) Ilkka Mellin (2004) 1

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

Mat Lineaarinen ohjelmointi

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

T : Max-flow / min-cut -ongelmat

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

Lineaarinen optimointitehtävä

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 2. Luento 6 Ke Timo Männikkö

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Algoritmit 1. Luento 12 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 12 Ti Timo Männikkö

Lineaarinen optimointitehtävä

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

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

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

PARITUS KAKSIJAKOISESSA

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

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

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

Silmukkaoptimoinnista

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Transkriptio:

JYVÄSKYLÄN YLIOPISTO 14. Luennon sisältö Kuljetustehtävä esimerkki Verkkoteoria ja optimointi verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut kevät 2012 TIEA382 Lineaarinen ja diskreetti optimointi

JYVÄSKYLÄN YLIOPISTO Esimerkki kuljetustehtävän ratkaisemisesta http://www.optimalon.com/examples/transport.htm kevät 2012 TIEA382 Lineaarinen ja diskreetti optimointi

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