Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang

Liknende presentasjoner


Presentasjon om: "Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang"— Utskrift av presentasjonen:

1 Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang
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: Pensum: Lære om tabellstrukturer
Lære algoritmer for søk og sortering av data Pensum: Læreboka

3 Algoritmer Algoritme = oppskrift / fremgangsmåte for å løse en oppgave Definisjon av algoritmer i boka ( 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 1 2 3 34 45 67 78

5 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: A0 Element 1: A0+3 Element 2: A0+6 osv… når A0 er der første celle i tabellen ligger Elem2 Elem1 Elem0 A0 A0+3 A0+6

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 Ta opp 11 stk og søk etter Marit Velg midten av 11 (6) Spør om navnet er lengre ut i alfabetet enn Marit Hvis 1 igjen, spør om det er Marit

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

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? FOIL! Sekv: 200 Binært: toer logaritmen til 200. Hva må vi opphøye 2 i for å få 200? Hvor mange ganger må vi dele på 2 for å få <1

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 FOIL! Korte lister: liten betydning. Lengre lister: stor betydning. Hvor god er algoritmen? Hvor effektiv er den? Sentralt i faget MNFIT115Algoritmer 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! Oppgave 3 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! Oppgave 4

24 Sortering ved innsetting
Sortering ved å flytte internt Starter på andre element og sjekker første Fortsetter nedover lista og sjekker/bytter alle ovenfor 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 oppgave4.jsp

25 Talleksempel = sortert 3 1 4 2 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


Laste ned ppt "Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang"

Liknende presentasjoner


Annonser fra Google