tdt4110 informasjonsteknologi grunnkurs: algoritmer for søk og sortering

26
1 TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang TDT4110 Informasjonsteknologi grunnkurs:

Upload: tareq

Post on 22-Jan-2016

36 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

1

TDT4110 Informasjonsteknologi grunnkurs:

Algoritmer for søk og sortering

Førsteamanuensis Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs:

Page 2: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 3: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

3

Algoritme = oppskrift / fremgangsmåte for å løse en oppgaveAlgoritmer

• 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

Page 4: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk 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

34 45 67 78

0 1 2 3

Tallet 45 ligger på index 1

Max-størrelsen er 3 (4 elementer)

Page 5: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Elem2Elem1Elem0

A0 A0+3 A0+6

Page 6: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 7: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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.htmloppgave1.jsp

Page 8: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

8

Oppgave2: Tenk ut en smartere algoritme for å søke etter et

angitt lag i den sorterte listen

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

Page 9: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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.htmloppgave2.jsp

Page 10: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 11: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

11

Tenk ut en ”smartere” algoritme som bruker mindre tid for å søke

etter et angitt lag i listen.

Avansert algoritme for søking (sortert liste)

– Aalesund

– Brann

– Haugesund

– Hønefoss

– Kongsvinger

– Lillestrøm

– Molde

– ...

• Tips: hva gjør vi når vi slår opp i telefonkatalogen?

Page 12: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 13: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

13

Binært søk: illustrasjon

Halverer liste hele tiden – enten over eller under:

Page 14: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 15: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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?

Page 16: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

16

Dersom vi søker etter Åberg vil søk i sortert

liste være tilnærmet like treg som i en usortert

Løsning til sekvensielt søk

• Sortert:– 200 sammenligninger i verste fall. Men kan ofte være mindre

enn 200.

• Usortert: 200

Page 17: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 18: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 19: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

19

Kjøretiden proporsjonal

med

Kjøretidskompleksitet

• (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

Page 20: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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)

Page 21: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 22: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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

Page 23: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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!

Page 24: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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:1. Vålerenga2. Start3. Lyn4. Lillestrøm5. Viktig6. Brann7. Odd Grenland8. Rosenborg9. Tromsø10. Ham-Kam11. Molde12. Fredrikstad13. Aalesund14. Bodø/Glimt

Andre gang:1. Start2. Vålerenga3. Lyn4. Lillestrøm5. Viktig6. Brann7. Odd Grenland8. Rosenborg9. Tromsø10. Ham-Kam11. Molde12. Fredrikstad13. Aalesund14. Bodø/Glimt

Bytt om:1. Start2. Lyn3. Vålerenga4. Lillestrøm5. Viktig6. Brann7. Odd Grenland8. Rosenborg9. Tromsø10. Ham-Kam11. Molde12. Fredrikstad13. Aalesund14. Bodø/Glimt

Bytt om:1. Lyn2. Start3. Vålerenga4. Lillestrøm5. Viktig6. Brann7. Odd Grenland8. Rosenborg9. Tromsø10. Ham-Kam11. Molde12. Fredrikstad13. Aalesund14. Bodø/Glimt

Bytt om:1. Start2. Vålerenga3. Lyn4. Lillestrøm5. Viktig6. Brann7. Odd Grenland8. Rosenborg9. Tromsø10. Ham-Kam11. Molde12. Fredrikstad13. Aalesund14. Bodø/Glimt

oppgave4.jsp

Page 25: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

25

Talleksempel

3 1 4 2

1 3 2 4

1 2 3 4

1 2 3 4Stadig større del av tabellen blir sortert!

usortert utg.pkt

1. steg

2. steg

Ferdig

= sortert

Page 26: TDT4110 Informasjonsteknologi grunnkurs: Algoritmer for søk og sortering

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