21
Övning 5 www.nada.kth.se/~mhj/tilda

Övning 5 nada.kth.se/~mhj/tilda

  • Upload
    espen

  • View
    73

  • Download
    2

Embed Size (px)

DESCRIPTION

Övning 5 www.nada.kth.se/~mhj/tilda. Hashning Textsökning KMP-automat Hemtal Bilarna. Hashning. Iden med hashning. first. Björn. Agnetha. Benny. Anni-Frid. firstA. Agneta. Anni-Frid. firstB. Björn. Benny. table [ ]. Agneta. 0. hash betyder: hackmat, röra. Björn. 1. - PowerPoint PPT Presentation

Citation preview

Page 1: Övning 5 nada.kth.se/~mhj/tilda

Övning 5

www.nada.kth.se/~mhj/tilda

Page 2: Övning 5 nada.kth.se/~mhj/tilda

Hashning

TextsökningKMP-automat

HemtalBilarna

Page 3: Övning 5 nada.kth.se/~mhj/tilda

Hashning

Page 4: Övning 5 nada.kth.se/~mhj/tilda

Björn Agnetha Benny Anni-Frid

first

Björn Benny

firstA

Agneta Anni-Frid

firstB

Agneta

Björn

Benny

Anni-Frid

table [ ]

Iden med hashning

hash betyder: hackmat, röra

0

1

2

3

Page 5: Övning 5 nada.kth.se/~mhj/tilda

Benny

BjörnAnni-Frid

Agnetha

table [ ]

0

1

2

3

f( ) = 2 + 10 + 29 + 18 + 14 = 73 mod 4 1

f( ) = 1 + 7 + 14 + 5 + 20 + 7 + 1 = 55 mod 4 3

f( ) = 2 + 5 + 14 + 14 + 25 = 60 mod 4 0

f( ) = 1 + 14 + 14 + 9 + 30 + 6 + 18 + 9 + 4 = 105 mod 4 1

Insättning (put)

hashfunktion tabellstorlek

Björn

Björn

Agnetha

Benny

Anni-Frid

Page 6: Övning 5 nada.kth.se/~mhj/tilda

Benny

BjörnAnni-Frid

Agnetha

table [ ]

0

1

2

3

f( ) = 2 + 5 + 14 + 14 + 25 = 60 mod 4 0

f( ) = 2 + 10 + 29 + 18 + 14 = 73 mod 4 1

f( ) = 13 + 1 + 18 + 9 + 5 = 46 mod 4 2

Sökning (get)

Björn

Benny

Benny

Björn

f( ) = 2 + 15 = 17 mod 4 1Bo

Marie

Anni-Frid Björn

Page 7: Övning 5 nada.kth.se/~mhj/tilda

Benny

Anni-Frid

Agnetha

table [ ]

9999

Tabellstorlek

Björn

f(Björn) = 73

f(Agnetha) = 55

f(Benny) = 60

f(Anni-Frid) = 105

105

73

60

55

0

…..

…..

…..

…..

…..

73

55

60

105

mod 10000

mod 10000

mod 10000

mod 10000

Page 8: Övning 5 nada.kth.se/~mhj/tilda

Benny

Anni-Frid

Agnetha

table [ ]Tabellstorlek

Björn

6

4

2

0

1

3

5

7

1

7

4

1

f(Björn) = 73

f(Agnetha) = 55

f(Benny) = 60

f(Anni-Frid) = 105

mod 8

mod 8

mod 8

mod 8

Tumregel: 50% luft

Page 9: Övning 5 nada.kth.se/~mhj/tilda

Benny

Anni-Frid

Agnetha

table [ ]

9999

Tabellstorlek

Björn

105

73

60

55

0

…..

…..

…..

…..

…..

Page 10: Övning 5 nada.kth.se/~mhj/tilda

Hashfunktion

• god spridning• snabb att beräkna

public static void main(String [] args) { String s1 = ”hej”; int code = s1.hashCode(); System.out.println(code);}

f(s) = s[0] * 31(n-1) + s[1] * 31(n-2) + ... + s[n-1]

Hashning av strängar i Java:

f(s1) = 104 * 312 + 101 * 31 + 106 = 103181

103181

Page 11: Övning 5 nada.kth.se/~mhj/tilda

Krockhantering med ”linear probing”

Benny

Agnetha

table [ ]

6

4

2

0

1

3

5

7

1

7

4

1

f(Björn) = 73

f(Agnetha) = 55

f(Benny) = 60

f(Anni-Frid) = 105

mod 8

mod 8

mod 8

mod 8

Anni-Frid

Björn

2

Krock!

kluster

Page 12: Övning 5 nada.kth.se/~mhj/tilda

Krockhantering med ”quadratic probing”

Benny

Agnetha

table [ ]

6

4

2

0

1

3

5

7

1

7

4

1

f(Björn) = 73

f(Agnetha) = 55

f(Benny) = 60

f(Anni-Frid) = 105

mod 8

mod 8

mod 8

mod 8

Björn

22 = 4

Krock!

Krock!

32 = 9 Krock!

Anni-Frid

mod 8 1 42 = 16 mod 8 0

Page 13: Övning 5 nada.kth.se/~mhj/tilda

Perfekt hashfunktion

0 false

1 false

7 false

23 false

32 false

50 false

51 false

…..

…..

Spara kort som dragits ur en kortlek.

klöver = 0, ruter = 1, hjärter = 2, spader = 3

f(färg, nr) = 13 * färg + nr-1

f(klöver, 8) = 13 * 0 + 8-1 = 7

f(hjärter, 7) = 13 * 2 + 7-1 = 32

f(ruter, knekt) = 13 * 1 + 11-1 = 23

ess = 1, knekt = 11, dam = 12, kung = 13

true

true

true klöver 8:

hjärter 7:

ruter knekt:

…..

…..

Page 14: Övning 5 nada.kth.se/~mhj/tilda

Bloomfilter

0 false

1 false

70012 false

103181 false

143229 false

59999false

60000 false

…..

…..

Stavningskontrollprogram:

true

true

true

…..

…..

f(”hej”) = 103181 mod 60000

43181

……

……

true

true

50 % att ett felstavat ord, t.ex. ”heej”, godkänns.

179999 180000

f1(”hej”) = 103181 mod 180000

103181

f2(”hej”) = 430012 mod 180000

70012

f3(”hej”) = 1043229 mod 180000

143229

……

……

43181

12.5 % att ett felstavat ord, t.ex. ”heej”, godkänns.

fortsätt med samtliga ord…

fortsätt med samtliga ord…

true

I Viggos Stava används 14 hashfunktioner 0.006 %

Page 15: Övning 5 nada.kth.se/~mhj/tilda

TextsökningKMP-automat

Page 16: Övning 5 nada.kth.se/~mhj/tilda

FYRTIOTVÅ, SA DJUPA TAN ENK

TTTTTTTTTVVVVVVVVVÅÅÅÅÅÅÅÅÅTTTTTTTTTV VÅFYRTIOTVÅ

VÅTm

n

Komplexitet: O(nm)

Page 17: Övning 5 nada.kth.se/~mhj/tilda

AT CAAAGAATAAC A CTAA G AAGAATTA

AACAACAAC AAC AACAACAACAAC

Page 18: Övning 5 nada.kth.se/~mhj/tilda

KMP automat: O(n)

Morris Pratt

Knuth

Page 19: Övning 5 nada.kth.se/~mhj/tilda

, SA DJUPA TAN ENKFYRTIOTVÅ

T V Å

i 0 1 2 3next[i] 0 1 1

V ÅT

Page 20: Övning 5 nada.kth.se/~mhj/tilda

A D A M

i 0 1 2 4next[i] 0 1 2

MD AA

30

ADADAM

Page 21: Övning 5 nada.kth.se/~mhj/tilda

A D A M

i 0 1 2 4next[i] 0 1 2

30

1. next[1] = 0

2. Om ingen upprepning: next[i] = 1

3. Om j>0 bokstäver är upprepade: next[i] = j+1

Optimering: Men om bokstav i är samma som första bokstaven: next[i]=0

Optimering: Men om dessutom bokstav i och j+1 är samma: next[i]=next[j+1]

MD AA