Tietorakenteet ja algoritmit. Järjestäminen. Ari Korhonen
|
|
- Heidi Saaristo
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Tietorakenteet ja algoritmit Järjestäminen Ari Korhonen
2 6. Järjestäminen (sor0ng) 6.1 Johdanto 6.2 Yksinkertaiset menetelmät Valintajärjestäminen Lisäysjärjestäminen 6.3 Lomitusjärjestäminen (merge sort) Lomitus (merging) 6.4 Pikajärjestämismenetelmä (quicksort) Valikointi (selection) 6.5 Jakauman laskeminen (Distribution counting) 6.6 Kantalukujärjestäminen (radix sorting) Digitaalinen vaihtojärjestäminen Suora digitaalinen järjestäminen 6.7 Järjestämismenetelmän valinnasta Tietorakenteet ja algoritmit - syksy
3 6.1 Johdanto Järjestäminen eli lajittelu on tietojenkäsittelyn perusasioita. Syöte: sarja tietueita, avaimia, lukuja, tms. <a 1, a 2,..., a n > Tuloste: sellainen lukusarjan permutaatio <a 1, a 2,..., a n >, jolle a 1 a 2... a n Sovelluksia on lukemattomia: henkilörekisterit puhelinluettelo tilitapahtumat sähköpostiohjelma graafiset koordinaatit Tietorakenteet ja algoritmit - syksy
4 Perusajatukset: String key 1 Int key 2 Järjestetään tiedostoja tai lineaarisia tietorakenteita, jotka koostuvat tietueista Jokaisessa tietueessa on yksi tai useampi avain, jonka perusteella järjestetään. Sen lisäksi on dataa Kouluesimerkit yksinkertaisuuden vuoksi dataosuutta ei jatkossa näytetä avaimet lukuja tai yksittäisiä kirjaimia, vaikka todellisuudessa ne voivat olla mielivaltaisen pitkiä merkkijonoja tms. epäsuora järjestäminen, avaimet esim. taulukossa Tietorakenteet ja algoritmit - syksy
5 Epäsuora järjestäminen: ei vaihdeta tietueiden paikkaa muistissa vaan luodaan hakemisto (viittauksia), joita järjestetään String key 1 Int key 2 String key 1 3 Int key 2 String key 1 2 Int key 2 String key 1 4 a3 a2 a4 a1 Int key 2 1 Hakemisto: a3 a1 a4 a2 Abstrahoidaan tietueiden osoitteet pois Tietorakenteet ja algoritmit - syksy
6 Epäsuora järjestäminen: ei vaihdeta tietueiden paikkaa muistissa vaan luodaan hakemisto (viittauksia), joita järjestetään String key 1 Int key 2 String key 1 3 Int key 2 String key 1 2 Int key 2 String key Int key 2 1 Hakemisto: Tietorakenteet ja algoritmit - syksy
7 Epäsuora järjestäminen: ei vaihdeta tietueiden paikkaa muistissa vaan luodaan hakemisto (viittauksia), joita järjestetään String key 1 Int key 2 String key 1 3 Int key 2 String key 1 2 Int key 2 String key Int key 2 1 Hakemisto: Ainoastaan hakemiston viittaukset tietueisiin muuttuvat Tietorakenteet ja algoritmit - syksy
8 Jos järjestetään keskusmuistissa, on kyse sisäisestä järjestämisestä (internal sorting) Jos järjestetään levyllä, koska tiedostot eivät mahdu keskusmuistiin, on kyse ulkoisesta järjestämisestä (external sorting) tätä ei juurikaan käsitellä kurssilla. Tällä kurssilla keskitytään enemmän sisäiseen järjestämiseen Tietorakenteet ja algoritmit - syksy
9 Järjestämismenetelmän vaatima tietokoneaika on verrannollinen järjestettävien elementtien määrään seuraavasti: O( N 2 ) perusmenetelmät O(N log N) kehittyneet menetelmät Ω(N log N) alaraja järjestämisalgoritmeille, jotka perustuvat kokonaisten avainten vertailuihin O(N) jos avaimella on erikoisominaisuuksia, joita voidaan käyttää hyväksi bittitasolla Tietorakenteet ja algoritmit - syksy
10 Järjestämismenetelmä on stabiili (vakaa), jos se säilyttää samojen avainten keskinäisen järjestyksen. Perusmenetelmät ovat yleensä stabiileja, kehittyneet menetelmät eivät. Tähän vaikuttaa se, miten algoritmi käsittelee tilanteita, joissa verrataan yhtä suuria avaimia. Esimerkiksi, jos järjestän sähköpostiviestini ensin ajan suhteen ja sitten lähettäjän suhteen, stabiilissa menetelmässä saman lähettäjän viestit pysyvät aikajärjestyksessä. Kokeile tätä omalla sähköpostiohjelmallasi. Jos lajiteltavat avaimet ovat kaikki erilaisia, ei stabiiliudella ole merkitystä Tätä seikkaa hyödyntämällä kaikista järjestämismenetelmistä voidaan tehdä stabiileja (miten?) Tietorakenteet ja algoritmit - syksy
11 Järjestämismenetelmän valintaan vaikuttavia tekijöitä ovat: tiedon määrä (järjestettävän aineiston koko) järjestämismenetelmän tehokkuus (O(N 2 ), O(NlogN), O(N)) avaimen laatu, esim. integer / string ulkoisen tilan tarve (O(N), O(1)) onko menetelmä stabiili vai ei alkioiden vaihtojen kustannukset (~ tietoalkion koko ) järjestysaste menetelmän monimutkaisuus Tietorakenteet ja algoritmit - syksy
12 6.2 Yksinkertaiset menetelmät Järjestämisen perusmenetelmät perustuvat vierekkäisten alkioiden vertailuun ja niiden vaihtamiseen keskenään tai siirtämiseen Valintajärjestäminen Lisäysjärjestäminen (Kuplajärjestäminen) EI KANNATA KÄYTTÄÄ Tietorakenteet ja algoritmit - syksy
13 6.2.1 Valintajärjestäminen (selec0on sort) Etsitään taulukon pienin alkio ja sijoitetaan se taulukon alkuun vaihtamalla sen paikka 1. alkion kanssa. Seuraavaksi etsitään jäljellä olevasta osuudesta taulukon toisiksi pienin alkio ja vaihdetaan se 2. alkion kanssa, jne Tietorakenteet ja algoritmit - syksy
14 6.2.1 Valintajärjestäminen (selec0on sort) Vertailuja O(N 2 ). Vaihtoja tarvitaan vain N-1 kappaletta. Tällä on merkitystä, jos vaihto aiheuttaa jonkin työlään operaation tai keskenään vaihdettavat tietueet ovat suuria. Viimeksi mainittu asia voidaan kiertää epäsuoralla järjestämisellä, jossa järjestetäänkin hakemisto eikä itse tietueita (vaihdetaankin osoittimia eikä tietueita). for (i = 0; i < N-1; i++) { } min = i; for (j = i+1; j < N; j++) if (a[j] < a[min]) temp = a[min]; a[min] = a[i]; a[i] = temp; min = j; Tietorakenteet ja algoritmit - syksy
15 6.2.1 Valintajärjestäminen (selec0on sort) Minua hämää hieman tämä tehtävä: "Kuinka monta kertaa valintajärjestämisessä alkioita vaihdetaan keskenään (swap) kun järjestetään n alkiota?" Jos n alkiota on jo järjestyksessä, niin vaihtaako se siinä tapauksessa "itsensä" vai miksi parhainkin tapaus on O(n)? CSE-A1140 for (i = 0; i < N-1; i++) { } min = i; for (j = i+1; j < N; j++) if (a[j] < a[min]) temp = a[min]; a[min] = a[i]; a[i] = temp; min = j; Tietorakenteet ja algoritmit - syksy
16 6.2.2 Lisäysjärjestäminen (inser0on sort) Järjestettävä aineisto jakautuu kahteen osaan, jo järjestettyyn osaan ja sen jälkeiseen järjestämättömään osaan Joka askelella otetaan järjestämättömän osan ensimmäinen alkio, verrataan sitä askel askeleelta järjestettyyn osaan, kunnes oikea kohta löytyy. Alkio sijoitetaan tähän väliin, jolloin järjestynyt osa on kasvanut yhdellä Tietorakenteet ja algoritmit - syksy
17 Animaa0o coe428/sorting/insertionsort.html Tietorakenteet ja algoritmit - syksy
18 for (i = 1; i < N; i++) /* i: askeltaja */ { temp = a[i]; /* temp: tilapäissäilö */ j = i; /* j: askeltaja */ while (j > 0 && a[j-1] > temp) { a[j] = a[j-1]; j--; } a[j] = temp; } Testi j > 0 on välttämätön, jotta indeksi ei juokse taulukon ulkopuolelle Tietorakenteet ja algoritmit - syksy
19 Testi j > 0 voidaan välttää sijoittamalla paikkaan a[0] vartiosotilas (sentinel), joka on arvoltaan pienempi kuin taulukon muut alkiot. Nyt while-silmukka ei juokse taulukon alarajasta läpi. Samalla koodi yksinkertaistuu ja tehostuu hieman. a[0] = INT_MIN; for (i = 2; i <= N; i++) /* askeltaja */ { temp = a[i]; /* tilapäissäilö */ j = i; /* askeltaja */ while (a[j-1] > temp) { a[j] = a[j-1]; j--; } a[j] = temp; } Tietorakenteet ja algoritmit - syksy
20 Järjestettävä data on alkioissa a[1] - a[n] Sisäsilmukka suoritetaan keskimäärin N 2 /2 kertaa Jos data on melkein järjestyksessä, algoritmi toimii lineaarisessa ajassa. Lisäysjärjestämistä käytetään usein manuaalisessa järjestämisessä, esim. postinjakajilla. Tällöin lisäyskohta haetaan älykkäämmin ja lisäys voidaan toteuttaa yhdellä operaatiolla => algoritmin tehokkuus on noin N log N manuaalisessa toteutuksessa Tietorakenteet ja algoritmit - syksy
21 Perusalgoritmien yleinen tehokkuus Analyysiä: algoritmi, joka järjestää alkioita vaihtamalla vierekkäisiä alkioita keskenään, vaatii pahimmassa tapauksessa aikaa Ω(N 2 ) Oletetaan järjestämätön lista arvoja, joiden joukossa ei ole duplikaatteja Inversio on tapaus, jossa kaksi listan alkiota on väärässä järjestyksessä. Esim. i < j, mutta a[i] > a[j]. Teoreema 6.1. Inversioiden lukumäärä satunnaisessa listassa on keskimäärin N (N-1) / Tietorakenteet ja algoritmit - syksy
22 Todistus: Jokaista listaa L kohti on olemassa yksikäsitteinen käänteislista L R Oletetaan pari (x, y), x > y listassa L. Tällöin pari (y, x), x > y esiintyy käänteislistassa L R Yo. pari on inversio täsmälleen yhdessä listoista L ja L R Mahdollisten parien lukumäärä listassa yhteensä on (N- 1) + (N- 2) = N (N- 1) / 2 Keskimääräinen määrä inversioita listaa kohti on siis edellisen puolikas => Inversioita on siis keskimäärin N (N- 1) / 4 kappaletta Tietorakenteet ja algoritmit - syksy
23 Teoreema 6.2. Mikä tahansa algoritmi, joka järjestää alkioita vaihtamalla vierekkäisiä alkioita keskenään, vaatii pahimmassa tapauksessa aikaa Ω (N 2 ) Todistus: Teoreema 6.1: Inversioiden lukumäärä on N(N-1)/4 = Ω (N 2 ) Jokainen vierekkäisten alkioiden vaihto poistaa vain yhden inversion => Tarvitaan Ω(N 2 ) vaihtoa Tietorakenteet ja algoritmit - syksy
24 Tämä on ns. alarajatodistus (lower bound proof), joka pätee kaikille em. ehdon täyttäville algoritmeille, riippumatta siitä, onko näitä edes keksitty. Tehokkaammat järjestämisalgoritmit perustuvat siihen, että ne siirtävät alkioita kerralla kauemmas ja siten poistavat ker- ralla useampia kuin yhden inversion Tietorakenteet ja algoritmit - syksy
25 6.3 Lomitusjärjestäminen (merge sort) Yhdistetään järjestäminen ja lomitus: 1. Jaa tiedosto kahtia 2. Järjestä puoliskot rekursiivisesti 3. Yhdistele puoliskot yhdeksi (lineaarinen merging) Hajoita ja hallitse (Divide & Conquer) -algoritmi (kuten myös quicksort) T(N) = 2T(N/2) + N, T(1) = 1 Tehokkuus aina N log N Tietorakenteet ja algoritmit - syksy
26 Mergesort visualisa0on mergesort.html Jos joku kaipaa suhteellisen perusteellista selitystä joidenkin järjestämismenetelmien toiminnasta, niin suosittelen katsomaan Harvardin videopätkiä. esimerkiksi quick sort ja merge sort. Useimmista menetelmistä taitaa löytyä video Tietorakenteet ja algoritmit - syksy
27 6.3.1 Lomitus (merging) Kaksi järjestyksessä olevaa tiedostoa yhdistetään uudeksi tiedostoksi, joka on myös järjestyksessä Tyyppitilanne: Rekisteriin, joka on järjestetty, lisätään uusia elementtejä Ne kootaan ensin tapahtumatiedostoon (myös järjestyksessä) Nämä yhdistetään määräajoin Yhdistely lineaarisessa ajassa, two-way merging: a[0..m-1], b[0..n-1] => c[0..m+n-1] Tietorakenteet ja algoritmit - syksy
28 Valitaan aina pienin alkio a:sta ja b:stä ja kirjoitetaan se c:hen. Taulukkojen lopussa vahtisotilaat. i = 0; j = 0; /* i,j: askeltajat */ a[m] = INT_MAX; b[n] = INT_MAX; for (k = 0; k < M + N; k++) /* k: askeltaja */ if ( a[i] < b[j] ) { c[k] = a[i]; /* c: järjestelijä */ i = i + 1; } else { c[k] = b[j]; j = j + 1; } Vaatii aikaa O(M + N) Tietorakenteet ja algoritmit - syksy
29 Mergesort taulukoille Tietorakenteet ja algoritmit - syksy
30 Mergesort linkitetyille listoille: link mergesort(link alkuosa; int N) /* alkuosa: kulkija */ { /* N: askeltaja */ link c, loppuosa; /* c: askeltaja, loppuosa: tilapäissäilö */ int i; /* i: askeltaja */ } if (alkuosa->next == z) return alkuosa; else { c = alkuosa; for (i = 2; i <= (N / 2); i++) // etsitään loppuosan edeltäjä c = c->next; loppuosa = c->next; c->next = z; return merge( mergesort(alkuosa, N / 2), mergesort(loppuosa, N-(N/2))); } Tietorakenteet ja algoritmit - syksy
31 Mergesort linkitetyille listoille: link mergesort(link alkuosa; int N) /* alkuosa: kulkija */ { /* N: askeltaja */ link c, loppuosa; /* c: askeltaja, loppuosa: tilapäissäilö */ int i; /* i: askeltaja */ } if (alkuosa->next == z) return alkuosa; else { c = alkuosa; for (i = 2; i <= (N / 2); i++) // etsitään loppuosan edeltäjä c = c->next; loppuosa = c->next; c->next = z; return merge( mergesort(alkuosa, N / 2), mergesort(loppuosa, N-(N/2))); } Tietorakenteet ja algoritmit - syksy
32 link merge(link a; link b){...} two-way merge linkitetyille listoille Tietorakenteet ja algoritmit - syksy
33 Yhteenveto: lomitusjärjestäminen N log N -algoritmi Lyhyt sisin silmukka Yleensä stabiili Mergesort soveltuu hyvin tilanteisiin, joissa tietoon päästään käsiksi vain peräkkäisjärjestyksessä (esim. linkitetyt listat, ulkoiset tiedostot). Toteutus taulukolla vaatii ylimääräisen muistitilan Voidaan toteuttaa myös ei-rekursiivisena Tietorakenteet ja algoritmit - syksy
34 6.4 Pikajärjestäminen (Quicksort) Kehittäjä C.A.R. Hoare 1960 Tunnetuin ja yleisin tehokas järjestämismenetelmä Keskimääräinen tehokkuus N log N Pahin tapaus N 2, mutta se voidaan välttää pienillä virityksillä Kohtuullisen helppo toteuttaa perusmuodossaan Tietorakenteet ja algoritmit - syksy
35 PERUSIDEA: Partitionti muokkaa taulukkoa a[left..right] ja hakee siitä kohdan i siten, että 1) alkio a[i] on kohdallaan 2) alkiot a[left].. a[i-1] a[i] 3) alkiot a[i+1]..a[right] a[i] Tämän jälkeen partitiointi suoritetaan molemmille puoliskoille rekursiivisesti Tietorakenteet ja algoritmit - syksy
36 Quicksort on divide & conquer -algoritmi void quicksort(int left; int right) { /* left, right: kulkijat */ int i; /* i: kiintoarvo */ if (right > left) { i = partition(left, right); quicksort(left, i-1); quicksort(i+1, right); } } Tietorakenteet ja algoritmit - syksy
37 (Erään) partitiofunktion toiminta: 1. Valitaan alueen oikeasta reunasta partitioalkio (pivot-alkio) 2. Verrataan siihen alkioita yhtäaikaa taulukon vasemmasta ja oikeasta reunasta alkaen 1. Vasemmasta reunasta osoitin kasvaa oikealle ja oikeasta reunasta vasemmalle. 2. Osoitin pysähtyy, kun vasemmalta löytyy pivotia suurempi ja oikealta vastaavasti pivotia pienempi alkio. 3. Nämä alkiot vaihdetaan keskenään. => Vaihdetaan vasemmalla olevat sitä suuremmat alkiot oikealla oleviin sitä pienempiin alkioihin 3. Kun osoittimet menevät ristiin, vaihdetaan pivot siihen, mihin vasenosoitin pysähtyi. 4. Pivot-alkion kanssa yhtäsuuret alkiot osallistuvat vaihtoon (ei välttämätöntä, mutta tasapainottaa algoritmin toimintaa) Tietorakenteet ja algoritmit - syksy
38 ... b a Q... B y z y P swap... b a B... Q y z y P swap Tietorakenteet ja algoritmit - syksy
39 int partition(int left; int right) { int i, j, pivot, apu; pivot = a[right]; /* pivot: kiintoarvo */ i = left - 1; /* i: askeltaja */ j = right; /* j: askeltaja */ do { do i++; while (a[i] < pivot); do j--; while (a[j] > pivot); apu = a[i]; a[i] = a[j]; a[j] = apu; /* apu: tilapäissäilö */ } while (j > i); apu = a[i]; a[i] = a[right]; a[right] = apu; return i; } Huom! Vertailu a[j] > pivot riittää, jos taulukon alkuun sijoitetaan vartiosotilas (eli pienin mahdollinen alkio) Tietorakenteet ja algoritmit - syksy
40 Pahin tapaus Kun partitionti epäonnistuu Toiseen puoleen jää N-k alkiota ja toiseen vain k (vakio) << N Jos tämä tapahtuu (lähes) jokaisella partitiointikierroksella (Θ(N) operaatio) saadaan rekursioyhtälö (kun k=1) T(N) = T(N-1) + N, T(1) = 1 T(N) = N + (N-1) + (N-2) = Θ(N 2 ) Epätasapainoinen partitiointi johtaa neliölliseen käyttäytymiseen! Tehtävä: Anna esimerkki syötteestä, jolla tämä tapahtuu Tietorakenteet ja algoritmit - syksy
41 Ongelmia ja virityksiä 1) Jos taulukko on valmiiksi järjestyksessä, partitiot degeneroituvat ja kyseessä on N 2 algoritmi Valitaan partitioelementti mediaani-kolmesta menetelmällä tai satunnaisesti 2) Sama tilanne johtaa siihen, että suoritetaan N rekursiokutsua, jolloin ajonaikaisessa pinossa on N pinokehystä Poistetaan rekursio ja työnnetään suuremman alueen rajat itse pinoon (pienempi käsitellään suoraan). Pinon kooksi tulee korkeintaan log N Tietorakenteet ja algoritmit - syksy
42 3) Rekursio suoritetaan pienillekin partitioille tai Vaihdetaan lisäysjärjestämiseen, kun right - left < M (kutsutaan lisäysjärjestämistä O(N) kertaa) Lopetetaan vastaavassa tilanteessa quicksort ja järjestetään lopuksi koko taulukko lisäysjärjestämisellä (kutsutaan lisäysjärjestämistä yhden kerran) Tietorakenteet ja algoritmit - syksy
43 Paras tapaus Partitiointi jakaa aineiston tasan kahteen osaan T(N) = 2T(N/2) + N, T(2) = 1 ratkaistaan esim. sijoituksella N=2 k, ja jakamalla molemmat puolet 2 k :lla, kuten aiemmin on osoitettu. T(N) = O(NlogN) Tietorakenteet ja algoritmit - syksy
44 6.4.1 Valikoin0 (selec0on) "Hae mielivaltaisessa järjestyksessä olevasta tietoaineistosta k:nneksi suurin alkio. Esim. "Hae aineiston mediaani Täsmällinen järjestäminen vie turhaa aikaa Prioriteettijonon avulla O(N + k log N) esim. mediaanin haku O(N log N) Jos k on pieni, valintajärjestäminen on hyvä menetelmä Mielivaltaiselle aineistolla voidaan soveltaa quicksortin idea: Partitioidaan aineisto ja otetaan jatkoon se osuus, johon k sisältyy Tietorakenteet ja algoritmit - syksy
45 int quickselect(int left; int k; int right) { /* left, right: kulkijat; k: kiintoarvo */ int i = -1; /* i: kiintoarvo */ if (left < right) { i = partition(left, right); if (k < i) return quickselect(left, k, i-1); if (k > i) return quickselect(i+1, k, right); } return i; } Keskimääräinen kompleksisuus O(N) Tietorakenteet ja algoritmit - syksy
46 Erilaisia 0lanteita Osalla algoritmeista toiminta vaihtelee sen mukaan, missä järjestyksessä alkuperäinen taulukko on Tietorakenteet ja algoritmit - syksy
47 Tietorakenteet ja algoritmit - syksy
48 6.5 Jakauman laskeminen (Distribu0on coun0ng) N tietuetta, joissa kokonaislukuavaimia välillä 0..M-1. N >> M; Esim. a = <x,y,x,y,z,y,z>, N = S = 7, M = 3 "Etsitään samojen avainarvojen alueet taulukossa" 1) Aluelaskurien alustus; count = <0,0,0> for (i=0; i<m; i++) count[i] = 0; 2) Lasketaan avainten jakauma; count = <2,3,2> for (i=0; i<n; i++) count[a[i]]++; Tietorakenteet ja algoritmit - syksy
49 3) Lasketaan kumulatiivinen jakauma; count = < 2,5,7> for (j=1; j<m; j++) count[j] += count[j-1]; 4) Sijoitetaan avaimet alueisiinsa; t = < x,x,y,y,y,z,z > (a=<x,y,x,y,z,y,z>) for (i=n-1; i>=0; i--) { t[ count[a[i]]-1 ] = a[i]; // t[6]=z,t[4]=y,t[5]=z count[a[i]]--; } 5) Lajiteltu aineisto on nyt aputaulukossa t = a Tietorakenteet ja algoritmit - syksy
50 6.6 Kantalukujärjestäminen (radix sor0ng) Järjestäminen perustuu siihen, että käsitellään ja vertaillaan avaimen osia Esimerkki: Avaimet ovat kokonaislukuja välillä Järjestetään dekadeittain. Tietokoneessa avaimia käsitellään binäärilukuina eli järjestetään bittipositio/bittiryhmä kerrallaan Ominaisuuden hyväksikäyttö vaatii tehokasta pääsyä bittitason toimintoihin. Jos avaimet ovat lyhyitä, kannattaa käyttää jakauman laskemismenetelmää. Tarvittavan aputaulukon count koko on 2 b Tietorakenteet ja algoritmit - syksy
51 Tärkeimmät menetelmät ovat: digitaalinen vaihtojärjestäminen (O(N log N)) suora digitaalinen järjestäminen (O(N)) Tietorakenteet ja algoritmit - syksy
52 6.6.1 Digitaalinen vaihtojärjestäminen (radix exchange sort) Tiedot järjestetään bittipositio kerrallaan vasemmalta oikealle Kukin positio jaetaan kahteen osaan keräämällä nollat ja ykköset omiin ryhmiin Osat järjestetään edelleen rekursiivisesti seuraavasta bitistä lähtien Jos osan kooksi tulee 1, sitä ei järjestetä eteenpäin Tietorakenteet ja algoritmit - syksy
53 Esimerkki Tietorakenteet ja algoritmit - syksy
54 Tehokkuus N log N tai N*b (b = bittimäärä) Jos avaimet ovat satunnaisesti jakautuneita, ei kaikkia bittejä tarvitse tutkia log N bittiä riittää, jolloin menetelmä on jopa nopeampi kuin Quicksort Samoilla avaimilla käydään läpi kaikki bitit, jolloin tehokkuus laskee Tietorakenteet ja algoritmit - syksy
55 6.6.2 Suora digitaalinen järjestäminen (straight radix sort) Järjestetään bittipositio kerrallaan oikealta vasemmalle Käyttää jakauman laskemista M:n bitin osuuksille (M 1) Perustuu osaltaan siihen, että jakauman laskeminen on stabiili menetelmä Jos M on yksi, järjestetään bitti kerrallaan. Tehokkuus paranee, jos M kasvaa Hyvä suositus on M = b / 4, jossa b on avainten bittien lukumäärä Tietorakenteet ja algoritmit - syksy
56 Esimerkki Tietorakenteet ja algoritmit - syksy
57 Esim. 32-bittisiä kokonaislukuja järjestetään tavu kerrallaan Tehokkuusluku on N, eli kyseessä on lineaarinen menetelmä Mutta: vaatii lisätilaa 2 b alkiota (esim. 2 8 = 256) hidas sisin luuppi Tietorakenteet ja algoritmit - syksy
58 Seuraavalla kerralla Puurakenteet ja puiden läpikäyntialgoritmit Aihe prioriteettijonot jää itseopiskelun varaan! Tietorakenteet ja algoritmit - syksy
59 6.7 Järjestämismenetelmän valinnasta Yhteenveto tehokkuusluvuista W(N) A(N) Selection sort N 2 /2 N 2 /2 Insertion sort N 2 /2 N 2 /4 Distribution counting c 0 N c 0 N Quicksort N 2 /2 1.38NlogN Radix exchange sort c 0 NlogN c 0 NlogN Straight radix sort c 0 N c 0 N Heapsort 2.0NlogN ei tietoa Mergesort 1.0NlogN 1.0NlogN Tietorakenteet ja algoritmit - syksy
60 Huom! Kaikki laskettavat operaatiot eivät ole keskenään suoraan verrannollisia Kaikille algoritmeille ei löytynyt vakiokertoimen c 0 arvoa Tietorakenteet ja algoritmit - syksy
61 Muita ominaisuuksia Lisämuistin tarve stabiilius Selection sort Ei On Insertion sort Ei On Distribution count N + count On Quicksort Ei Ei Radix exchange sort Ei Ei Straight radix sort N + 2 m On Heapsort (ei käsitelty tässä) Ei Ei Mergesort N tai osoitt. On Huom! Myös rekursio aiheuttaa yleiskustannuksia tilankäyttöön Mergesort voidaan toteuttaa ilman lisätilaa (monimutkaista) Quicksort ja Radix exhange sort voidaan toteuttaa stabiileina (monimutkaista) Tietorakenteet ja algoritmit - syksy
62 Tehokkuusluku ei kerro kaikkea! On muitakin näkökulmia: Selection sort Yksinkertainen Pienelle tiedostolle, jossa suuret tietueet Voidaan soveltaa valikointiongelmaan, kun k on pieni Insertion sort Yksinkertainen Hyvä menetelmä pienille tiedostoille (N<50) Tehokas (lineaarinen) menetelmä, jos tiedosto 'melkein järjestyksessä Tietorakenteet ja algoritmit - syksy
63 Heapsort Taattu N log N Sopii hyvin ongelmaan, jossa halutaan löytää aineistosta k pienintä alkiota (k << N) Mergesort Taattu N log N Vaatii lisätilan Sopii tilanteisiin, joissa dataa käsitellään peräkkäisesti Lomitus on ulkoisten järjestämismenetelmien perusalgoritmeja Quicksort Käytännön valinta useimpiin suuriin sovelluksiin Partitioelementtiä ei tule valita triviaalisti laidoista Viritykset ohjelmoitava huolellisesti Ei käy, jos tarvitaan stabiiliutta Huolelliset viritykset, jos ehdoton vaatimus NlogN-käyttäytymisestä Voidaan soveltaa valikointiongelmaan lineaarisessa ajassa Tietorakenteet ja algoritmit - syksy
64 Distribution counting Yksinkertainen Tilanteisiin, joissa avainavaruus pienempi kuin avainten määrä Vaatii lisätilaa Radix exchange sort Implementaatio edellyttää pääsyä bitti-informaatioon kiinni Voidaan toteuttaa myös muissa kantaluvuissa (bucket sort) Tehokas, jos aineisto satunnainen Tehokkuus kärsii, jos aineistossa runsaasti samoja avainarvoja Ei kannata käyttää merkkijonoavaimille Straight radix sort Implementaatio edellyttää pääsyä bitti/tavuinformaatioon kiinni Tehokas Vaatii lisätilan, joka voi olla rasite suurilla tiedostoilla Ei kannata käyttää merkkijonoavaimille Tietorakenteet ja algoritmit - syksy
Algoritmit 1. Luento 11 Ti Timo Männikkö
Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017
LisätiedotAlgoritmit 1. Luento 12 Ti Timo Männikkö
Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit
LisätiedotAlgoritmit 1. Luento 12 Ke Timo Männikkö
Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu
Lisätiedot9 Erilaisia tapoja järjestää
TIE-20100 Tietorakenteet ja algoritmit 198 9 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi.
Lisätiedot4 Tehokkuus ja algoritmien suunnittelu
TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
LisätiedotTietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017
LisätiedotA TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT LISÄÄ JÄRJESTÄMISESTÄ JÄRJESTÄMISEN TEORIAA Inversio taulukossa a[] on lukupari (a[i],a[j]) siten, että i < j mutta a[i] > a[j] Esimerkki Taulukko a[] = [2, 4, 1, 3]
LisätiedotAlgoritmit 2. Luento 2 To Timo Männikkö
Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento
LisätiedotTIE Tietorakenteet ja algoritmit 25
TIE-20100 Tietorakenteet ja algoritmit 25 Tällä kurssilla keskitytään algoritmien ideoihin ja algoritmit esitetään useimmiten pseudokoodina ilman laillisuustarkistuksia, virheiden käsittelyä yms. Otetaan
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018
LisätiedotTietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:
Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] = = T [i + 1] 4 return True 5
Lisätiedot1 Erilaisia tapoja järjestää
TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi
LisätiedotAlgoritmit 1. Luento 10 Ke Timo Männikkö
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
LisätiedotAlgoritmit 2. Luento 2 Ke Timo Männikkö
Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento
LisätiedotA TIETORAKENTEET JA ALGORITMIT
A274105 TIETORAKENTEET JA ALGORITMIT HARJOITUSTEHTÄVÄT 6 DEADLINE 1.4.2009 KLO 9:00 Kynätehtävät tehdään kirjallisesti ja esitetään harjoituksissa. Välivaiheet näkyviin! Ohjelmointitehtävät sähköisesti
Lisätiedot811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu
832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa
Lisätiedot5 Kertaluokkamerkinnät
TIE-20100 Tietorakenteet ja algoritmit 75 5 Kertaluokkamerkinnät Tässä luvussa käsitellään asymptoottisessa analyysissa käytettyjä matemaattisia merkintätapoja Määritellään tarkemmin Θ, sekä kaksi muuta
LisätiedotAlgoritmit 1. Luento 5 Ti Timo Männikkö
Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti
LisätiedotAlgoritmit 2. Luento 7 Ti Timo Männikkö
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
Lisätiedot1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:
Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return
LisätiedotKierros 2: Järjestämisalgoritmeja
Kierros : Järjestämisalgoritmeja Tommi Junttila Aalto University School of Science Department of Computer Science CS-A4 Data Structures and Algorithms Autumn 7 Tommi Junttila (Aalto University) Kierros
Lisätiedot58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut
58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille
Lisätiedot811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista
811312A Tietorakenteet ja algoritmit 2016-2017 III Lajittelualgoritmeista Sisältö 1. Johdanto 2. Pikalajittelu 3. Kekolajittelu 4. Lajittelualgoritmien suorituskyvyn rajoista 811312A TRA, Lajittelualgoritmeista
Lisätiedotf(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))
Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia
Lisätiedot8. Lajittelu, joukot ja valinta
8. Lajittelu, joukot ja valinta Yksi tietojenkäsittelyn klassisista tehtävistä on lajittelu (järjestäminen) (sorting) jo mekaanisten tietojenkäsittelylaitteiden ajalta. Lajiteltua tietoa tarvitaan lukemattomissa
LisätiedotCS-A1140 Tietorakenteet ja algoritmit
CS-A1140 Tietorakenteet ja algoritmit Kierros 2: Järjestämisalgoritmeja Tommi Junttila Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Syksy 2016 Materiaali Kirjassa Introduction to Algorithms,
Lisätiedot58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden
LisätiedotMukautuvat järjestämisalgoritmit
1 Mukautuvat järjestämisalgoritmit Riku Saikkonen TIK-päivä, 17. 1. 2013 2 Mukautuva järjestäminen minkä tahansa vertailuihin perustuvan järjestämisalgoritmin täytyy tehdä pahimmassa tapauksessa vähintään
LisätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
LisätiedotTAMPEREEN TEKNILLINEN YLIOPISTO
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ
Lisätiedot(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ä.
Loppu seuraa suoralla laskulla: n n Tave TR = p j (1 + b (i, j)) j=1 = 1 + 1 i
LisätiedotPikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin
Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin jaetaan muut alkiot kahteen ryhmään: L: alkiot, jotka eivät suurempia kuin pivot G : alkiot, jotka suurempia kuin pivot 6 1 4 3 7 2
LisätiedotOlkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).
Esimerkki Lomitusjärjestäminen merge-sort(a, p, q): var k % paikallinen muuttuja, vakiotila 1. if p < q then 2. r := (p + q)/2 3. merge-sort(a, p, r) 4. merge-sort(a, r + 1, q) 5. merge(a, p, r, q) Olkoon
LisätiedotOn annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.
6. Järjestäminen On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. Tämä on eräs klassisimpia tietojenkäsittelyongelmia,
LisätiedotAlgoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019
Lisätiedotuseampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero
Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op
LisätiedotAlgoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö
Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu
LisätiedotTietorakenteet, laskuharjoitus 7, ratkaisuja
Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9
LisätiedotAlgoritmit 2. Luento 8 To Timo Männikkö
Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät
Lisätiedot811312A Tietorakenteet ja algoritmit II Perustietorakenteet
811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi
Lisätiedot58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)
58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä
LisätiedotTAMPEREEN TEKNILLINEN YLIOPISTO
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ
LisätiedotAlgoritmit 1. Luento 2 Ke Timo Männikkö
Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät
LisätiedotTKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)
TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta
LisätiedotAlgoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotAlgoritmit 2. Demot Timo Männikkö
Algoritmit 2 Demot 1 27.-28.3.2019 Timo Männikkö Tehtävä 1 (a) 4n 2 + n + 4 = O(n 2 ) c, n 0 > 0 : 0 4n 2 + n + 4 cn 2 n n 0 Vasen aina tosi Oikea tosi, jos (c 4)n 2 n 4 0, joten oltava c > 4 Kokeillaan
LisätiedotAlgoritmit 2. Luento 14 Ke Timo Männikkö
Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen
LisätiedotHakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina
Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella
Lisätiedot811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu
811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään
Lisätiedot811312A Tietorakenteet ja algoritmit, 2015-2016. VI Algoritmien suunnitteluparadigmoja
811312A Tietorakenteet ja algoritmit, 2015-2016 VI Algoritmien suunnitteluparadigmoja Sisältö 1. Hajota ja hallitse-menetelmä 2. Dynaaminen taulukointi 3. Ahneet algoritmit 4. Peruuttavat algoritmit 811312A
LisätiedotAlgoritmit 2. Luento 9 Ti Timo Männikkö
Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon
LisätiedotALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava
LisätiedotTämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan
TIE-20100 Tietorakenteet ja algoritmit 178 Keko Taulukko A[1... n] on keko, jos A[i] A[2i] ja A[i] A[2i + 1] aina kun 1 i n 2 (ja 2i + 1 n). Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti
Lisätiedotja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2
Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,
Lisätiedot1.4 Funktioiden kertaluokat
1.4 Funktioiden kertaluokat f on kertaluokkaa O(g), merk. f = O(g), jos joillain c > 0, m N pätee f(n) cg(n) aina kun n m f on samaa kertaluokkaa kuin g, merk. f = Θ(g), jos joillain a, b > 0, m N pätee
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT HAJAUTUS, JÄRJESTÄMISESTÄ HAJAUTTAMISEN IDEA Jos avaimet (tai data) ovat kokonaislukuja välillä 1 N, voidaan niitä käyttää suoraan indeksointiin Järkevä rakenne on
Lisätiedotlähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa
Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()
LisätiedotLiitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1
Liitosesimerkki 16.02.06 Tietokannan hallinta, kevät 2006, J.Li 1 Esim R1 R2 yhteinen attribuutti C T(R1) = 10,000 riviä T(R2) = 5,000 riviä S(R1) = S(R2) = 1/10 lohkoa Puskuritilaa = 101 lohkoa 16.02.06
LisätiedotAlgoritmianalyysin perusteet
Tietorakenteet ja algoritmit Algoritmianalyysin perusteet Ari Korhonen 1 5. ALGORITMIANALYYSI 5.1 Johdanto 5.2 Tavoitteet 5.3 Algoritmien luokittelu 5.4 Kertaluokkamerkinnät (Big Oh Notation) 5.5 Kertaluokkamerkinnöillä
LisätiedotLiitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot
Esim yhteinen attribuutti C Liitosesimerkki T() = 10,000 riviä T() = 5,000 riviä S() = S() = 1/10 lohkoa Puskuritilaa = 101 lohkoa 1 2 Vaihtoehdot Sisäkkäiset silmukat Liitosjärjestys:, Liitosalgoritmit:
LisätiedotTiraka, yhteenveto tenttiinlukua varten
Tiraka, yhteenveto tenttiinlukua varten TERMEJÄ Tietorakenne Tietorakenne on tapa tallettaa tietoa niin, että tietoa voidaan lisätä, poistaa, muokata ja hakea. Tietorakenteet siis säilövät tiedon niin,
LisätiedotTietorakenteet ja algoritmit. Kertaus. Ari Korhonen
Tietorakenteet ja algoritmit Kertaus Ari Korhonen 1.12.2015 Tietorakenteet ja algoritmit - syksy 2015 1 Presemosta: 12. Kertaus» Mitkä tekijät, miten ja miksi vaiku1avat algoritmien nopeuteen» Rekursiohistoriapuut
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
Lisätiedot4. Joukkojen käsittely
4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet
LisätiedotAlgoritmit 1. Luento 8 Ke Timo Männikkö
Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin
LisätiedotTehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003
Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja
Lisätiedot811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu
811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,
LisätiedotAlgoritmit 1. Luento 7 Ti Timo Männikkö
Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotAlgoritmit 1. Luento 4 Ke Timo Männikkö
Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu
LisätiedotLuku 8. Aluekyselyt. 8.1 Summataulukko
Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa
LisätiedotAlgoritmit 2. Luento 10 To Timo Männikkö
Algoritmit 2 Luento 10 To 11.4.2019 Timo Männikkö Luento 10 Merkkitiedon tiivistäminen LZW-menetelmä Taulukointi Editointietäisyys Peruutusmenetelmä Osajoukon summa Algoritmit 2 Kevät 2019 Luento 10 To
LisätiedotAlgoritmit 2. Luento 4 Ke Timo Männikkö
Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa
LisätiedotAlgoritmit 2. Luento 12 To Timo Männikkö
Algoritmit 2 Luento 12 To 3.5.2018 Timo Männikkö Luento 12 Geneettiset algoritmit Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Algoritmit 2 Kevät 2018 Luento 12 To 3.5.2018 2/35 Algoritmien
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku
LisätiedotTietorakenteet ja algoritmit syksy Laskuharjoitus 1
Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,
LisätiedotAlgoritmit 2. Luento 4 To Timo Männikkö
Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4
LisätiedotAlgoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö
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
LisätiedotTarkennamme geneeristä painamiskorotusalgoritmia
Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi
LisätiedotAlgoritmit 2. Luento 6 Ke Timo Männikkö
Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu
LisätiedotLuku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti
Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.
LisätiedotAlgoritmit 2. Luento 5 Ti Timo Männikkö
Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia
LisätiedotAlgoritmit 2. Luento 1 Ti Timo Männikkö
Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla
LisätiedotAlgoritmit 2. Luento 6 To Timo Männikkö
Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin
Lisätiedot2. 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.
Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen
LisätiedotAlgoritmit 2. Demot Timo Männikkö
Algoritmit 2 Demot 4 24.-25.4.2019 Timo Männikkö Tehtävä 1 (a) int laske(n) { if (n
Lisätiedot58131 Tietorakenteet ja algoritmit (syksy 2015)
58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen
LisätiedotAlgoritmit 1. Luento 6 Ke Timo Männikkö
Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty
LisätiedotAlgoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja
58053-7 Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja Malliratkaisut ja pisteytysohje: Jyrki Kivinen Tentin arvostelu: Jouni Siren (tehtävät 1 ja 2) ja Jyrki Kivinen (tehtävät
LisätiedotYhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.
2. MS-A000 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 2..205 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x x 2 =
Lisätiedot