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

Slides:



Advertisements
Liknende presentasjoner
Hvordan skrive en vitenskapelig artikkel?
Advertisements

Tabeller av objekter Klassen ArrayList
Litt mer om PRIMTALL.
22 tips for den faglitterære forfatteren
Statistikk og sannsynlighetsregning
VÅLERENGA.
Gjenfinningssystemer og verktøy II
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
En innføring i spillet: Dobbeltkrig – Grønn
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Kap. 3 - Likevekt Statisk likevekt Grafisk Analytisk.
Ulike sorteringsmetoder Kompleksitet av dem
Gjenfinningssystemer og verktøy II
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Eksempel AOA (Activity On Arc)
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Kompleksitetsanalyse
Transformasjoner Men hva hvis relasjonen er kurvelinjær?
Mer grunnleggende matte: Forberedelse til logistisk regresjon
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Algoritmiske metoder Innhold: Effektivitetsbetraktninger Programmeringsteknikker Datastrukturer Algoritmer tilknyttet datastrukturene Lærebok: Hafting/Ljosland:
Klargjøring fra forrige gang
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
INF150 Programmering mandag 11.9
Opplæring: Digital Diktering
Oppgaver 1)Vi anser hvert av de seks utfallene på en terning for å være like sannsynlig og at to ulike terningkast er uavhengige. a)Hva er sannsynligheten.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
Kapittel 1, oppgave b) å kaste loss å seile uvær (n) kuling (m)
Velkommen til Medisinsk bibliotek
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Mandag 8. November Powerpoint..
INF 295 Algoritmer og datastrukturer Forelesning 21 Merge, Quick og Bøtte, Radix og ekstern sortering Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Figur 1 Behov. Figur 2 Behov Figur 3 Prioritering/ressursinnsats.
Hovedfagspresentasjon
Hvordan kan foreldre bruke de vangligste funksjonene i Itslearning.com
INF 4130 Eksamen 2008 Gjennomgang.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Magnus Haug Algoritmer og Datastrukturer
SINTEF-undersøkelsen om salting og trafikksikkerhet
Mandag Excel.
Kapping av plater Mål: Vi skal lage komponenter for en møbelfabrikk ut fra standardiserte plater på 12 x 24 dm. Komponentene har lengde og bredde oppgitt.
De 222 mest brukte ordene i det norske språket..
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Ortering Mål: Se på forskjellige måter for sortering.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
Befolkning og arbejdsmarked 7. Mikroøkonomi Teori og beskrivelse © Limedesign
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
INF1000 (Uke 12) Sortering og eksamensoppgaver Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen.
Finne feil - Debugging Introduksjon til sortering.
NTF U Fakta Gjennomføring –Søndag 07 – Lørdag 13 juli Kvalifisering –Mars (må koordineres blant klubbene) –Format Cup - Semifinaler og FINALE.
2013 – 20/21 juli til 26/27 juli NTF U16.
TDT4105 Informasjonsteknologi, grunnkurs
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
Eric Jul PSE, Inst. for informatikk
Utskrift av presentasjonen:

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:

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 12.1-12.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

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

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

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

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

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

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

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

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?

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

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

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

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

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

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

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

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.

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)

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

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

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

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

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

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