Presentation laddar. Vänta.

Presentation laddar. Vänta.

Datastrukturer och algoritmer Föreläsning 14. Datastrukturer och algoritmer VT08 Innehåll  Mer om sortering  Heapsort O(N*log(N))  Facksortering/Bucketsort.

Liknande presentationer


En presentation över ämnet: "Datastrukturer och algoritmer Föreläsning 14. Datastrukturer och algoritmer VT08 Innehåll  Mer om sortering  Heapsort O(N*log(N))  Facksortering/Bucketsort."— Presentationens avskrift:

1 Datastrukturer och algoritmer Föreläsning 14

2 Datastrukturer och algoritmer VT08 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  Kapitel

3 Datastrukturer och algoritmer VT08 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).

4 Datastrukturer och algoritmer VT08 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.

5 Datastrukturer och algoritmer VT08 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”.

6 Datastrukturer och algoritmer VT08 Facksortering (Bucket sort)  Objekten måste gå att avbilda på heltalen inom ett intervall [V min …V max ]  O(N+M) där N är antalet element i listan och M är Vmax-Vmi n  Kan göras stabil  Notera! På Wikipedia kallas denna algoritm ”Pigeonhole sort”

7 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 (9,w) (1,a) (1,e) (1,m) (3,i) (3,k)(2,h) (2,o) (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.

8 Datastrukturer och algoritmer VT08 Varianter  Låt varje fack vara ett intervall av tal och sortera sen facken för sig.  Denna variant kallas av Wikipedia för Bucket Sort,  Sorteringen i varje fack kan vara en ny bucket sort eller en annan sorteringsalgoritm

9 Datastrukturer och algoritmer VT08 Radix Sort  Radix ≈ bas  Tittar på strukturen hos nycklarna  Antag att talen är representerade i basen M:  M =2 binära talsystemet 9 =  M =10 decimala talsystemet  Sorterar genom att jämföra siffror/bitar i samma position 1001

10 Datastrukturer och algoritmer VT08 Straight (LSD) 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ö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 )  LSD = Least Significant Digit

11 Datastrukturer och algoritmer VT08 Straight (LSD) Radix Sort

12 Datastrukturer och algoritmer VT08 Straight (LSD) Radix Sort  Varje bit sorteras på ett stabilt sätt.  Då förändras inte den relativa ordningen mellan två nycklar med samma värde.  Dvs algoritmen är stabil.  Kräver extra minne O(n)

13 Datastrukturer och algoritmer VT08 Straight (LSD) Radix Sort – med basen

14 Datastrukturer och algoritmer VT08 Radix Exchange sort (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  MSD = Most Significant Digit

15 Datastrukturer och algoritmer VT08 Radix Exchange sort (MSD Radix Sort) Toppen Botten

16 Datastrukturer och algoritmer VT08 Radix Exchange sort (MSD Radix 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

17 Radix Exchange sort (MSD Radix Sort)

18

19

20

21

22

23

24

25 Sammanfattande tabell baserad på tabellen på sidan Namn Bäst MedelSämstMinneStabilTyp Insertion sortO(n)O(n + d)O(n 2 )O(1) X Insättning Selection sortO(n 2 ) O(1)Urval Bubble sortO(n)—O(n 2 )O(1) X Utbyte Merge sortO(n log n) O(n) X Samsortering In-place merge sortO(n log n) O(1) X Samsortering QuicksortO(n log n) O(n 2 )O(log n)Utbyte HeapsortO(n log n) O(1)Urval Bucket sort (Pigeon hole sort) O(n+m) O(k) X Nyckel LSD Radix sortO(n·k/s) O(n) X Nyckel MSD Radix sortO(n·k/s) O(n·(k/s)·2 s )O((k/s)·2 s )Nyckel

26 Datastrukturer och algoritmer VT08 Strängsökning…  Att hitta en delsträng i en sträng  Ett antal algoritmer  Naiv  Knuth Morris Pratt  Booyer Moore  Rabin-Karp

27 Datastrukturer och algoritmer VT08 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

28 Datastrukturer och algoritmer VT08 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

29 Datastrukturer och algoritmer VT08 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

30 Datastrukturer och algoritmer VT08 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)

31 Datastrukturer och algoritmer VT08 Vad kan vi göra bättre?  Utnyttja kunskap om sökmönstret för att:  Undvika att behöva börja om från början i mönstret  Hoppa längre steg

32 Datastrukturer och algoritmer VT08 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.

33 Datastrukturer och algoritmer VT08 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) Längsta prefixet av ABA som också är suffix av BA är A dvs längd 1

34 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

35 Datastrukturer och algoritmer VT08 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

36 Datastrukturer och algoritmer VT KMP exempel abacaabaccabacabaaaaaa abacababacababacababacababacab j P[j]P[j] abacab f(j)f(j) j i Totalt 19 tecken jämförelser i = 5, j = 5 j = f(j-1) = f(4) = 1 i = 5, j = 1 j = f(j-1) = f(0) = i = 9, j = 4 j = f(j-1) = f(3) = 0 i = 9, j = 0 i = 10 i = 15, j = 5, returnera i-m+1 = = 10

37 Datastrukturer och algoritmer VT08 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)

38 Datastrukturer och algoritmer VT08 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.

39 Datastrukturer och algoritmer VT08 Boyer-Moore 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. i := m - 1 j := m - 1 repeat if P[j] = T[i] then if j = 0 then return i /* A match */ else i := i - 1 j := j - 1 else i := i + m - j - 1 i := i + max{j - last(T[i]), match(i)} j := m -1 until i > n -1 return indication of no substring found

40 Datastrukturer och algoritmer VT08 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  Match(j) – en förskjutningstabell som utifrån tre fall 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

41 Datastrukturer och algoritmer VT08 Boyer-Moore exempel j P[j]abacab match(j) abacaabaccabacabaaaaaa abacababacababacababacababacab Totalt 15 tecken jämförelser chabc? last(ch)453

42 Datastrukturer och algoritmer VT08 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.

43 Datastrukturer och algoritmer VT08 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

44 Datastrukturer och algoritmer VT08 Rabin-Karp hashfunktionen  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

45 Datastrukturer och algoritmer VT08 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

46 Datastrukturer och algoritmer VT08 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

47 Datastrukturer och algoritmer VT08 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


Ladda ner ppt "Datastrukturer och algoritmer Föreläsning 14. Datastrukturer och algoritmer VT08 Innehåll  Mer om sortering  Heapsort O(N*log(N))  Facksortering/Bucketsort."

Liknande presentationer


Google-annonser