1 / 19

Lajittelun sovelluksia

Lajittelun sovelluksia. Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi. Perusideat. Järjestetään tiedostoja, jotka koostuvat tietueista Jokaisessa tietueessa on avain, jonka perusteella lajitellaan

Download Presentation

Lajittelun sovelluksia

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 <a1, a2,…,an> • Tulos: permutaatio <a1’, a2’,…,an’> siten, että a1’  a2’…  an’ 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); Lajittele: Uudelleenjärjestä tietueet siten että avaimet ovat järjestyksessä tiedosto tietue avain

  5. Lajittelu osoittimien avulla

  6. Stabiilius • Stabiili lajittelualgoritmi säilyttää saman avaimen omaavien tietueiden suhteellisen järjestyksen @#%&@# 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: • Alustus: Invariantti on voimassa ennen silmukan alkua • Ylläpito: Mikäli invariantti on voimassa ennen silmukka iteraatiota se pysyy voimassa ennen seuraavaa iteraatiota • Lopetus: Invariantista seuraa loppuehto kun silmukka pysähtyy

  9. Esimerkki valintalajittelusta  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 8 2 4 9 3 6

  10. 8 2 4 9 3 6 2 8 4 9 3 6 2 3 4 9 8 6 2 3 4 6 8 9 2 3 4 6 8 9 Esimerkki valintalajittelusta

  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  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ä 8 2 4 9 3 6

  15. 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 9 2 3 4 8 6 Esimerkki lisäyslajittelusta

  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 vertailuan-1 i n-1 i=1 j=11= i=1i=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; } }

More Related