1 / 26

TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang. TDT4110 Informasjonsteknologi grunnkurs:. Læringsmål og pensum. Læringsmål: Lære om tabellstrukturer Lære algoritmer for søk og sortering av data Pensum: Læreboka 12.1-12.3.

tareq
Télécharger la présentation

TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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. TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang TDT4110 Informasjonsteknologi grunnkurs:

  2. Læringsmål og pensum • Læringsmål: • Lære om tabellstrukturer • Lære algoritmer for søk og sortering av data • Pensum: • Læreboka 12.1-12.3

  3. Algoritmer Algoritme = oppskrift / fremgangsmåte for å løse en oppgave • Definisjon av algoritmer i boka (11.1.2 s.431 tidligere utgaver): • ”En sekvens av utvetydige, utførbare skritt som leder til en løsning av et gitt problem.” • Vi har allerede sett på mange algoritmer • Algoritme for å summere en tabell • Algoritme for å finne gjennomsnitt i en tabell • Med flere • I dag skal vi se på algoritmer for søking og sortering

  4. Først litt om tabeller • Kan som kjent lagre flere verdier (tekst, tall, sannhetsverdier) i en tabell • Tabellen har en maxstørrelse og index som angir plassnummer i tabellen Max-størrelsen er 3 (4 elementer) Tallet 45 ligger på index 1 0 1 2 3

  5. A0 A0+3 A0+6 Elem0 Elem1 Elem2 Tabeller lagret i minne • Elementene i en tabell lagres etter hverandre i primærminnet • Hvis hvert element tar 3 minneplasser og tabellen har 4 celler blir adressen til:Element 0: A0Element 1: A0+3Element 2: A0+6osv…når A0 er der første celle i tabellen ligger

  6. Tabeller i minne (generelt) • Plasseringen i minnet for en tilfeldig indexplass (i) når hver har en fast størrelse (S) og første celle ligger på plass A0 blir: • Adresse til element i = A0 + i * S • Dette betyr: Når vi har data i en tabell kan vi aksessere hvilket som helst element direkte • Siden vi kan beregne adressen internt i minne • Tar like lang/kort tid uansett

  7. Enkel algoritme for søking (usortert liste) • Anta at følgende lag ligger etter hverandre i en tabellen lag[14]: • Vålerenga • Start • Tromsø • Lillestrøm • Viking • Brann • Odd Grenland • Rosenborg • ... • Når vi søker etter noe kan vi få to utfall: • Suksess: ”XXX ligger på plass nummer Y” • Fiasko: ”XXX befinner seg ikke i elitedivisjon” Oppgave1: Tenk ut en algoritme for å søke etter et angitt lag i listen og finne posisjonen til laget i tabellen. oppgave1.html oppgave1.jsp

  8. Enkel algoritme for søking (sortert liste) • Anta at følgende lagene ligger etter hverandre i en liste: • Aalesund • Brann • Haugesund • Hønefoss • Kongsvinger • Lillestrøm • Molde • Odd Grenland • ... • Algoritmen skal fortsatt gå steg for steg Oppgave2: Tenk ut en smartere algoritme for å søke etter et angitt lag i den sorterte listen

  9. Løsning på sortert liste • Algoritmen kan undersøke underveis om vi har passert det stedet der verdien kunne ha befunnet seg i datamengden: • Eks: Søker etter ”Bryne” i elitedivisjonstabellen. Kan avslutte søket etter har passert ”Brann”. • Kan bruke int streng1.compareTo(streng2) • Returnerer 0 hvis strenger er like • Returnerer negativt tall hvis streng1 har høyere leksikalsk verdi enn streng2 (og motsatt) oppgave2.html oppgave2.jsp

  10. Metoder for å håndtere store/små bokstaver i strenger • int compareToIgnoreCase(String str) • Compares two strings lexicographically, ignoring case differences. • String toLowerCase() • string.toLowerCase(); // Gjør om streng til små bokstaver • String toUpperCase() • string.toUpperCase(); // Gjør om streng til store bokstaver

  11. Avansert algoritme for søking (sortert liste) Tenk ut en ”smartere” algoritme som bruker mindre tid for å søke etter et angitt lag i listen. • Aalesund • Brann • Haugesund • Hønefoss • Kongsvinger • Lillestrøm • Molde • ... • Tips: hva gjør vi når vi slår opp i telefonkatalogen?

  12. Binærsøk (forutsetter sortert tabell) • Går midt i tabellen, sjekker verdi mot det vi søker etter • Sjekker videre i enten venstre eller høyre halvdel av tabellen • Går midt i halvdelen som er igjen å sjekke • Halverer videre til vi finner det vi leter etter, eller det ikke er flere elementer å sjekke

  13. Binært søk: illustrasjon Halverer liste hele tiden – enten over eller under:

  14. Likt antall elementer i en liste (eller en subliste) • F.eks en liste med 6 elementer • Vi må bestemme oss for om vi runder ned eller opp

  15. Oppgave • Gitt en tabell med 200 elementer. Hvor mange sammenligninger må vi gjøre ved søk etter noe som ikke ligger i tabellen? • Med sekvensiellt søk? • Usortert • Sortert • Med binært søk?

  16. Løsning til sekvensielt søk • Sortert: • 200 sammenligninger i verste fall. Men kan ofte være mindre enn 200. • Usortert: 200 Dersom vi søker etter Åberg vil søk i sortert liste være tilnærmet like treg som i en usortert

  17. Løsning til binært søk • Binært søk: i verste fall 8 sammenligninger før vi kan være sikre på at elementet ikke finnes i lista. • Vi får lister med størrelse: • 200 • 100 (100 eller 99 avh. av hva vi søker etter - i verste fall 100) • 50 (49 eller 50, i verste fall 50) • 25 (24 eller 25, i verste fall 25) • 12 (12 uansett) • 6 (5 eller 6, i verste fall 6) • 3 (2 eller 3, i verste fall 3) • 1 (1 uansett) • Merk at vi må sjekke den siste lista med 1 element før vi kan være sikre på at elementet ikke eksisterer i lista

  18. Antall sammenligninger ved binærsøk: Log2 • Rent generelt så kan man ta 2-logaritmen til lengden på lista og runde oppover. • 2-logaritmen til et tall n er det tallet vi må opphøye 2 i for å få tallet n. • Eller sagt på en annen måte: Hvor mange ganger må vi gange 2 med seg selv for å få (minst) n. • 27=128 og 28=256

  19. Kjøretidskompleksitet Kjøretiden proporsjonal med • (n = lengde på lista) • Sekvensielt søk: n • Binært søk: log2 n • log2 n = (ln n / ln 2) • For mange av dere: Mer om dette i TDT4120 Algoritmer og datastrukturer

  20. Oppgave (kunne vært gitt til eksamen) • Vil binærsøk alltid være raskere enn sekvensielt søk? Forklar hvorfor/hvorfor ikke. (3 %) • LF: Dersom det vi søker etter ligger tidlig i lista vil sekvensielt søk være raskere (færre sammenligninger må utføres). Generelt så vil binærsøk være raskere i de aller fleste tilfellene. Binærsøk er relativt sett raskere jo lengre lista er. (Gitt sortert liste)

  21. Algoritme for sortering av liste • Anta at følgende lag ligger etter hverandre i en tabellen lag[14]: • Rosenborg • Vålerenga • Tromsø • Haugesund • Aalesund • Odd Grenland • Start • ... • Utskrift til skjerm: • Utskrift av lag[] usortert • Utskrift av lag[] sortert Oppgave3: Tenk ut en algoritme for å sortere lista alfabetisk

  22. Sortering ved å bytte plass (bobblesortering) • Traverser tabellen. Om to naboelementer står feil: bytt plass • Traverser tabellen så mange ganger som det er elementer i tabellen • I verste fall skal verdi i index 0 flyttes til index N (N=tabellens lengde) • Denne algoritmer er TREG! oppgave3.jsp

  23. Sortering ved innsetting • Start på element 2, sørg for at de to første elementene er sortert ved å sette inn nr 2 riktig • Gå til element 3, sørg for at de tre første elementene er sortert ved å sette inn nr 3 riktig • Generelt: Gå til element N, sørg for at de N første elementene er sortert ved å sett inn nr N riktig • Når hele lista er gått gjennom er hele lista sortert!

  24. Første gang: Vålerenga Start Lyn Lillestrøm Viktig Brann Odd Grenland Rosenborg Tromsø Ham-Kam Molde Fredrikstad Aalesund Bodø/Glimt Bytt om: Start Vålerenga Lyn Lillestrøm Viktig Brann Odd Grenland Rosenborg Tromsø Ham-Kam Molde Fredrikstad Aalesund Bodø/Glimt Andre gang: Start Vålerenga Lyn Lillestrøm Viktig Brann Odd Grenland Rosenborg Tromsø Ham-Kam Molde Fredrikstad Aalesund Bodø/Glimt Bytt om: Start Lyn Vålerenga Lillestrøm Viktig Brann Odd Grenland Rosenborg Tromsø Ham-Kam Molde Fredrikstad Aalesund Bodø/Glimt Bytt om: Lyn Start Vålerenga Lillestrøm Viktig Brann Odd Grenland Rosenborg Tromsø Ham-Kam Molde Fredrikstad Aalesund Bodø/Glimt Sortering ved innsetting • Sortering ved å flytte internt • Starter på andre element og sjekker første • Fortsetter nedover lista og sjekker/bytter alle ovenfor oppgave4.jsp

  25. Talleksempel = sortert usortert utg.pkt 1. steg Stadig større del av tabellen blir sortert! 2. steg Ferdig

  26. Oppsummering • Les mer om disse algoritmene i boka kap 10/11 (kap 12 i tidligere utgaver av boka) • Det finnes • Sekvensielle og • Binære søkealgoritmer • De binære er stort sett alltid mer effektive, men krever at dataene er sorterte

More Related