Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

4.3. Matemaattinen induktio

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 2. Luento 12 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Demot Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

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.

Algoritmit 2. Luento 4 To Timo Männikkö

Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

811120P Diskreetit rakenteet

Tuloperiaate. Oletetaan, että eräs valintaprosessi voidaan jakaa peräkkäisiin vaiheisiin, joita on k kappaletta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Numeeriset menetelmät

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tieto- ja tallennusrakenteet

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Kuinka määritellään 2 3?

Algoritmit 2. Demot Timo Männikkö

Datatähti 2019 loppu

Tietorakenteet ja algoritmit

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 11 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.

Algoritmit 2. Demot Timo Männikkö

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

9 Erilaisia tapoja järjestää

Käänteismatriisin ominaisuuksia

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

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

Kombinatorinen optimointi

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

1 Erilaisia tapoja järjestää

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

1. Kuinka monella tavalla joukon kaikki alkiot voidaan järjestää jonoksi? Tähän antaa vastauksen: tuloperiaate ja permutaatio

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

8. Lajittelu, joukot ja valinta

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

Johdatus lukuteoriaan Harjoitus 11 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Sovellettu todennäköisyyslaskenta B

(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ä.

Ohjelmoinnin perusteet Y Python

Transkriptio:

Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö

Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 2/33

Algoritminen ongelmanratkaisu Algoritmi: Askel askeleelta suoritettava tekniikka tai ohje tehtävän suorittamiseksi tai ongelman ratkaisemiseksi Ongelman ymmärtäminen: Tutkitaan tarkasti ongelman kuvaus Esimerkkitapausten läpikäynti Onko ongelma lähellä jotain usein esiintyvää ongelmaa Onko ratkaistavana ongelman jokin tietty esiintymä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 3/33

Algoritminen ongelmanratkaisu Valmiit ratkaisumenetelmät samantyyppisille ongelmille Ratkaisuympäristön asettamat rajoitukset Onko rinnakkaisprosessointi mahdollinen Aikarajoitukset, rajoitukset muistitilan käytölle Halutaanko tarkka ratkaisu vai riittääkö likimääräinen ratkaisu Tietorakenteiden suunnittelu ja valinta Tarvittaessa lähtötietojen uudelleenkäsittely (järjestäminen, muokkaus) Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 4/33

Algoritminen ongelmanratkaisu Algoritmin suunnittelu: Käytetään hyviksi osoittautuneita suunnittelumenetelmiä Samantyyppisille ongelmille sopivat samantyyppiset algoritmit Voidaanko ongelma muuntaa joksikin tunnetuksi ongelmaksi Algoritmin kuvaus: Sanallinen kuvaus Pseudokoodi Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 5/33

Algoritminen ongelmanratkaisu Algoritmin osoittaminen oikeaksi: Joskus helppoa, joskus hyvin hankalaa Esimerkiksi matemaattinen induktio Pelkkä testaus joillain syöttötiedoilla ei riitä Algoritmin analysointi: Tehokkuus suoritusajan suhteen Muistitilan ja muiden resurssien käyttö Likiarvoratkaisujen hyvyys Algoritmin optimaalisuus ongelman suhteen Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 6/33

Algoritminen ongelmanratkaisu Algoritmin toteutus: Koodaus jollain ohjelmointikielellä Huolellinen ohjelman suunnittelu Huolellinen ohjelman testaus Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 7/33

Suunnittelumenetelmät Yleisiä tekniikoita ja periaatteita algoritmin muodostamiseksi Joskus algoritmi voidaan katsoa kuuluvan usean eri suunnittelumenetelmän mukaiseksi Joskus algoritmin ei voida katsoa kuuluvan mihinkään erityiseen suunnittelumenetelmäluokkaan Monesti algoritmi käyttää hyväksi ongelman erityisominaisuuksia Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 8/33

Raaka voima Ongelman suoraviivainen ratkaiseminen Algoritmit yksinkertaisia, helpohkoja Mutta eivät välttämättä kovin tehokkaita Esimerkki: Tehtävänä laskea a n = a a... a (kerrottavia lukuja n kpl) tulo = 1; for (i = 1; i <= n; i++) tulo = tulo*a; Aikavaativuus O(n) Voidaan laskea paljon nopeammin (miten?) Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 9/33

Lähin pistepari Tason pisteet p i = (x i, y i ), i = 1, 2,..., n Pisteiden välinen etäisyys: d(p i, p j ) = (x i x j ) 2 + (y i y j ) 2 Tehtävä: Etsi kaksi toisiaan lähinnä olevaa pistettä Raa an voiman algoritmi: Käydään läpi kaikki pisteparit, lasketaan niiden välinen etäisyys ja pidetään yllä pienintä etäisyyttä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 10/33

Lähin pistepari 1. Asetetaan pienin = (suuri luku) 2. Toistetaan kaikilla i = 1, 2,..., n 1: Toistetaan kaikilla j = i + 1, i + 2,..., n: Lasketaan e = (x i x j ) 2 + (y i y j ) 2 Jos e < pienin, asetetaan pienin = e, piste1 = i ja piste2 = j 3. Palautetaan pisteparin indeksit piste1 ja piste2 Huom: Neliöjuurta ei tarvitse laskea (miksi?) Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 11/33

Lähin pistepari Perusoperaationa voidaan pitää etäisyyden laskemista Kaksi sisäkkäistä silmukkaa, molempien suorituskertojen lukumäärä riippuu n:stä Perusoperaatioiden lukumäärä (n 1) + (n 2) + + 2 + 1 = n 1 i=1 Aikavaativuus O(n 2 ) i = n(n 1) 2 Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 12/33

Lajittelu eli järjestäminen Taulukko, jossa n samantyyppistä alkiota Alkioiden välille määritelty järjestysrelaatio jonkin avainkentän (tai kenttien) perusteella Tehtävä: Järjestä alkiot tiettyyn järjestykseen järjestysrelaation mukaan (esimerkiksi kasvavaan järjestykseen) Taulukon sijaan alkiot voivat olla lineaarisessa (linkitetyssä) listassa, tiedostossa jne. Lajittelun avulla voidaan nopeuttaa useita muita algoritmeja Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 13/33

Indeksitaulukon käyttö Lajittelussa alkioita siirrellään taulukossa Suurten alkioiden siirtely hidasta/työlästä Indeksitaulukko: Järjestys ilmoitetaan kokonaislukutaulukolla: xt[i] = alkion i paikka järjestyksessä Siirrellään vain taulukon xt alkioita Lajiteltavat alkiot pysyvät paikoillaan Vastaavasti lineaarisille listoille voidaan käyttää osoitintaulukkoa Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 14/33

Lajittelumenetelmien stabiilisuus Stabiili lajittelumenetelmä: Olkoot R i ja R j kaksi samanarvoista alkiota, joiden alkuperäiset paikat taulukossa ovat i 0 ja j 0 siten, että i 0 < j 0 Jos lajittelun jälkeen alkioiden paikat ovat i 1 ja j 1, ja on voimassa i 1 < j 1, on menetelmä stabiili Toisin sanoen: Samanarvoiset alkiot säilyttävät alkuperäisen keskinäisen järjestyksensä Huom: Samanarvoisuus määritellään tässä vain avainkentän (kenttien) suhteen Samanarvoiset alkiot eivät välttämättä ole identtisiä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 15/33

Kuplalajittelu (bubble sort) Alkiot taulukon t paikoissa 0, 1,..., n-1 Siirretään pienin alkio paikkaan 0 Vertaillaan peräkkäisiä alkioita aloittaen taulukon lopusta Jos verrattavat alkiot väärässä järjestyksessä, vaihdetaan ne keskenään Siirretään toiseksi pienin alkio paikkaan 1 Vertaillaan peräkkäisiä alkioita aloittaen taulukon lopusta Jos verrattavat alkiot väärässä järjestyksessä, vaihdetaan ne keskenään Jne. Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 16/33

Kuplalajittelu 1. Toistetaan kaikilla i = 1, 2,..., n-1: 2. Toistetaan kaikilla j = n-2, n-3,..., i-1: Jos t[j] > t[j+1], vaihdetaan t[j] ja t[j+1] keskenään Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 17/33

Kuplalajittelu Kaksi sisäkkäistä silmukkaa, molempien suorituskertojen lukumäärä riippuu n:stä Vertailuja tehdään (n 1) + (n 2) + + 2 + 1 = n(n 1)/2 kappaletta Aikavaativuus O(n 2 ) Pahimmassa tapauksessa vaihtoja yhtä monta Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 18/33

Lisäyslajittelu (insertion sort) Oletetaan: Vaiheessa i alkiot paikoissa 0, 1,..., i-1 toistensa suhteen oikeassa järjestyksessä Kopioidaan t[i] aputietueeseen Vertaillaan alkiota t[i] edeltäviin alkioihin ja siirretään alkuosan alkioita eteenpäin yhdellä askeleella (kohti taulukon loppua), kunnes tullaan kohtaan, johon t[i] kuuluu Sijoitetaan t[i] aputietueesta tuohon kohtaan Tämän jälkeen: Alkiot paikoissa 0, 1,..., i toistensa suhteen oikeassa järjestyksessä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 19/33

Lisäyslajittelu 1. Toistetaan kaikilla i = 1, 2,..., n-1: 2. Kopioidaan p = t[i] ja asetetaan j = i-1 Siirretään alkoita tarvittaessa: Jos j 0 ja t[j] > p, kopioidaan t[j+1] = t[j], asetetaan j = j-1 ja toistetaan Muuten lopetetaan alkioiden siirtäminen Kopioidaan t[j+1] = p Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 20/33

Lisäyslajittelu Kaksi sisäkkäistä silmukkaa, molempien suorituskertojen lukumäärä riippuu n:stä Pahimmassa tapauksessa vertailuja tehdään 1 + 2 + + (n 2) + (n 1) = n(n 1)/2 kappaletta Aikavaativuus O(n 2 ) Pahimmassa tapauksessa kopiointeja yhtä monta Lisäksi jokaisella i:n arvolla kaksi muuta kopiointia (aputietue p) Kopiointeja yhteensä n(n 1)/2 + 2(n 1) kappaletta Kertaluokka O(n 2 ) Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 21/33

Valintalajittelu (selection sort) Oletetaan: Vaiheessa i alkiot paikoissa 0, 1,..., i-1 lopullisessa järjestyksessä Etsitään loppuosan alkioista (paikat i, i+1,..., n-1) pienin ja tarvittaessa vaihdetaan se alkion t[i] kanssa Tämän jälkeen: Alkiot paikoissa 0, 1,..., i lopullisessa järjestyksessä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 22/33

Valintalajittelu (Ensimmäinen versio) 1. Toistetaan kaikilla i = 0, 1,..., n-2: 2. Kopioidaan p = t[i] ja asetetaan k = i Toistetaan kaikilla j = i+1, i+2,..., n-1: Jos t[j] < p, kopioidaan p = t[j] ja asetetaan k = j 3. Jos k i, kopioidaan t[k] = t[i] ja t[i] = p Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 23/33

Valintalajittelu Kaksi sisäkkäistä silmukkaa, molempien suorituskertojen lukumäärä riippuu n:stä Vertailuja tehdään (n 1) + (n 2) + + 2 + 1 = n(n 1)/2 kappaletta Aikavaativuus O(n 2 ) Pahimmassa tapauksessa myös kopiointien kertaluokka on O(n 2 ) Mutta: Aputietuetta p ei välttämättä tarvita silloin kun halutaan löytää pienin alkio Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 24/33

Valintalajittelu (Toinen versio) 1. Toistetaan kaikilla i = 0, 1,..., n-2: 2. Asetetaan k = i Toistetaan kaikilla j = i+1, i+2,..., n-1: Jos t[j] < t[k], asetetaan k = j 3. Jos k i, vaihdetaan t[k] ja t[i] keskenään Tässä versiossa kopiointeja enintään kertaluokan O(n) verran Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 25/33

Lajittelumenetelmien stabiilisuus Kuplalajittelu: Stabiili Lisäyslajittelu: Stabiili Valintalajittelu: Kumpikaan edellä esitetyistä versioista ei ole stabiili Mutta voidaan toteuttaa myös stabiilina Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 26/33

Raaka voima Tyypillinen raakaan voimaan perustuva algoritmi: Tutkitaan mahdollisia ratkaisuvaihtoehtoja kunnes: Haluttu ratkaisu löytyy Tai kaikki vaihtoehdot on tutkittu Tutkitaan järjestelmällisesti kaikki osajoukot tai permutaatiot Ongelmana ratkaisuvaihtoehtojen suuri lukumäärä Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 27/33

Permutaatiot Kuvataan ongelmaan liittyvät alkiot kokonaisluvuilla Ratkaisu esitetään kokonaislukujen jonona Ratkaisuvaihtoehtojen läpikäyminen tarkoittaa kokonaislukujen eri järjestysten eli permutaatioiden läpikäymistä Kokonaisluvut {1, 2,..., n} Erilaisia permutaatiota n! = 1 2... n kpl Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 28/33

Esimerkki Hamiltonin kehä -ongelma: Verkko, jossa solmut N = {1, 2,..., n} ja kaaret E = {(i, j) i N ja j N} Tehtävä: Etsi silmukka, joka käy jokaisessa verkon solmussa täsmälleen kerran Permutaatioratkaisu: Permutaatio {1, 2,..., n} esittää Hamiltonin kehää 1 2... n 1 (jos kaikki kaaret olemassa) Sallittu permutaatio: Verkossa on olemassa kaikki permutaation mukaiset kaaret Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 29/33

Esimerkki jatkuu Hamiltonin kehä -ongelman raakaan voimaan perustuva ratkaiseminen: Muodostetaan kaikki permutaatiot Tutkitaan, mitkä niistä ovat sallittuja Ei käyttökelpoinen, jos n suuri Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 30/33

Permutaatioiden muodostaminen Kaikki permutaatiot voidaan muodostaa rekursiivisesti: Kiinnitetään 1 ensimmäiseksi luvuksi, muodostetaan kaikki lukujen {2, 3,..., n} permutaatiot Kiinnitetään 2 ensimmäiseksi luvuksi, muodostetaan kaikki lukujen {1, 3,..., n} permutaatiot Jne. Kiinnitetään n ensimmäiseksi luvuksi, muodostetaan kaikki lukujen {1, 2,..., n 1} permutaatiot Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 31/33

Permutaatioiden muodostaminen // muodostetaan kaikki lukujen // {1, 2,..., n} permutaatiot permutaatio(m) { if (m == n) // seuraava permutaatio on nyt // taulukossa p[1..n] else for (j = m; j <= n; j++) { swap(p[j], p[m]); permutaatio(m+1); swap(p[j], p[m]); } } Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 32/33

Permutaatioiden muodostaminen // alustus ja ensimmäinen kutsu for (j = 1; j <= n; j++) p[j] = j; permutaatio(1); Permutaatioita n! kpl Tehdään kullekin permutaatiolle jotain, esimerkiksi jokin O(n)-operaatio Koko algoritmin aikavaativuus O(n n!) Algoritmit 1 Kevät 2018 Luento 10 Ke 14.2.2018 33/33