Algoritmit 2. Luento 7 Ti Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

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

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Algoritmit 2. Luento 9 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

4. Joukkojen käsittely

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 10 Ke Timo Männikkö

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 13 Ti 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 1. Demot Timo Männikkö

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 12 Ke Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

A TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

Algoritmit 1. Demot Timo Männikkö

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Algoritmit 1. Luento 14 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 13 Ti Timo Männikkö

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Kysymyksiä koko kurssista?

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

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 2. Luento 1 Ti Timo Männikkö

811120P Diskreetit rakenteet

A TIETORAKENTEET JA ALGORITMIT

4 Tehokkuus ja algoritmien suunnittelu

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Pienin virittävä puu (minimum spanning tree)

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

Datatähti 2019 loppu

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

10. Painotetut graafit

Ohjelmoinnin perusteet Y Python

18. Abstraktit tietotyypit 18.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Sisältö. 2. Taulukot. Yleistä. Yleistä

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Miten käydä läpi puun alkiot (traversal)?

Ohjelmoinnin perusteet Y Python

Transkriptio:

Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö

Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Joukot Joukko: Kokoelma alkioita Yksittäisiin alkioihin kohdistuvat operaatiot Useampaan joukkoon kohdistuvat operaatiot Esitystapaan vaikuttavat mm. Mikä on perusjoukko, mitä osajoukkoja käsitellään Voiko sama alkio esiintyä useammin samassa joukossa Voidaanko/tarvitseeko alkiot järjestää Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 3/26

Joukko-operaatioita Kuuluuko alkio x (osa)joukkoon A Mihin osajoukkoon alkio x kuuluu Lisää alkio x joukkoon A Poista alkio x joukosta A Käydään läpi joukon A alkiot jossain järjestyksessä Etsitään joukon pienin tai suurin alkio (jos alkioiden järjestys määritelty) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 4/26

Joukko-operaatioita Joukon A asettaminen samaksi kuin toinen joukko B (esimerkiksi tyhjäksi joukoksi ) Testataan, ovatko joukot A ja B samat Joukkojen A ja B leikkaus A B Joukkojen A ja B yhdiste (unioni) A B Joukkojen A ja B erotus A \ B Ovatko joukot A ja B alkiovieraita (A B = ) Alkiovieraiden joukkojen A ja B yhdiste eli merge-operaatio Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 5/26

Joukkojen esitystapoja Joukkojen identifiointi tunnuksella: Jokaisella (osa)joukolla tunnus (nimi, numero) Jokaiseen alkioon liittyy tieto (indeksi, osoitin), joka kertoo mihin joukkoon se kuuluu Joukkoon kuuluminen ja alkioiden siirtely yksinkertaisia operaatioita (vakioaikaisia) Muut operaatiot vaativat kaikkien alkioiden läpikäynnin Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 6/26

Joukkojen esitystapoja Linkitetty lista: Useimpien joukko-operaatioiden tehokas suoritus Taulukko: Sopii, jos (osa)joukoissa ei tapahdu paljon muutoksia Binääripuu: Yksittäisiä alkioita koskevien operaatioiden tehokas suoritus Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 7/26

Joukkojen esitystapoja Bittivektoriesitys: Sopii, jos perusjoukon alkioiden lkm n ei ole kovin suuri Jokainen alkio taulukossa, viittaus alkioon taulukkoindeksillä Jokaista (osa)joukkoa kohti on n:n bitin bittivektori Alkio i kuuluu joukkoon a, jos a[i] = 1 Alkio i ei kuulu joukkoon a, jos a[i] = 0 (Tai boolean-tyyppinen taulukko: a[i] = true tai false) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 8/26

Operaatiot bittivektoreille Kaikki joukko-operaatiot yksinkertaisia Esimerkiksi yhdiste c = a b: union(a, b, c) { for (int i = 0; i < n; i++) c[i] = a[i] b[i]; } Mutta: Aikavaativuus Θ(n) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 9/26

Alkiovieraat osajoukot Union-find (tai merge-find) -tehtävä: Joukko alkioita, jotka kaikki muodostavat aluksi yhden alkion osajoukon Osajoukkoja yhdistellään isommiksi osajoukoiksi Osajoukot säilyvät alkiovieraina Tarvittavat operaatiot: find: Etsi, missä osajoukossa alkio tällä hetkellä on union: Yhdistä kaksi osajoukkoa yhdeksi osajoukoksi Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 10/26

Operaatioiden toteutus Joukot linkitetyissä listoissa: Joukolla osoitin sekä ensimmäiseen että viimeiseen alkioon find: Käydään listat läpi Θ(n) union: Yhdistetään listat Θ(1) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 11/26

Operaatioiden toteutus Joukot taulukossa: Taulukon indeksi i tarkoittaa alkiota i Taulukon paikassa i on sen osajoukon tunnus, johon alkio i kuuluu find: Tutkitaan indeksin osoittama paikka Θ(1) union: Käydään taulukko läpi Θ(n) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 12/26

Toteutus puurakenteena Joukon alkiot puun solmuja Yksi puu esittää yhtä osajoukkoa Kaikki perusjoukon osajoukot muodostavat useamman puun metsän Mikä tahansa puun solmu voi olla juurisolmu Mitkä tahansa puun solmuista voivat olla juurisolmun lapsia, näiden lapsia, jne. Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 13/26

Toteutus puurakenteena Juurisolmu identifioi kyseisen osajoukon Muista solmuista on linkki vanhempaan find(x): Lähdetään solmusta x kohti juurta Kun päästään juureen, tiedetään osajoukko union(a, b): Tunnetaan osajoukkojen juurisolmut a ja b Asetetaan toisen osajoukon juurisolmu toisen osajoukon juurisolmun lapseksi Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 14/26

Operaatioiden lukumäärä Yhdisteen muodostaminen: Etsitään ensimmäisen osajoukon juurisolmu Etsitään toisen osajoukon juurisolmu Yhdistetään puut Jokaista union:ia edeltää kaksi find:ia Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 15/26

Operaatioiden aikavaativuus union: Puiden yhdistäminen vakioaikainen find: Vaativuus riippuu puun korkeudesta Pyritään pitämään puiden korkeudet mahdollisimman pieninä Muokataan operaatioita vastaavasti Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 16/26

Operaatioiden aikavaativuus union: Valitaan yhdisteen juurisolmuksi suuremman osajoukon juurisolmu Liitetään pienemmän osajoukon juuri yhdisteen juuren lapseksi Jos solmuja m, puun korkeus log(m + 1) find: Pienennetään kuljetun polun pituutta Hakupolun tiivistys: Siirretään polulla olevat solmut juurisolmun lapsiksi Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 17/26

Operaatioiden toteutus Alkiot kokonaislukuja väliltä 1... n Tallennusvektori pvjoukko Joukon tunnus juurisolmun indeksi Juurisolmua vastaavaan paikkaan tallennetaan kyseisen osajoukon alkioiden lukumäärä Lukumäärä tallennetaan vastalukuna, jotta juurisolmu tunnistetaan Muita solmuja vastaaviin paikkoihin tallennetaan kyseisen solmun vanhemman indeksi Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 18/26

Esimerkki 2 4 5 8 10 1 3 7 6 9 1 2 3 4 5 6 7 8 9 10 2-2 4-3 -1 10 4-1 10-3 Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 19/26

Esimerkki jatkuu 2 1 5 10 6 9 4 3 7 8 1 2 3 4 5 6 7 8 9 10 2-6 4-4 2 10 4 4 10 2 Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 20/26

Operaatioiden toteutus void union(int a, int b) // Oletus: a ja b juurisolmuja { int k; k = pvjoukko[a] + pvjoukko[b]; if (pvjoukko[a] <= pvjoukko[b]) { pvjoukko[b] = a; pvjoukko[a] = k; } else { pvjoukko[a] = b; pvjoukko[b] = k; } } Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 21/26

Operaatioiden toteutus int find(int x) { int j, k; // Juurisolmun etsintä: j = x; while (pvjoukko[j] > 0) j = pvjoukko[j]; // Hakupolun tiivistys: while (pvjoukko[x] > 0) { k = x; x = pvjoukko[x]; pvjoukko[k] = j; } return j; } Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 22/26

Operaatioiden toteutus Yleinen kahden joukon yhdiste: a = find(a); b = find(b); union(a, b); Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 23/26

Esimerkki jatkuu find(6) find(7) palauttaa 2 palauttaa 4 hakupolun tiivistys (hakupolun tiivistys) 2 1 5 6 10 9 4 3 7 8 1 2 3 4 5 6 7 8 9 10 2-6 4-4 2 2 4 4 10 2 Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 24/26

Esimerkki jatkuu union(2,4) kutsuttaessa 2 ja 4 juurisolmuja 2 1 4 5 6 10 3 7 8 9 1 2 3 4 5 6 7 8 9 10 2-10 4 2 2 2 4 4 10 2 Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 25/26

Operaatioiden aikavaativuus Perusjoukossa n alkiota Aluksi jokainen alkio muodostaa oman yhden alkion osajoukkonsa Korkeintaan n 1 kpl union-operaatioita Suoritetaan m kpl find-operaatioita... Pahimman tapauksen aikavaativuus Θ(n + m log n) Funktio log erittäin hitaasti kasvava, käytännössä log n 5 (mutta ei vakio) Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 26/26