© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.

Slides:



Advertisements
Liknande presentationer
Atomer, molekyler och kemiska reaktioner
Advertisements

PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Talföljder formler och summor
Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
F3 Matematikrep Summatecknet Potensräkning Logaritmer Kombinatorik.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Ruttplanering Vad är det??.
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
2D1311 Programmeringsteknik med PBL
Sökning och sortering Linda Mannila
Vill du lära dig kort division?
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
DoA VT -07 © Anders Broberg, Lena Kallin Westin, P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A.
Grundläggande programmering
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
FL2 732G70 Statistik A Detta är en generell mall för att göra PowerPoint presentationer enligt LiUs grafiska profil. Du skriver in din rubrik,
732G22 Grunder i statistisk metodik
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 6 Asymtotisk analys.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Programmering B PHP Lektion 2
Från binära till hexadecimala
Byggnadsmekanik gk 2.1 SNITTKRAFTER
Vektorer (klassen Vector) Sortering
Räkna ut flyttal i datorn för dummies
Listor En lista är en föränderlig ordnad samling objekt.
Grundläggande programmering
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bredden-först exempel ABCD EFGH IJKL MNOP = Obesökt.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd.
Datastrukturer och algoritmer
Föreläsning 10 Stränghantering.
Logikprogrammering 21/10 Binära träd
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Föreläsning 4 Listor, tupler, och for-loopar. Listor En lista är en föränderlig ordnad samling objekt. Listor skapas med hakparenteser. lista = [12,13,14,15]
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 12.
TILLÄMPAD DATALOGI (TILDA) Övning 4
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Digitalteknik 7.5 hp distans: Talsystem och koder 1.3.1
Föreläsning2 Operativsystem.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Datastrukturer och algoritmer
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
DA7351 Programmering 1 Fält och objekt Tvådimensionella fält Sortera fält Föreläsning 13.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
Aritmetik - tal. Delbarhet Ett tal är delbart med ett annat om kvoten blir ett heltal Alla jämna tal är delbara med 2 Alla tal var siffersumman är delbart.
D A C B Vems påstående stämmer? Här finns fem geometriska figurer.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 3 Programmeringsteknik
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Y Tiopotenser När man skriver stora tal är det ofta mycket praktiskt att använda potenser med basen 10. Sådana potenser kallas för.
Presentationens avskrift:

© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehåll  Mer om sortering  Heapsort O(N*log(N))  Facksortering/Bucketsort O(N+M)  Radixsort O(b*N)  Sökning i strängar/mönstermatching  Naiv sökning (Brute force)  Knuth Morris Pratt  Booyer Moore’s  Rabin Karp

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Heapsort  Man gör n insättningar i en heap och sen n avläsningar genom att plocka bort roten.  Varje insättning/avläsning kostar O(log k) där k är antalet element i heapen.  k < n så vi kan säga O(log n).  Alltså får vi totalt O(n*log n).

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Insättning i en Heap – O(log n)  Placera den nya noden på första lediga plats.  Låt sedan noden vandra uppåt i heapen tills det hamnat rätt i sorteringsordningen eller blivit rot.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Borttagning ur en heap – O(log n)  Ersätt noden som ska tas bort med den ”sista” noden i heapen.  Låt denna vandra ned tills den hamnat ”rätt” eller nått ”botten”.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Sortera snabbare än O(n log(n)) Facksortering (Bucket sort)  Objekten måste gå att avbilda på heltalen.  Vilket är största värdet & minsta värdet?  [V min …V max ]  O(N+M) där N är antalet element och M är V max -V min  Kan göras stabil

Facksortering M (3,k) (1,a) (9,j) (1,e) (3,i) (1,m) (2,h) (8,s) (2,o) (9,w) (7,q) (2,y) (4,p) (3,k) (1,a) (2,h) (9,j) (3,i) (2,o) (8,s) (1,e) (7,q) (4,p) (2,y) (9,w) (1,m) N (1,a) (1,e) (2,h) (3,i) (2,o) (9,w) (1,m) (3,k) (2,y) (9,j) (4,p) (8,s) (7,q) Stabil om man tar sifforna ur startlistan uppifrån och ned och bygger resultatet från vänster till höger.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Varianter  Låt varje fack vara ett intervall av tal och sortera sen facken för sig.  Sorteringen i varje fack kan vara en ny bucket sort vara en annan sorteringsalgoritm   Notera att wikipedia kallar facksortering för ”Pigeonhole sort” och varianten med intervall för ”Bucket sort”.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Radix Sort  Radix ≈ bas  Tittar på strukturen hos nycklarna  Antag att talen är representerade i basen M, tex.  M=2 binära talsystemet 9 =  M=10 decimala talsystemet  Sorterar genom att jämföra siffror/bitar i samma position 1001

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ”Straight” Radix Sort O(bN) Kallas också LSD Radix Sort for i  0 to b-1 do sortera fältet på ett stabilt sätt, med avseende på i:e biten  Jämför från höger till vänster…  Antag att vi kan sortera fältet stabilt på O(N) => O(bN)  Hur gör vi det?  Facksortering O(N+b) b<<N ger O(N)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ”Straight” Radix Sort

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ”Straight” Radix Sort  Funkar den?  På grund av stabilitet, så förändras inte den relativa ordningen mellan två nycklar med samma värde  Kräver extra minne O(n)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ”Straight” Radix Sort, med basen

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Radix Exchange sort Kallas också MSD Radix Sort  Titta på bitarna från vänster till höger 1. Sortera fältet på den vänstraste biten 2. Dela fältet i två delar toppen & botten 3. Rekursion  Sortera toppen rekursivt, ignorera vänstraste biten  Sortera botten rekursivt, ignorera vänstraste biten  O(bN) där b är antalet bitar och N antalet tal

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Radix Exchange Sort Toppen Botten

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Radix Exchange Sort  Bygger på samma idé som inplace quicksort, för att dela upp i två delar (toppen och botten) repeat scan top-down to find a key starting with 1; scan bottom-up to find a key starting with 0; exchange keys; until scan indices cross

Radix Exchange Sort

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Strängsökning…  Att hitta en delsträng i en sträng  Ett antal algoritmer  Naiv  Knuth Morris Pratt  Booyer Moore  Rabin-Karp

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Naiv Strängsökning  Brute force  Jämför ett tecken i taget tills två olika eller hittad delsträng  Vid två olika flytta fram ett tecken i huvudsträngen och börja om från början i mönstret  Kan hitta första delsträngen eller alla

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Exempel Jag vet inte vart min cykel finns vet Jag vet inte vart min cykel finns vet Jag vet inte vart min cykel finns vet Jag vet inte vart min cykel finns vet Jag vet inte vart min cykel finns vet

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Tidskomplexitet – Bästa fallet  Om mönstret finns AAAAAAAAAAAAAAAA AAAAA  O(M) där M är längden på mönstret  Om mönstret inte finns AAAAAAAAAAAAAAAA OAAAA  O(N) där N är längden på strängen

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Tidskomplexitet – Värsta fallet  Om mönstret finns AAAAAAAAAAAAAAAB AAAAB AAAAAAAAAAAAAAAB AAAAB  O(M*N) där M är längden på mönstret och N längden på strängen  Om mönstret inte finns  O(M*N)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Vad kan vi göra bättre?  Utnyttja kunskap om sökmönstret för att:  Unvika att behöva börja om från början  Hoppa längre steg

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Knuth-Morris-Pratt  Utnyttjar en felfunktion f som  berättar hur mycket av mycket av den senaste jämförelsen man kan återanvända om man felar  är definierad som det längsta prefixet i P[0,...,j] som också är suffix av P[1,...,j] där P är vårt mönster.  visar hur mycket av början av strängen matchar upp till omedelbart före felet  Man ser alltså ifall det finns upprepningar i det mönster man söker och utnyttjar det.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Felfunktion exempel  Om jämförelsen felar på position 4, så vet vi att a,b i position 2,3 är identiska med position 0,1  Kom i håg:  f(j) är definierad som det längsta prefixet i P[0,...,j] som också är suffix av P[1,...,j] j P[j]ABABAC f(j)001230

KMP-algoritmen  Input: String T (text) with n characters and P (pattern) with m characters.  Output: Starting index of the first substring of T matching P, or an indication that P is not a substring of T. f := KMPfailureFunction(P) //Konstruera felfunktionen i := 0 j := 0 while i < n do if P[j] = T[i] then if j = m-1 then return i-m+1 // En matchning i := i+1 j := j+1 else if j > 0 then // ingen match, vi har gått j index direkt efter // matchande prefix i P j := f(j-1) else i := i+1 return ingen matchning av delsträngen P i S

DoA VT -07 © Anders Broberg, Lena Kallin Westin, KMPfailureFunction(P) i := 1 j := 0 while i <= m-1 do if P[j] = P[i] then // We have matched j+1 characters f(i) := j+1 i := i+1 j := j+1 else if j > 0 then //j index efter pref som match. j := f(j-1) else //ingen matchning f(i) := 0 i := i+1

DoA VT -07 © Anders Broberg, Lena Kallin Westin, KMP exempel abacaabaccabacabaaaaaa abacababacababacababacababacab j P[j]abacab f(j) j i Totalt 20 tecken jämförelser

DoA VT -07 © Anders Broberg, Lena Kallin Westin, KMP-Algoritmen  Låt k = i - j  För varje varv i while-loopen händer ett av följande:  T[i] = P[j], öka i och j med 1, k oförändrad.  T[i] P[j] och j > 0, i är oförändrad men k ökar med minst 1 eftersom den ändras från i - j to i - f(j-1)  T[i] P[j] och j = 0, öka i med 1 och minska k med 1 (ty j oförändrad).  Alltså för varje varv i loopen ökar antingen i eller k med minst 1. Max antal varv blir 2n  Detta antar att f redan är beräknad (som är O(m)).  Total komplexitet: O(n + m)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Boyer-Moores algoritm  Liknar KMP  Idéer:  Gör matchningen baklänges, med start i mönstrets sista element.  Om man stöter på ett tecken i strängen som inte finns i mönstret så flytta hela mönstret förbi detta tecken.  Flytta fram mönstret så långt som möjligt varje gång. oOm det finns upprepningar av element i mönstret så får man bara flytta fram till den högraste förekomsten. oFörskjutningstabell talar om hur långt man får flytta.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Två hjälpmedel i algoritmen  Last(ch) – ger sista förekomsten av ch i mönstret P om ch finns i P och -1 annars  En förskjutningstabell som utifrån de tre fallen beräknar hur långt fram du kan flytta mönstret som mest.  Algoritmens styrka är att den kan hoppa över stora delar text  Fungerar mindre bra om oTexten består av få bokstäver (tex enbart 0, 1) oMönstret är väldigt kort

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Boyer-Moore exempel j P[j]abacab match(j) abacaabaccabacabaaaaaa abacababacababacababacababacab Totalt 15 tecken jämförelser chabc? last(ch)453

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Rabin-Karp  Beräkna ett hashvärde för mönstret och för varje delsträng av texten som man ska jämföra med  Om hashvärdena är skilda, beräkna hashvärdet för det nästa M tecknen i texten  Om hashvärdena är lika, utför en brute-force jämförelse mellan P och delsträngen  Med andra ord:  Endast en jämförelse per deltext  Brute-force endast när hash-värderna matchar.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Rabin-Karp exempel Hashvärdet för AAAAA = 37 Hashvärdet för AAAAH = 100 AAAAAAAAAAAAAAHA AAAAH 100 <> 37 AAAAAAAAAAAAAAHA AAAAH 100 <> 37 AAAAAAAAAAAAAAHA AAAAH 100 = 100

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Rabin-Karp hashfunktionen  Vilken? Den får inte kosta för mycket....  Betrakta M som ett M-siffrigt tal i basen b, där b är antalet bokstäver i alfabetet  Textsekvensen t[i..i+M-1] avbildas på talet x(i) = t[i]b M-1 + t[i+1]b M t[i+M-1]  Billigt att beräkna x(i+1) från x(i) x(i+1) = t[i+1]b M-1 + t[i+2]b M t[i+M]  x(i+1) = x(i)b skifta ett vänster, - t[i]b M ta bort den vänstraste termen + t[i+M] lägg till den nya högertermen  Behöver inte räkna om hela talet utan gör bara en justering för det nya tecknet

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Hash-värdet fortsättning  Om M är stort blir blir (b*M) enormt därför så hashar man med mod ett stort primtal  h(i) = ((t[i]b M-1 mod q) + (t[i+1]b M-2 mod q)+...+ (t[i+M-1] mod q)) mod q  h(i+1) = (h(i)b mod q - (t[i]b M mod q) + (t[i+M] mod q) mod q

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Algoritm hash_M <- Beräkna hashvärdet för M hash_S <- Beräkna hashvärdet för den första delsträngen do if (hash_M = hash_S) then Bruteforce jämförelse av M och S hash_S + 1 tecken beräknas while end of text or match

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Komplexitet  Om det är tillräckligt stort primtal q för hashfunktionen så kommer hashvärdet från två mönster vara distinkta  I detta fall så tar sökningen O(N) där N är antalet tecken i strängen  Men det finns alltid fall som ger i närheten av värsta fallet O(N*M) om primtalet är för litet