Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö
Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 2/27
Heuristiset menetelmät Heuristiikka: Etsitään ratkaisua käyttäen arvauksia, intuitiivisia päätöksiä, nyrkkisääntöjä, maalaisjärkeä Jos tarkka ratkaiseminen on hidasta, tingitään ratkaisun optimaalisuudesta ja etsitään likimääräinen ratkaisu nopealla heuristiikalla Ahne menetelmä sopii usein heuristisen menetelmän perustaksi Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 3/27
Kapsäkkiongelma Valittavana n kpl erilaisia tavaroita Tavaralle i tunnetaan paino w i ja hyötyarvo p i (positiivisia kokonaislukuja) Tavaraa otetaan mukaan joko 0 tai 1 kpl Annettu kokonaispainoraja W Tehtävänä valita reppuun R tavarat siten, että niiden hyötyarvo on mahdollisimman suuri, mutta painoraja ei ylity max i R p i kun i R w i W Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 4/27
Heuristiikkoja kapsäkkiongelmalle Ahneeseen tyyliin painon mukaan: Pakataan painon mukaan nousevassa järjestyksessä niin kauan kuin mahtuu Mutta: Ei huomioi hyötyarvoja Ahneeseen tyyliin hyötyarvon mukaan: Pakataan hyötyarvon mukaan laskevassa järjestyksessä niin kauan kuin mahtuu Mutta: Ei huomioi painoja Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 5/27
Heuristiikkoja kapsäkkiongelmalle Otetaan huomioon sekä paino että hyötyarvo: 1. Lasketaan tavaroille suhteet r i = p i /w i 2. Järjestetään tavarat suhteiden r i mukaan laskevaan järjestykseen 3. Pakataan tavaroita tässä järjestyksessä niin kauan kun mahtuu Toteutettavissa aikavaativuudella O(n log n) Jos sallitaan tavaroiden määrälle kaikki arvot välillä 0 1 (jatkuva kapsäkkiongelma), algoritmi antaa optimaalisen ratkaisun Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 6/27
Kauppamatkustajan ongelma Kaupunkeja n kpl, kaupunkien väliset etäisyydet d tunnetaan Etsitään lyhin reitti, joka kulkee kaikkien kaupunkien kautta täsmälleen kerran Suuntaamaton, painotettu verkko G Tehtävänä määrätä G:ssä Hamiltonin kehä, jonka pituus minimaalinen Ongelma NP-täydellinen Tunnettujen ratkaisualgoritmien pahimman tapauksen aikavaativuus eksponentiaalinen Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 7/27
Kauppamatkustajan ongelma Lähimmän naapurin menetelmä: Yksinkertainen ahne, heuristinen menetelmä Valitaan jokin lähtökaupunki Edetään aina lähimpään vielä käymättömään kaupunkiin Jatketaan kunnes kaikissa kaupungeissa käyty Lopulta palataan lähtökaupunkiin Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 8/27
Lähimmän naapurin menetelmä 1. Tämänhetkinen kaupunki t = 1, käymättömät kaupungit K = {2, 3,..., n} 2. Toistetaan kunnes K = : Etsitään kaupunki i siten, että d(t, i) = min{d(t, j) j K} Lisätään kaari (t, i) reittiin Asetetaan t = i ja K = K \ {i} 3. Lisätään kaari (t, 1) reittiin ja lopetetaan Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 9/27
Lähimmän naapurin menetelmä Huom: Oletetaan, että askeleessa 2 kaari (t, i) aina löytyy Kaksi sisäkkäistä, n:stä riippuvaa silmukkaa Aikavaativuus O(n 2 ) Mutta voi joskus antaa erittäin huonon reitin Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 10/27
Kauppamatkustajan ongelma Toinen ahne heuristiikka: 1. Käsitellään tiet pituuden mukaan kasvavassa järjestyksessä 2. Lisätään tie reittiin, jos Sen kummastakin päätepisteestä alkaa enintään yksi aiemmin valittu tie Se ei muodosta silmukkaa aiemmin valittujen teiden kanssa (lukuun ottamatta viimeistä tietä) Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 11/27
Kauppamatkustajan ongelma Jos voimassa kolmioepäyhtälö d(x, y) d(x, z) + d(z, y) kaikilla x, y, z niin edellinen heuristiikka takaa reitin, jonka pituus on enintään kaksi kertaa optimaalisen reitin pituus (c 2c opt ) Paras tunnettu polynominen algoritmi, Christofidesin heuristiikka, takaa c 3 2 c opt Jos kolmioepäyhtälö ei ole voimassa ja P NP, niin mikään polynominen algoritmi ei voi taata, että c kc opt millään vakiolla k Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 12/27
Kertaus ja tenttivinkit Algoritmin suunnittelu: Suunnittelumenetelmät Algoritmin esitys: Sanallisesti, pseudokoodina Algoritmin analysointi: Aikavaativuuden kertaluokka Tietorakenteiden valinta: Tietoalkiot ja operaatiot Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 13/27
Algoritmien analysointi Suoritusajan vaativuus: Lasketaan/arvioidaan algoritmin askelien/operaatioiden lukumääriä Määrätään suoritusajan riippuvuus syöttötiedon koosta Oleellista suoritusajan asymptoottinen kertaluokka Paras mahdollinen suoritusaika, huonoin mahdollinen suoritusaika, keskimääräinen suoritusaika Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 14/27
Asymptoottinen kertaluokka O(g(n)) = funktiot, jotka asymptoottisesti pienempiä tai yhtäsuuria kuin g(n) Peruskertaluokkia: O(1), O(log n), O(n), O(n log n), O(n 2 ), O(n 3 ) Yleinen polynominen: O(n k ) Eksponentiaalinen: O(2 n ) Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 15/27
Pino ja jono Pino: Perusoperaatiot (push, pop) Toteutus taulukolla Jono: Perusoperaatiot (enqueue, dequeue) Toteutus taulukolla Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 16/27
Lista Järjestetty lista Perusoperaatiot (haku, lisäys, poisto) Peräkkäishaku vs. binäärihaku Toteutus dynaamisesti (linkitetty lista) Vaihtoehtoiset listarakenteet Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 17/27
Binääripuu Järjestys rakenteen perusteella, järjestys tietosisällön perusteella Järjestetty binääripuu Perusoperaatiot (haku, lisäys, poisto) Solmujen läpikäynti eri järjestyksissä Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 18/27
Graafit ja verkot Tietorakenteita: Kaaritaulukko Kaarien pituusmatriisi Lähtevien ja tulevien kaarien listat Verkon lyhimmät polut, algoritmeja: Ford ja Fulkerson Floyd Dijkstra Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 19/27
Suunnittelumenetelmät Raaka voima: Ongelman suoraviivainen ratkaiseminen Osittaminen: Ositus osatehtäviin, rekursiivinen ratkaiseminen, ratkaisun kokoaminen Taulukointi: Osatehtävien ratkaisujen taulukointi, taulukon täyttäminen vaiheittain Ahne menetelmä: Parhaimmalta näyttävän vaihtoehdon valinta Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 20/27
Järjestäminen eli lajittelu Lajittelu: Taulukon, listan, tiedoston jne. järjestäminen suuruusjärjestykseen jonkin avainkentän (tai avainkenttien) mukaan Lajittelun stabiilisuus: Tietueet, joilla sama avainkentän arvo, säilyttävät alkuperäisen keskinäisen järjestyksensä Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 21/27
Lajittelumenetelmiä Raakaan voimaan perustuvia: Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu Osittamiseen perustuvia: Lomituslajittelu Pikalajittelu Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 22/27
Osittavia menetelmiä Lomituslajittelu (merge sort): Ositus kahteen osajoukkoon Osajoukkojen lajittelu rekursiivisesti Osajoukkojen yhdistäminen lomittamalla Pikalajittelu (quick sort): Jakotietueen valinta (eri tapoja) Ositus kahteen osajoukkoon jakotietueen molemmin puolin Osajoukkojen lajittelu rekursiivisesti (tai väliinsijoituslajittelulla, jos tarpeeksi pieni) Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 23/27
Osittavien menetelmien vaativuus Aikavaativuuden rekursioyhtälö (esimerkiksi): { c, kun n = 1 T (n) = at (n/b) + dn, kun n > 1 Osittamisen tasapainoisuudesta: Pahin tapaus (esimerkiksi) T (n) = T (n 1) + dn = = O(n 2 ) Paras tapaus (esimerkiksi) T (n) = 2T (n/2) + dn = = O(n log n) Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 24/27
Ahneita algoritmeja Verkon lyhimmät polut: Dijkstran menetelmä Verkon lyhin virittävä puu: Kruskalin menetelmä Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 25/27
Heuristisia algoritmeja Kapsäkkiongelma: Ahne menetelmä paino/hyötyarvo-suhteen mukaan Kauppamatkustajan ongelma: Lähimmän naapurin menetelmä Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 26/27
Onnea tenttiin! Algoritmit 1 Kevät 2015 Luento 14 Ke 25.2.2015 27/27