Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avOve Lind
1
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14
2
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20032 Innehåll Prioritetskö Heap/Hög 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
3
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20033 Prioritetskö Modell: Patienterna på en akutmottagning, man kommer in i en viss tidsordning men behandlas utifrån en annan ordning. Organisation: En mängd vars grundmängd är linjärt ordnad av en prioritetsordning. Avläsningar och borttagningar görs endast på de element som har högst prioritet. Andra mängdoperationer är inte aktuella
4
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20034 Specifikation av prioritetskö Gränsytan Pqueue(val, R): Empty() Pqueue(val, R) Insert(v:val, p:Pqueue(val, R)) Pqueue(val, R) Isempty(p:Pqueue(val, R)) Bool Inspect-first (p:Pqueue(val, R)) val Delete-first (p:Pqueue(val, R)) Pqueue(val, R) R är relationen för prioritetsordningen. Ibland slås de två sista metoderna ihop. Ytan ovan förutsätter statisk prioritet. Vill man ha dynamisk prioritet måste en update- metod finnas.
5
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20035 Specifikation av prioritetskö Man kan också tänka sig att prioritetskön tar element (val) som består av ett värde och en prioritet. Förra fallet antog man att värde = prioritet Gränsytan kan varieras på flera sätt update har vi redan nämnt Vi kan också vilja finna det högsta/minsta prioritetsvärdet i kön
6
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20036 Stack och kö är specialfall av prioritetskön! Om R är den totala relationen, dvs gäller för alla par av värden blir prioritetskön en stack. Om R är den tomma relationen, dvs inte gäller för några par av värden, blir det en kö. Dessutom: Om R är en strikt partiell ordning, som ”>”, kommer lika element behandlas som en kö. Om R är icke-strikt, som ”≥” behandlas lika element som en stack. Se axiomen på s 294!
7
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20037 Konstruktioner av Prioritetskö Man utgår ofta från konstruktioner av Mängd eller Lexikon Lista, ej sorterad Insert O(1), Delete-first O(n) Lista, sorterad Insert O(n), Delete-first O(1)
8
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20038 Konstruktioner av Prioritetskö Heap/Hög – ett partiellt sorterat binärt träd Etiketterna är sorterade efter en relation R så att a är förälder till b endast om a är före b i ordningen som ges av R. Insättningar och borttagningar görs så att trädet hålls komplett.
9
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20039 Heap/Hög - Insert O(log n) Sätt in på ledig plats på bottennivån och bubbla upp till rätt ställe
10
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200310 Heap/Hög - Delete-first O(log n) Flytta upp sista elementet på bottennivån och låt det sjunka till rätt plats
11
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200311 Tillämpningar Operativsystem som fördelar jobb mellan olika processer Enkelt sätt att sortera något. Stoppa in allt i en prioritetskö och plocka ut det igen. Hjälpmedel vid traversering av graf Jmfr att stack och kö används vid traversering av träd.
12
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200312 Det går att sortera snabbare än O(nlog(n)) För att göra det måste vi veta mer om objekten vi vill sortera Gå att avbilda på heltalen Största värdet & minsta värdet o[V min …V max ] O(N+M) där N är antalet element och M är V max -V min
13
Facksortering 1 2 3 4 5 6 7 8 9 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)
14
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200314 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
15
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200315 ”Straight” Radix Sort O(bN) for i 0 to b-1 do sortera fältet på ett stabilt sätt, med avseende på i:e biten Jämföra 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….
16
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200316 ”Straight” Radix Sort 010 000 101 100 001 111 011 110 010 000 100 111 110 101 001 011 00 10 10 11 00 01 11 01 0 0 1 1 1 0 0 1 00 00 01 11 01 10 10 11 0 1 0 0 1 0 1 1
17
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200317 ”Straight” Radix Sort Funkar den? På grund av stabilitet, så förändras inte den relativa ordningen mellan två nycklar med samma värde
18
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200318 ”Straight” Radix Sort, med basen 10 032 224 016 123 015 031 169 252 031 032 252 016 123 224 015 169 01 01 12 25 22 03 03 16 5 6 3 2 4 1 2 9 01 01 03 22 03 12 16 25 5 6 1 4 2 3 9 2
19
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200319 Radix Exchange 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
20
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200320 Radix Exchange Sort 1 0 1 1 0 0 0 1 1 1 Toppen Botten
21
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200321 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
22
Radix Exchange Sort 010 000 101 100 111 001 011 110 010 000 011 100 001 111 101 110 001 000 011 111 010 100 101 110 000 001 010 110 011 100 101 111
23
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200323 Strängsökning… Att hitta en delsträng i en sträng Ett antal algoritmer Naiv Knuth Morris Pratt Booyer Moore Rabin-Karp
24
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200324 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
25
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200325 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
26
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200326 Tidskomplexitet Bästa fallet om mönstret finns AAAAAAAAAAAAAAAA AAAAA O(M) där M är längden på mönstret Bästa fallet om mönstret inte finns AAAAAAAAAAAAAAAA OAAAA O(N) där N är längden på strängen
27
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200327 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 Värsta fallet om mönstret inte finns?? O(M*N)
28
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200328 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
29
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200329 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 definierat 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
30
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200330 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 j012345 P[j]ABABAC f(j)001230
31
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200331 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) i <- 0 j <- 0 while i < n do if P[j] = S[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
32
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200332 KMPfailureFunction(P) i <- 1 j <- 0 while i < m-1 do if P[j] = P[i] then f(i)<- j+1 i <- i+1 j <- j+1 else if j > 0 ingen match then j <- f(j-1) //j index efter pref som match. prefix else //ingen matchning f(i) <- 0 i <- i+1
33
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200333 KMP exempel abacaabaccabacabaaaaaa abacababacababacababacababacab 0 1 2 3 4 5 j012345 P[j]abacab f(j)001012 j i
34
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200334 KMP-Algoritmen Låt k = i - j För varje varv i while-loopen händer ett av följande: S[i] = P[j], öka i och j med 1, k oförändrad. S[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) S[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)
35
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200335 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.
36
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200336 Rabin-Karp exempel Hashvärdet för AAAAA = 37 Hashvärdet för AAAAH = 100 AAAAAAAAAAAAAAAA AAAAH 100 <> 37 AAAAAAAAAAAAAAAA AAAAH 100 <> 37 AAAAAAAAAAAAAAHA AAAAH 100 = 100
37
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200337 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-2 +...+ t[i+M-1]
38
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200338 Rabin-Karp hashfunktionen 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-2 +...+ 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
39
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200339 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
40
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200340 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
41
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200341 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
42
Datastrukturer och algoritmer VT 2005 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200342 Boyer-Moores algoritm Liknar KMP Två idéer: Gör matchningen baklänges, med start i mönstrets sista element. Utnyttja kunskap om mönstrets uppbyggnad och informationen om värdet på den första felmatchande elementet i S för att 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.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.