Sökning. Viktiga algoritmer sökning och sortering. Sökning i en oordnad tabell:

Relevanta dokument
Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

SI-möte #10, Programkonstruktion och Datastrukturer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 11 Datastrukturer (DAT037)

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Föreläsning 2 Datastrukturer (DAT037)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

Några saker till och lite om snabbare sortering

Programmering för språkteknologer II, HT2014. Rum

Magnus Nielsen, IDA, Linköpings universitet

SORTERING OCH SÖKNING

Föreläsning Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036)

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Några saker till och lite om snabbare sortering

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Sökning och sortering

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Föreläsning 11 Innehåll

Programkonstruktion och Datastrukturer

Programmering II (ID1019) :00-11:00

Algoritmer. Två gränssnitt

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 5 Innehåll

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Tentamen Datastrukturer (DAT036)

Föreläsning 12 Innehåll

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Problemlösning och algoritmer

Sortering. Intern/ extern? Antaganden. Vad kan vi kräva? Rank sort. Rank sort. På en nod/ distribuerad? Jämförelsebaserad/ icke jämförelsebaserad?

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Föreläsning 9. Sortering

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Föreläsning 4 Datastrukturer (DAT037)

Programmering II (ID1019) :00-17:00

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 4 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Några svar till TDDC70/91 Datastrukturer och algoritmer

Föreläsning 12 Innehåll

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Föreläsning 9 Exempel

Algoritmer, datastrukturer och komplexitet

Rekursiva algoritmer sortering sökning mönstermatchning

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.

1 Standardalgoritmer. 1.1 Swap. 1.2 Sök minsta värdet i en array

Tentamen Datastrukturer (DAT037)

Tentamen kl Uppgift 4. Uppgift 5

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer för D2 DAT 035

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

Fredag 10 juni 2016 kl 8 12

Objektorienterad Programmering DAT043. Föreläsning 10 13/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tillämpad Programmering (ID1218) :00-13:00

Föreläsning 13. Rekursion

Tommy Färnqvist, IDA, Linköpings universitet

Lösningar Datastrukturer TDA

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris!

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Teoretisk del. Facit Tentamen TDDC (6)

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

TDDC74 Lab 02 Listor, sammansatta strukturer

Tentamen: Programutveckling ht 2015

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Översikt. Effektiva algoritmer. En telefonlista. Algoritm

Seminarium 13 Innehåll

ID1020: Quicksort. Dr. Jim Dowling kap 2.3. Slides adapted from Algoritms 4 th Edition, Sedgewick.

Tentamen Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Datastrukturer och algoritmer

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Programmering II (ID1019) :00-11:00

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Transkript:

Viktiga algoritmer sökng och sorterg När man sparar data (formation) gör man det alltid utifrån något behov av att senare använda det man har sparat. Det kan ju vara av juridiska krav på dokumentation (arkiverg), men det mesta är för att återanvända i den egna verksamheten. Således blir det viktigt att hitta i sa sparade data. I små mängder data är det sällan ett problem men i stora mängder data som man ofta letar i är det viktigt hur man organiserar datalagrgen. Sökng För enkelhetens skull kommer jag använda arrayer, som är speciellt lämpliga i sökngs- och sortergssammang, i undantagsfall använder jag listor. Jag använder mig ast av heltal både som nyckelvärden och som data. I verkligheten har man mer komplexa nyckelvärden, ofta textsträngar. Data kan vara sammansatta och i sig lagrade i poster, t.ex. formation om en person. person(pnr: 451112-0356 fornamn: Serafim efternamn: Dahl...) För riktigt stora datamängder använder man databaser. Här ska vi titta lite ytligt på sökng och sorterg som är det mest grundläggande för datahanterg. Föreläsng 5 Bild 1 av 20 Föreläsng 5 Bild 2 av 20 Sökng i en oordnad tabell: Det a sättet att söka i oordnade mängder data är att gå igenom datamängden och testa varje element i mängden. Det fns ga genvägar. Man kan formellt resonera sig fram till att man i genomsnitt går igenom halva mängden om sökt data oftast fns. Ju mer sällan man får träff desto mer närmar man sig att man igenomsnitt går igenom hela eller nästan hela mängden. I små datalager är det gen katastrof, men det kan löna sig att sortera om man söker ofta efter data utan att hitta det man söker. Då kan man hålla sig på N/2 i genomsnitt om N är storleken på datalagret oavsett om det man söker fns i datamängden eller te Ljär sökng i en oordnad tabell: proc {UnorderedSearch Key A?Found?Location} proc {LocalSearch I} if I =< {Array.high A} then if A.I == Key then Found:=true Location := I if I < {Array.high A} then {LocalSearch I+1} {LocalSearch {Array.high A}} Föreläsng 5 Bild 3 av 20 Föreläsng 5 Bild 4 av 20

Ljär sökng i en ordnad tabell: proc {OrderedSearch Key A?Found?Location} proc {LocalSearch I} if I =< {Array.high A} then if A.I == Key then Found:=true Location := I if A.I < Key andthen I < {Array.high A} then {LocalSearch I+1} {LocalSearch {Array.low A}} Bär sökng i en ordnad tabell: Om man har data sorterat och datamängden te är stor kan man söka med halverg av söktervallet, s.k. bärsökng. Informellt får man med resonemanget hur många gånger (X) måste vi halvera tervallet N för att få tag i ett element? N 2 X = 1 och alltså X = log 2 N Det betyder att vi kan leta snabbare om vi håller nere datamängden så den är enkelt hanterbar. Om dex över data blir för stort gör vi dex över dex... Alltså kan det löna sig att hålla data sorterade eller att sortera osorterade data. Föreläsng 5 Bild 5 av 20 Föreläsng 5 Bild 6 av 20 Bär sökng i en ordnad tabell: proc {BarySearch Key A Lo Hi?Found?Location} if Lo < Hi then Mid = (Lo + Hi + 1) div 2 if Key < A.Mid then {BarySearch Key A Lo Mid-1 Found Location} {BarySearch Key A Mid Hi Found Location} Location := Lo Found := A.Lo == Key Sorterg All sorterg går ut på att flytta dataposter eller nyckelvärden tills man erhållit en viss ordng. Det är bra att ha tillgång till en procedur som byter plats på två dataposter: proc {Swap?Arr A B} C C=Arr.A Arr.A := Arr.B Arr.B := C Swap: Föreläsng 5 Bild 7 av 20 Föreläsng 5 Bild 8 av 20

Urvalssorterg 1. Sök reda på msta elementet 2. Byt första och msta elementen med varandra 3. Om det fns fler element: Sortera resten med samma metod. 23 17 5 13 9 22 2 15 2 17 5 13 9 22 23 15 2 5 17 13 9 22 23 15 Urvalssorterg... proc {SelectionSort A} MPos MPos = {NewCell 0} for M {Array.low A}..{Array.high A}-1 do MPos := M for N M+1..{Array.high A} do if A.N < A.@MPos then MPos := N {Swap A M @MPos} {ShowArray A} Föreläsng 5 Bild 9 av 20 Föreläsng 5 Bild 10 av 20 Urvalssorterg... Utskriften från SelectionSort (omformaterad som en lista): [23 17 5 13 9 22 2 15] [2 17 5 13 9 22 23 15] [2 5 17 13 9 22 23 15] [2 5 9 13 17 22 23 15] [2 5 9 13 17 22 23 15] [2 5 9 13 15 22 23 17] [2 5 9 13 15 17 23 22] Funktionell implementation av urvalssorterg för en lista fun {FunSelectionSort L} fun {Sort L Res} if L == nil then Res E = {FdM L} {Sort {Delete E L} {App Res [E]}} {Sort L nil} Föreläsng 5 Bild 11 av 20 Föreläsng 5 Bild 12 av 20

Vi behöver FdM: Funktionell implementation... och Delete: Funktionell implementation... fun {FdM L} [] [E] then E [] A B T then if A < B then {FdM A T} {FdM B T} fun {Delete El L} [] H T then if H == El then T H {Delete El T} Föreläsng 5 Bild 13 av 20 Föreläsng 5 Bild 14 av 20 Utbytessorterg 1. Gå igenom arrayen (listan), jämför grannar, byt om de står fel 2. Sista elementet står rätt, räkna bort! 3. Om det fns fler element: Sortera med samma metod. 23 17 5 13 9 22 2 15 17 5 13 9 22 2 15 23 5 13 9 17 2 15 22 23 5 9 13 2 15 17 22 23 5 9 2 13 15 17 22 23 5 2 9 13 15 17 22 23 2 5 9 13 15 17 22 23 2 5 9 13 15 17 22 23 Utbytessorterg... proc {ExchangeSort A} for M {Array.high A}..{Array.low A}+1;~1 do for N {Array.low A}..M-1 do if A.N > A.(N+1) then {Swap A N N+1} {ShowArray A} Föreläsng 5 Bild 15 av 20 Föreläsng 5 Bild 16 av 20

Utbytessorterg... Utskriften från ExchangeSort (omformaterad som en lista): [23 17 5 13 9 22 2 15] [17 5 13 9 22 2 15 23] [5 13 9 17 2 15 22 23] [5 9 13 2 15 17 22 23] [5 9 2 13 15 17 22 23] [5 2 9 13 15 17 22 23] Nästan funktionell implementation av utbytessorterg... fun {FunExchangeSort L} Tmp = {NewCell L} fun {InnerSort L} [] [_] then L [] E1 E2 T then if E1 > E2 then E2 {FunExchangeSort E1 T} E1 {FunExchangeSort E2 T} for I 2..{Length L} do Tmp := {InnerSort @Tmp} @Tmp Föreläsng 5 Bild 17 av 20 Föreläsng 5 Bild 18 av 20 Mer om sorterg De visade metoderna är långsamma och mer en rad exempel på användng av procedurer i kontrast mot funktioner. Båda metoderna består av dubbelloop för jämför och flyttng av element. För varje element med dex 1 i n För varje element i j n <operationer på vektorn> n (n i+1) = n n n n i+ 1 = n 2 n n + 1 n2 +n = 2 2 +n 2 = O(n2 ) Mer om sorterg... Fns det bättre metoder? Ja, men de snabbare metoderna är te lika enkla att förstå. De går ut på delng och sammanslagng: Delng har vi sett går på logn och sammanslagngen N så snabbast blir i det ideala fallet N logn QuickSort: Dela strukturerat och slå ihop delarna MergeSort: Dela (ostrukturerat) slå samman strukturerat QuickSort är snabbast men kan ibland bära sig illa åt och blir i värsta fall lika långsam som de visade metoderna. MergeSort är alltid lika effektiv men kräver extra mne om man ska få max effektivitet. Föreläsng 5 Bild 19 av 20 Föreläsng 5 Bild 20 av 20