Övning 5 nada.kth.se/~mhj/tilda
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 PresentationTRANSCRIPT
![Page 1: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/1.jpg)
Övning 5
www.nada.kth.se/~mhj/tilda
![Page 2: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/2.jpg)
Hashning
TextsökningKMP-automat
HemtalBilarna
![Page 3: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/3.jpg)
Hashning
![Page 4: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/9.jpg)
Benny
Anni-Frid
Agnetha
table [ ]
9999
Tabellstorlek
Björn
105
73
60
55
0
…..
…..
…..
…..
…..
![Page 10: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/15.jpg)
TextsökningKMP-automat
![Page 16: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/16.jpg)
FYRTIOTVÅ, SA DJUPA TAN ENK
TTTTTTTTTVVVVVVVVVÅÅÅÅÅÅÅÅÅTTTTTTTTTV VÅFYRTIOTVÅ
VÅTm
n
Komplexitet: O(nm)
![Page 17: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/17.jpg)
AT CAAAGAATAAC A CTAA G AAGAATTA
AACAACAAC AAC AACAACAACAAC
![Page 18: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/18.jpg)
KMP automat: O(n)
Morris Pratt
Knuth
![Page 19: Övning 5 nada.kth.se/~mhj/tilda](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/19.jpg)
, 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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.net/reader030/viewer/2022033023/5681555e550346895dc32858/html5/thumbnails/21.jpg)
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