v 8 v 9 v 5 C v 3 v 4



Samankaltaiset tiedostot
Liite 2: Verkot ja todennäköisyyslaskenta

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

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Johdatus graafiteoriaan

Johdatus verkkoteoriaan 4. luento

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

Algoritmi on periaatteellisella tasolla seuraava:

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

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

Harjoitus 3 ( )

13 Lyhimmät painotetut polut

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( )

Demo 1: Simplex-menetelmä

Luku 8. Aluekyselyt. 8.1 Summataulukko

Harjoitus 3 ( )

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

Malliratkaisut Demot

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

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

Hilbertin aksioomat ja tarvittavat määritelmät Tiivistelmä Geometria-luentomonisteesta Heikki Pitkänen

A TIETORAKENTEET JA ALGORITMIT

Lineaarinen optimointitehtävä

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

b) Olkoon G vähintään kaksi solmua sisältävä puu. Sallitaan verkon G olevan

Näytetään nyt relaatioon liittyvien ekvivalenssiluokkien olevan verkon G lohkojen särmäjoukkoja. Olkoon siis f verkon G jokin särmä.

A = a b B = c d. d e f. g h i determinantti on det(c) = a(ei fh) b(di fg) + c(dh eg). Matriisin determinanttia voi merkitä myös pystyviivojen avulla:

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

Helsingin, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo 10 13

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

1 Lukujen jaollisuudesta

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tekijä Pitkä matematiikka On osoitettava, että jana DE sivun AB kanssa yhdensuuntainen ja sen pituus on 4 5

P (A)P (B A). P (B) P (A B) = P (A = 0)P (B = 1 A = 0) P (B = 1) P (A = 1)P (B = 1 A = 1) P (B = 1)

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

Algoritmit 1. Luento 13 Ti Timo Männikkö

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

Matematiikan tukikurssi, kurssikerta 1

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Aki Taanila LINEAARINEN OPTIMOINTI

Yhtenäisyydestä. Johdanto. Lähipisteavaruus. Tuomas Korppi

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

A-osio. Tehdään ilman laskinta ja taulukkokirjaa! Valitse tehtävistä A1-A3 kaksi ja vastaa niihin. Maksimissaan tunti aikaa suorittaa A-osiota.

Kombinatorinen optimointi

Äärellisten mallien teoria

Johdatus graafiteoriaan

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

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

MS-C1340 Lineaarialgebra ja

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

Vektorit. Kertausta Seppo Lustig (Lähde: avoinoppikirja.fi)

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

Tekijä Pitkä matematiikka b) Kuvasta nähdään, että b = i 4 j. c) Käytetään a- ja b-kohtien tuloksia ja muokataan lauseketta.

Matemaatiikan tukikurssi

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

10. Painotetut graafit

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim.

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016

Markov-ketjut pitkällä aikavälillä

Graafin virittävä puu 1 / 20

Ota tämä paperi mukaan, merkkaa siihen omat vastauksesi ja tarkista oikeat vastaukset klo 11:30 jälkeen osoitteesta

Algoritmit 2. Demot Timo Männikkö

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

Suorista ja tasoista LaMa 1 syksyllä 2009

Tekijä Pitkä matematiikka Poistetaan yhtälöparista muuttuja s ja ratkaistaan muuttuja r.

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

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

Polkuintegraali yleistyy helposti paloitain C 1 -poluille. Määritelmä Olkoot γ : [a, b] R m paloittain C 1 -polku välin [a, b] jaon

Ratkaisu: a) Kahden joukon yhdisteseen poimitaan kaikki alkiot jotka ovat jommassakummassa joukossa (eikä mitään muuta).

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tehtävä 4 : 2. b a+1 (mod 3)

Vektoreiden A = (A1, A 2, A 3 ) ja B = (B1, B 2, B 3 ) pistetulo on. Edellisestä seuraa

Tekijä Pitkä matematiikka

Mohrin-Mascheronin lause kolmiulotteisessa harppi-viivaingeometriassa

Reaalilukuvälit, leikkaus ja unioni (1/2)

6.4. Järjestyssuhteet

2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio. 2.2 Gaussin eliminaatio

Harjoitus 1 ( )

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

MAB3 - Harjoitustehtävien ratkaisut:

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Lineaarialgebra ja matriisilaskenta I, HY Kurssikoe Ratkaisuehdotus. 1. (35 pistettä)

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

1 Aritmeettiset ja geometriset jonot

Vastauksia. Topologia Syksy 2010 Harjoitus 1

1 Kannat ja kannanvaihto

Transkriptio:

Verkot Verkko on (äärellinen) matemaattinen malli, joka koostuu pisteistä ja pisteitä toisiinsa yhdistävistä viivoista. Jokainen viiva yhdistää kaksi pistettä, jotka ovat viivan päätepisteitä. Esimerkiksi sovelluksessa pisteet voivat olla kaupunkeja ja viivat - suorat yhteydet, eli tiet joita pitkiin kaupungista pääsee toiseen suoraan (ei muiden verkon kaupunkien kautta). Tässä kuva tyypillisestä verkosta. Käytämme sitä esimerkkinä usein jatkossa. v 1 B v 6 D E v 7 A v 8 v 9 v 5 v 2 F C v 3 v 4 G Viiva voi olla kaksisuuntainen, jolloin se voidaan kulkea molempiin suuntiin tai yhdensuuntainen, jolloin sitä voi kulkea vain yhteen suuntaan. Jälkimmäisessä tapauksessa viivalla on alkupiste ja loppupiste ja kuvissa se merkitään nuolena. Myös kaksisuuntaisen viivan tapauksessa puhumme alku-ja loppupisteestä, jolloin jompikumpi päätepiste voidaan sanoa alkupisteeksi (toinen on silloin loppupiste), riippuen siitä, mihin suuntaan halutaan kulkea. Esimerkiksi yllä olevassa kuvassa v 2 ja v 9 ovat yhdensuuntaisia, muut viivat kaksisuuntaisia. Hyväksymme myös silmukoita, eli viivoja, jotka yhdistävät piste itseensä (kuvassa v 7 ) ja monikertaisia viivoja eli erilaisia viivoja samojen pisteiden välillä - kuvassa viivoilla v 3 ja v 4 samat päätepisteet, mutta ne ajatellaan erilaisiksi viivoiksi. Painotettu verkko, on sellainen verkko, jossa jokaiseen viivaan on liitetty 1

joku lukuarvo, joka sanotaan viivan painoksi (weight). Esimerkiksi jos verkon pisteet edustavat kaupunkeja ja viivat- teitä, viivan paino voi olla kaupunkien välinen etäisyys eli tien pituus. Painotettu verkko näyttää seuraavanlaiselta - 1 B 2 D E 2 A 4 5 4,3 F 9 C 3 2 G Jos verkosta otetaan kaksi pistettä, niiden välillä ei välttämättä ole viivoja, mutta voi olla, että toisesta pääsee toiseen muutamaa viivaa pitkin. Tällaista kulkua sanotaan reitiksi tai poluksi. Formaalisti siis reitti pisteestä a pisteseen b on ketju viivoja w 0,w 1,...,w n, missä vivan w 0 alkupiste on a, w n loppupiste on b ja jokaisen seuraavan viivan v i alkupiste on edellisen viivan v i 1 loppupiste. Tällöin a on reitin alkupiste ja b reitin loppupiste. Jos verkko on painotettu, reitillä on pituus - se on summa siihen sisältyvien viivojen painoista. Esimerkiksi yllätarkastellussa verkossa (v 1,v 6 ) onpolkua:stä D:hen. Tietysti niiden välillä on olemassa myös lyhyempi polku, jossa on vain yksi viiva v 8. Mutta jos sama verkko tarkastellaan painotettuna verkkona kuten yllä, niin ensimmäisen reitin paino on 1+2 = 3, kun taas toisen reitin paino on 5. Jos nämä painot edustavat joitakin kustannuksia, ensimmäinen onkin edullisempi. Verkko, jossa jokaisesta pisteestä päästään jokaiseen toiseen pisteeseen polkua pitkin, sanomme yhtenäiseksi. 2

Optimisaatio verkossa. Verkkoihin liittyy luonnollisella tavalla monta tärkeätä optimointi-ongelmaa. Tarkastelemme niistä kaksi - minimaalisen virittävän puun ongelma ja lyhyemmän reitin ongelma. Minimaalisen virittävän puun ongelma Sykli verkossa on sellainen reitti, joka yhdistää pisteen itseensä eli jonka alku-jaloppupisteetovatsamapiste.esimerkiksi verkossaylläviivatv 1,v 6,v 8 muodostavat syklin, joka yhdistää A:n itseensä. Myös (v 3,v 4 ) on sykli. Puu on sellainen yhtenäinen verkko, jossa ei ole sykliä. Puussa ei ole turhia viivoja, vaan jokaisesta pisteestä päästään toiseen vain yhtä reittiä pitkin. Puu yhtenäisessä verkossa G on sellainen kokoelma sen pisteitä ja viivoja (aliverkko) joka on itse verkkona puu. Virittävä puu verkossa, on puu verkossa, joka sisältää kaikki sen pisteet. Virittävä puu on siis ikäänkuin minimaalinen tapa valita annetussa verkossa yhteyksiä (viivoja), niin että kaikki pisteet ovat yhteydessä, mutta viivoja on mahdollisimman vähän. Jos verkko on painotettu, haluamme löytää siinä minimaalinen virittävä puu, eli sellainen verkon alipuu, jolla on pienin mahdollinen paino (sen viivojen yhteenlaskettu paino). Minimaalisen virittävän puun löytäminen. Minimaalinen virittävä puu rakennetaan vaiheittain tietyn algoritmin mukaan, lisämällä siihen yksi uusi piste ja yksi viiva kerrallaan. Algoritmin jokaisessa vaiheessa verkon pisteet ovat jaettu kahteen luokkaan - luokka A, jossa on ne pisteet, jotka ovat jo lisätty puuhun ja luokka B, jossa on ne pisteet, jotka eivät ole vielä puussa. Algoritmin alussa A koostuu vain yhdestä pisteestä, jonka saa valittaa mielivaltaisesti. 3

Algoritmin jokainen välivaihe on samanlainen- tarkastellaan kaikki viivat, joiden toinen päätepiste on A:ssä ja toinen B:ssä. Valitaan niistä viivoista sen, jolla on pienin paino ja lisätään se, sekä sen toinen päätepiste puuhun. Tällöin joukko A kasvaa ja joukko B pienenee. Jos viivoja jolla on pienin paino on enemmän kuin yksi, niistä valitaan kuitenkin vain yksi. Sen saa ottaa mielivaltaisesti. Algoritmi päättyy kun kaikki verkon pisteet kuuluvat puuhun. Esimerkki: Tarkastellaan seuraavaa verkkoa: b 1 4 6 3 e a 7 9 5 d 5 c 8 Aloitetaan minimaalisen puun konstruktio esim. pisteestä a (alkupisteen valinnalla ei ole merkitystä). Tarkastellaan kaikki a:sta lähtevät viivat (paitsi silmukat, joita ei nyt verkossa olekaan joka tapauksessa). Niistä painoltaan pienin on viiva ab, jonka paino 1. Lisätään siis tämä viiva ja sen loppupiste b puuhun. Seuraavaksi tarkastellaan viivoja, joiden toinen päätepiste on a tai b, mutta toinen ei ole. Nyt näistä pienin on be, sen paino on 3. Lisätään siis puuhun piste e ja viiva be. Jatketaan samalla tavalla. Seuraavassa vaiheessa pienin viiva on bd (paino 4), sitten seuraavassa vaiheessa df (paino 3). Nyt jäljellä on vain piste c. Kaikista viivoista, jotka johtavat pisteeseen c kaksi painoltaan pienintä ovat ac tai dc, molempien paino on 5. Näistä valitaan jompikumpi (mutta ei molempia, tällöin ei tule puuta!!!). 10 3 f 4

Saadaan siis kaksi mahdollista ratkaisua. Näin ollen minimaalinen puu ei ole välttämättä yksikäsitteinen, mutta kaikilla mahdollisilla vastauksilla on sama pituus. Tässä tapauksessa minimaalisen puun pituus 1+3+4+3+5 = 16. Sama lopputulos saadaan kun lähdetään liikkeelle mistä tahansa muusta pisteestä. Lyhyemmän reitin ongelma Olkoot a ja b jonkun painotetun verkon pisteitä. Halutaan löytää pituudeltaan mahdollisimman pieni reitti niiden välisssä. Tarkastelemme niin sanottua Dijekstran algoritmia, jonka avulla lyhyemmän reitin ongelma voidaan ratkaista. Algoritmi on monimutkaisempi kuin virittävän puu algoritmi. Edelleenkin jokaisessa algoritmin vaiheessa verkon pisteet jakautuvat kahteen luokkaan. Luokassa A ovat niin sanotut pysyvät pisteet, eli sellaiset pisteet joille on jo löydetty pienin reitti, joka yhdistää niitä pisteseen a. Jokaiselle pysyvälle pisteelle x on lisäksi annettu niin sanottu leima, joka on muodoltaan pari (t, y). Tämän parin ensimmäinen osa t on luku, joka kertoo, kuinka pitkä pituudeltaan on lyhin mahdollinen reitti pisteestä a tähän pisteeseen x. Toinen osa y on taas pisteen x edeltäjä tällaisessa reitissä. Leiman toisen osan avulla voidaan siis jäljittää myöhemmin lyhin reitti piste kerrallaan. Pysyvien pisteiden leimat eivät enää koskaan muutu vaikka algoritmi jatkuisi vielä. Algoritmi pysähtyy silloin, kun pisteestä b tulee pysyvä. Tällöin voidaan leimojen avulla jäljittää haluttu lyhin reitti. Miten se tapahtuu käytännössä selviää esimerkkeistä alla. Toisessa luokassa B on verkon kaikki muu, ei-pysyvät (tässä vaiheessa) pisteet, joihin asti, emme vielä löytäneet lyhintä reittiä pisteestä a. Joillakin ei-pysyvillä pisteillä on myös leimoja, jotka ovat muotoa (t, x), mutta ei välttämättä kaikilla. Lisöksi nämä leimat saattavat muuttua niiden kohdalla algoritmin edetessä, kun taas pysyvien pisteiden leimat eivät koskaan enää päivitty. 5

Leimoissa varastetaan samaa informaatiota kuin pysyvien pisteiden leimoissa, paitsi, että nyt kyse on mahdollisesta eli ainoastaan tähän mennessä löydetystä lyhimmästä reitistä. Jos löydetään lyhyempi, leima siis päivitetään. Algoritmin jokainen välivaihe näyttää seuraavalta. Tarkastellaan taas kaikki viivat, joiden alkapiste on A:ssä (pysyvien pisteiden luokassa) ja loppupiste on B:ssä. Olkoon v sellainen viiva, olkoon c sen alkupiste A:ssä ja d sen loppupiste B:ssä. Olkoon p(v) viivan v paino ja (t,y) pisteen c:n leima. Huomaa, että t on tällöin sellaisen reitin paino, joka yhdistää pisteitä a ja d, lisäksi lyhyemmän sellaisen. Jos tähän reittiin lisätään perään viiva v, saadaan eräs reitti pisteestä a pisteseen d. Jos pisteellä d ei vielä ole leimaa, asetetaan sen leimaksi (t + p(v),a). Ajatus tämän takana on seuraava - jos lyhin reitti pisteestä a pisteseen c on jo konstruoitu, niin eräs reitti pisteseen d saadaan, kun jatketaan edellinen reitti viivalla v. Tämä on ainakin jokin reitti a:stä d:hen, ja koska d:llä ei ole leimoja vielä, tämä reitti on ainakin toistaiseksi paras kandidaatti pienempään reittiin. Jos taas pisteellä d on jo leima (t,z), tämä tarkoittaa, että aikaisemmin löydettiin jo jokin mahdollisesti lyhin reitti a:stä d:hen, ja sen pituus on t. Toisaalta nyt meillä on myös uusi reitti pisteestä a pisteseen d pisteen c kautta ja sen paino on t+p(v). Verrataan tämä uusi reitti aikaisemman löydettyyn eli katsotaan onko t + p(v) mahdollisesti pienempi kuin t. Jos on, vanha reitti ei ollutkaan lyhin mahdollinen, joten muutetaan (eli päivitetään) d:n leima muotoon (t+p(v),a). Jos taas uusi reitti ei ollut pidempi kuin vanha eli t t+p(v), ei muuteta mitään. Näin siis tehdään jokaisen sopivan viivan kohdalla. Sopiva tässä yhteydessä siis tarkoittaa sellaista viiva jonka alkupiste on pysyvien joukossa ja loppupiste ei ole. Kierroksen lopussa tarkastellaan kaikki B:n pisteet, joilla on leima, ja valitaan niistä se piste, jolla on pienin leiman ensimmäinen osa (reitin pituus). Tämä piste siirretään leimaineen pysyvien joukkoon ja seuraava kierros alkaa. Jos pisteitä joilla on sama pienin leiman ensimmäinen osa on enemmän 6

kuin yksi, siirretään niistä joku yksi pysyvien joukkoon, ei ole väliä mikä. Algoritmi jatketaan kunnes b on siirtynyt pysyvien joukkoon. Esimerkki: Tarkastellaan vaihtelun vuoksi seuraavaa järjestettyä verkkoa, jossa siis kaikki viivat yhdensuuntaisia eli nuoleja. 100 b 20 15 10 d 50 a c 30 60 Halutaan löytää lyhyin reitti pisteiden a ja b välillä. e Alussa piste a on ainoa pysyvä piste ja se saa leiman (0,a) (ei tarvita mitään viivoja, että pääse a:stä a:han). Tarkastellaan kaikki viivat, jotka lähtevät a:stä. Niitä on- viiva ab, jonka paino 100 ja viiva ac, jonka paino 30. Koska pisteillä b ja c ei ole vielä leimoja, b saa leiman (100,a) ja c saa leiman (30, a). Leimoista kannattaa pitää erikseen kirjaa, esim. taulukkomuodossa. Nyt joukossa B sijaitsevat kaikki pisteet paitsi a ja niistä leimoja ovat saaneet b ja c. Pienin leima on c:llä (30), joten c siirretään pysyvien joukkoon. Algoritmin ensimmäinen kierros päättynyt. Kierros 2: Nyt pysyvien pisteiden joukossa on pisteet a ja c. Nyt pitäisi tarkastella kaikki nuolet, jotka alkavat a:ssä tai c:ssä ja päättyvät muihin pisteisiin. Mutta nuoli ab on jo tarkasteltu ensimmäisen kierroksen aikana, joten siitä ei tarvitse enää välitä. Sama havainto pätee itse asiassa jokaisen kierroksen kohdalla - riittää tarkastella vain niitä viivoja, jotka alkavat uudessa pisteessä, joka lisättiin siis edellisen kierroksen lopussa. Viiva cd tuo pisteelle d leiman (30+10 = 40,c) ja viiva ce - leiman (90,c) pisteelle e. Näistä pienin on pisteellä d, joten se siirtyy pysyvien pisteiden joukkoon. Kierros 3: Pysyvien pisteiden joukossa pisteet a, c, d. Tarkastellaan taas viivat, jotka alkavat tuoreessa pysyvässä pisteessä d ja loppuvat ei-pysyvään 7

pisteeseen. Tällaisia on kaksi - viiva de ja viiva db. Näistä de määrää reitin a c d e, jonka pituus on 30+10+50 = 90. Tämä ei ole parempi kuin d leiman (90, c) ensimmäinen osa, joten sitä leimaa ei tarvitse päivitä. Sen sijaan jos tarkastellaan viivaa db, jonka pituus 15, niin koska 40+15 = 55 < 100, tästä saadaan parempi tulos kuin aikaisempi b:n leima (100, 1). Muutetaan b:n leima siis leimaksi (55, d). Nyt ei-pysyvistä pisteistä b:llä on leima (55, d) ja e:llä leima (90, c). Näistä 55 on pienin, joten b:stä tulee pysyvä piste. Koska olemme etsineet lyhintä reittiä a:stä b:hen, voimme lopettaa. Pienin reitti on siis pituudeltaan 55. Sen viivoja voidaan jäljittää nyt menemällä leimoja pitkin taaksepäin. b:n leima on (55,d), joten sen edeltäjä on d. d:n leima puolestaan (40,c), joten sen edeltäjä c ja niin edelleen. Haluttu polku on siis a c d b. Alla kuva samasta verkosta, jossa lisätty informaatiota kaikista leimoista, jotka algoritmin suorituksen aikana tulivat esille (55, d) 100 (100, a) b 20 15 d (40, c) 50 (0, a) a 30 c (30, a) 60 e (90, c) Huomaa, että lyhimmän reitin jokainen osa on myös lyhin mahdollinen. Näin ollen samalla olemme laskeneet, että lyhin reitti a:stä c:hen on a c ja lyhin reitti a:stä d:hen on a c d. Näitä ei tarvitse siis laskea samalla algoritmilla uudestaan. Lyhimmän reitin ongelma lineaarisena optimointiongelmana Lyhimmän reitti ongelma voidaan muotoilla myös lineaarisena optimointiongelmana. Sen jälkeen se voidaan ratkaista esimerkiksi Solverilla. 8

Malli konstruoidaan seuraavalla tavalla. Muuttujat vastaavat verkon viivoja - yksi muuttuja per viiva. Yleensä muuttujat merkitään x ij, missä ij on se viiva, joka alkaa pisteessä i ja loppuu pisteeseen j. Objektifunktio saadaan kertomalla viiva ij vastaava muuttuja viivan painolla ja laskemalla kaikki nämä yhteen. Tämä funktio edustaa polun pituutta, joten se pitää minimoida. Esimerkiksi edellisessä esimerkissä ongelmassa olisi 7 muuttujaa - x ab,x ac, x cd, x db, x bc, x de ja x ce. Ajatus on siinä, että ratkaisussa muuttujan x ij arvosta nähdään onko vastaava viiva ij parhaassa reitissä vai eikö seuraavasti - jos vastaavan muuttujan arvo 0, viiva ei ole reitissä mukana, jos se on taas > 0, viiva on mukana. Yleensä jälkimmäisessä tapauksessa arvo on 1, mutta jos ratkaisu ei yksikäsitteinen (vähintään kaksi erilaista lyhintä reittiä), näin ei välttämättä ole. Reunaehtoja saadaan seuraavan periaatteen mukaisesti - jokaisessa verkon pisteessä sisään menevien nuolten summan pitää olla sama kuin ulospäin menevien. Lisäksi verkkoon lisätään yksi pisteeseen a menevä nuoli (ilman alkupistettä), jonka arvo 1, samoin yksi viiva joka lähtee b:stä. Eli edellisessä esimerkissä näin: 1 15 b d 100 20 50 a c e 1 30 60 Huomaa, nämä arvot 1 EIVÄT ole painoja, vaan vakioita, joita kohdellaan samalla tavalla kuin muuttujia. Nyt jokaista verkon pistettä vastaa yhtälö, jossa vasemmalla puolella - kaikki viivat (tai siis niitä vastaavat muuttujat tai vakiot) jotka tulevat pisteeseen sisään ja oikealla puolella - kaikki jotka menevät ulos. Siis: Piste a - 1 = x ab +x ac, Piste b - x ab +x db = x bc +1, Piste c - x ac +x bc = x cd +x ce, Piste d - x cd = x db +x de, Piste e - x ce +x de = 0. Nämä siis ovat vastaavan lineaarisen ongelman reunaehdot. 9

Jos ne kirjoittaa kuten on tapana sillä tavalla, että vasemmalla puolella on muuttujat ja oikealla vakiot, saadaan ehdot muotoon Piste a - x ab +x ac = 1, Piste b - x bc x ab x db = 1, Piste c - x ac +x bc x cd +x ce = 0, Piste d - x cd x db x de = 0, Piste e - x ce +x de = 0. Huomataan, että jos näiden kertoimia kootaan taulukoksi, jossa sarakkeet vastaavat muuttujia eli viivoja ja rivit pisteitä, se näyttää seuraavanlaiselta - Tyhjät kohdat vastaavat nollia. x ab x ac x bc x cd x ce x db x de a 1 1 1 b 1 1 1 1. c 1 1 1 1 0 d 1 1 1 0 e 1 1 0 Tällainen taulukko konstruoidaan seuraavalla yksinkertaisella tavalla - jokaisessa sarakkeessa laitetaan 1 saraketta vastaavan viivan alkupisteen kohdalle ja 1 loppupisteen kohdalle. Loput alkiot nollia. Viimeinen sarake vastaa ehtojen oikeanpuoleisia vakioita- niistä etsityn reitin alkupisteettä vastaa 1, loppupistettä 1 ja loput nollia. Minimoittava objekti funktio on 100x 12 +30x 13 +20x 23 +10x 34 +60x 35 +15x 42 +50x 45. Katso myös sama esimerkki Excel-tiedostona ratkaistuna Solverin avulla. 10