130 likes | 305 Views
521144A, Algoritmit ja Tietorakenteet, syksy 2013. Kertausluento 27.11.2013. Sisältö (1/2). 1. Johdanto 1.1 Algoritmeista ja tietorakenteista 1.2 Johdanto algoritmien analyysiin 1.3 Funktioiden kasvusta 2. Algoritmien analyysi 2.1. Algoritmien oikeellisuus
E N D
521144A, Algoritmit ja Tietorakenteet, syksy 2013 Kertausluento 27.11.2013
Sisältö (1/2) • 1. Johdanto • 1.1 Algoritmeista ja tietorakenteista • 1.2 Johdanto algoritmien analyysiin • 1.3 Funktioiden kasvusta • 2. Algoritmien analyysi • 2.1. Algoritmien oikeellisuus • 2.2. Algoritmien suorituskyvyn analyysi • 2.3. Iteratiivisten algoritmien analyysi • 2.4. Rekursiivisten algoritmien analyysi • 3. Lajittelualgoritmeista • 3.1 Pikalajittelu (Quicksort) • Luento: Prioriteettijonot • 3.2 Kekolajittelu (Heapsort)
Sisältö (2/2) • 4. Tietorakenteita • 4.1 Abstrakti määritelmä • 4.2 Alkeistietorakenteet • 4.3 Hashtaulukot • 4.6Tietorakenteiden täydentäminen • 5. Verkkoalgoritmeja • 5.1 Leveyshaku • 5.2 Syvyyshaku • 5.3 Kruskalin algoritmi • 5.4 Dijkstra algoritmi
MIKSI ALGORITMEJA ANALYSOIDAAN? • Varmistamaan algoritmin oikea toiminta, ts. algoritmin päättyminen ja asianmukainen tulos • Oikeellisuus • Algoritmin suorituskyvyn tarkastelu • suorituskyky tarkoittaa sen kuluttamien resurssien määrää ja algoritmin kuluttamaa aikaa suhteessa syötteeseen, jälkimmäinen aikakompleksisuus
II.1.1.2 Esimerkki: Taulukon arvojen minimi Syöte: Taulukko A[1,..,n], n >= 1 Tulostus: Pienin luvuista A[1], … , A[n] MINIMI(A) 1. i = 2 2. x = A[1] 3. while i <= n 4. if A[i] < x then 5. x = A[i] 6. i = i+1 7. return x i on konvergentti Silmukkainvariantti: Kun i=k, rivillä 3 muuttujan x arvo on pienin taulukon arvoista A[1], …, A[k-1]
Funktioiden kasvu • https://www.raippa.fi/AlgoritmitJaTietorakenteet/3.%20Luento#Funktioiden_kasvun_vertailua.Funktioiden_kasvun_vertailua • http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions • Ongelman kompleksisuustyyppiä määriteltäessä voidaan käyttää esimerkiksi termejä "polynomisessa ajassa ratkeava" ja "eksponentiaalinen ongelma". • Esim. Jos algoritmin kompleksisuusluokka on Θ(n^k) (tai O(n^k)) sitä sanotaan polynomiaikaiseksi • Polynomiaikaisia algoritmeja pidetään laskennallisesti sovellettavina < • Polynomit kasvavat hitaammin kuin eksponentit, logaritmit kasvavat hitaammin kuin polynomit. • Iteratiiviset algoritmit: • Laske kokonaissuoritusaika kertomalla aika jokaisen operaation taajuudella, lopuksi summaa tulot • Rekursiiviset algoritmit: • Rekursiopuun avulla tarkastelu • Induktiivinen päättely • Rekursioyhtälön muodostaminen ja ”Master Theorem”
Lajittelualgoritmeja • Lisäyslajittelu, Insertion sort, Ο(n²) • http://en.wikipedia.org/wiki/Insertion_sort • Lomituslajittelu, Merge sort, O(n log n) • http://en.wikipedia.org/wiki/Merge_sort • Pikalajittelu, Quicksort, O(n log n) • http://en.wikipedia.org/wiki/Quicksort • Kekolajittelu, Heapsort, O(n log n) • http://en.wikipedia.org/wiki/Heapsort • Vertailuun perustuva lajittelualgoritmi ei voi olla nopeampi kuin luokkaa O(n log n). • On olemassa myös lineaariajassa toimivia lajittelualgoritmeja.
Tietorakenteet • Tietorakenne on äärellinen dynaaminen joukko, joka toteuttaa rajapintanaan sarjan operaatioita joiden kautta algoritmi voi muokata joukkoa. • Alkiot: avain, järjestysdata, satelliittidata • Operaatiot: etsi, lisää, poista, minimi, maksimi, seuraaja, edeltäjä • Pino (LIFO), jono (FIFO), linkitetty lista • Hash-taulukko, binäärinen etsintäpuu • Puna-mustat puut • Tietorakenteen täydentäminen • Järjestystunnuspuu, intervallipuut
Verkkoalgoritmit • Rakenne ja esitystavat • Vieruslista, matriisiesitys • Leveyshaku • Syvyyshaku • Kruskalin algoritmi (pienin virittävä puu) • Dijkstran algoritmi (kevein polku lähtösolmusta s)
Laskuharjoitukset • Viikot 45, 46, 49 • Osallistumisesta 5p/kerta, yht. Max 15p • TOL järjestää • O-notaatio, algoritmien oikeellisuus ja aikakompleksisuus • Master Theorem-soveltaminen, lajittelualgoritmit • Verkkojen leveys- ja syvyyshakualgoritmit
Ohjelmointiharjoitukset • Viikot 48, 50 • Ohjelmointiharjoituksen työselostus on palautettava kurssisuoritusta varten • Sisältää esitehtävän sekä labraharjoituksen • 1. harj. palautuksen takaraja 8.12.2013 • 2. harj. palautuksen takaraja 3.1.2014 • 20p + 20p, yht. max 40 p • https://noppa.oulu.fi/noppa/kurssi/521144a/python_archive • Huomatkaa, että Noppa lisää etuliitteen koodinpätkiin, poistakaa se tallennusvaiheessa!
Harjoitustyö • Työselostus ohjelmointikoodeineen palautettava viimeistään 17.1.2014 • Opiskelijan tulee varata aika lopputyön arviointisessioon palautuksen jälkeen. • Arviointi: max 30 p
Kurssin arvostelu • Tavoite: Arvosanat opiskelijoille 31.1.2014 • Laskarit, labraharkat, harj.työ • Max: 15p+40p+30p=85p • Läpipääsyyn vaaditaan 40p