Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi.

Samankaltaiset esitykset


Esitys aiheesta: "Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi."— Esityksen transkriptio:

1 Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi

2 Perusideat Järjestetään tiedostoja, jotka koostuvat tietueista Jokaisessa tietueessa on avain, jonka perusteella lajitellaan Sisäisessä lajittelussa (internal sorting) lajittelu tapahtuu keskusmuistissa Ulkoisessa lajittelussa (external sorting) aineisto luetaan keskusmuistiin paloittain  (N lg N) – alaraja lajittelualgoritmeille jotka perustuvat avainten vertailuihin

3 Lajittelu Syöte: sekvenssi avaimia Tulos: permutaatio siten, että a 1 ’  a 2 ’  …  a n ’ Esimerkki: Syöte: 8 2 4 9 3 6 Tulos: 2 3 4 6 8 9

4 Peruskäsitteet esim. struct {char *snimi, char *enimi, unsigned huone); AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726 IkonenLeena6533 KämäräinenJoni6533 KyrkiVille6533 KyrkiVille6533 KämäräinenJoni6533 IkonenLeena6533 AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726 Lajittele: Uudelleenjärjestä tietueet siten että avaimet ovat järjestyksessä tietue avain tiedosto

5 Lajittelu osoittimien avulla KyrkiVille6533 KämäräinenJoni6533 IkonenLeena6533 AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726 KyrkiVille6533 KämäräinenJoni6533 IkonenLeena6533 AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726

6 Stabiilius Stabiili lajittelualgoritmi säilyttää saman avaimen omaavien tietueiden suhteellisen järjestyksen AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726 IkonenLeena6533 KämäräinenJoni6533 KyrkiVille6533 KyrkiVille6533 KämäräinenJoni6533 IkonenLeena6533 AlaoutinenSatu6711 BernAlexande6725 BochkoVladimir6726 @#%&@# tietueet joissa 3. avaimen arvo on 6533 eivät ole ensimmäisen avaimen mukaisessa järjestyksessä

7 Valintalajittelu (selection sort) Valintalajittelu perustuu siihen, että jäljellä olevasta järjestämättömästä sekvenssistä haetaan pienin ja siirretään se järjestettyjen joukkoon. Järjestettävä aineisto jakautuu siis kahteen osaan, järjestettyyn ja sen jälkeiseen järjestämättömään osaan.

8 Silmukka invariantti Auttaa ymmärtämään miksi algoritmi toimii oikein. Invariantista täytyy osoittaa kolme asiaa: 1. Alustus: Invariantti on voimassa ennen silmukan alkua 2. Ylläpito: Mikäli invariantti on voimassa ennen silmukka iteraatiota se pysyy voimassa ennen seuraavaa iteraatiota 3. Lopetus: Invariantista seuraa loppuehto kun silmukka pysähtyy

9 Esimerkki valintalajittelusta 824936  skannaa vasemmalta oikealla Invariantti:  :n vasemmalla olevat lopullisessa järjestyksessä  :n vasemmalla puolelta ei löydy isompaa alkiota kuin sen oikealta puolelta Vaikutus:  :n vasemmalla puolella oleviin alkioihin ei kosketa

10 Esimerkki valintalajittelusta 824936234986234689234689284963

11 Valintalajittelu (selection sort) Varjostetut merkit edustavat lajiteltujen joukkoa, varjostamattomia merkkejä vertaillaan kullakin iteraatiolla ja ympyröidyt merkit ovat kullakin iteraatiolla löydettyjä pienimpiä avaimia.

12 Valintalajittelu C-kielellä toteutettuna void valintalajittelu(alkio a[], int l, int r) { int i, j; for(i = l; i < r; i++){ int minimi = i; for(j = i + 1; j <= r; j++) if(PIENEMPI(a[j], a[minimi])) minimi = j; VAIHDA(a[i], a[minimi]); }

13 Lisäyslajittelu (insertion sort) Lisäyslajittelu vastaa korttipelaajan suorittamaa pelikorttien järjestelyä, jossa pelaaja ottaa käteensä yhden kortin kerrallaan ja sijoittaa kortin sille kuuluvaan paikkaan järjestetyssä kädessä. Järjestettävä aineisto jakautuu siis kahteen osaan, järjestettyyn ja sen jälkeiseen järjestämättömään osaan. Tehokas pienille alkiomäärille (N<50) Tehokas jos aineisto on ’melkein järjestyksessä’.

14 Esimerkki lisäyslajittelusta 824936  skannaa vasemmalta oikealla Invariantti:  :sta vasemmalla olevat alkiot ovat alkuperäiset  :n vasemman puoleiset alkiot lajitellussa järjestyksessä Vaikutus:  :n vasemman puoleiset alkiot lajitellussa järjestyksessä

15 Esimerkki lisäyslajittelusta 248936824936284936248369 23468 9

16 Lisäyslajittelu (insertion sort) Ympyröidyt merkit tarkoittavat lajiteltujen joukkoon lisättäviä alkioita.

17 Yksinkertaisin lisäyslajittelu C-kielellä toteutettuna void lisayslajittelu1(alkio a[], int n) { int i, j; for (i = 1; i < n; i++) for (j = i; j > 0 && a[j-1] > a[j]; j--) VAIHDA(a[j-1], a[j]); }

18 Lisäyslajittelun analyysi Parhaassa tapauksessa alkiot ovat jo järjestyksessä, jolloin vaihtoja ei suoriteta ja ainoastaan n-1 vertailua suoritetaan Huonoimmassa tapauksessa tiedoston tietueet ovat päinvastaisessa järjestyksessä haluttuun verrattuna (laskevassa järjestyksessä). Tässä tapauksessa suoritetaan n(n-1)/2 vaihtoa ja vertailua n-1 i n-1  i=1  j=1 1=  i=1 i=n(n-1)/2

19 Lisäyslajittelu C-kielellä toteutettuna void lisayslajittelu3(alkio a[], int n) { int i, j; alkio t; for (i = 1; i < n; i++) { t = a[i]; for (j = i; j > 0 && a[j-1] > t; j--) a[j] = a[j-1]; a[j] = t; }


Lataa ppt "Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi."

Samankaltaiset esitykset


Iklan oleh Google