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
Övning 5
www.nada.kth.se/~mhj/tilda
Hashning
TextsökningKMP-automat
HemtalBilarna
Hashning
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
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
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
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
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
Benny
Anni-Frid
Agnetha
table [ ]
9999
Tabellstorlek
Björn
105
73
60
55
0
…..
…..
…..
…..
…..
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
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
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
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:
…..
…..
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 %
TextsökningKMP-automat
FYRTIOTVÅ, SA DJUPA TAN ENK
TTTTTTTTTVVVVVVVVVÅÅÅÅÅÅÅÅÅTTTTTTTTTV VÅFYRTIOTVÅ
VÅTm
n
Komplexitet: O(nm)
AT CAAAGAATAAC A CTAA G AAGAATTA
AACAACAAC AAC AACAACAACAAC
KMP automat: O(n)
Morris Pratt
Knuth
, SA DJUPA TAN ENKFYRTIOTVÅ
T V Å
i 0 1 2 3next[i] 0 1 1
V ÅT
A D A M
i 0 1 2 4next[i] 0 1 2
MD AA
30
ADADAM
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