Upload
ayoka
View
72
Download
0
Embed Size (px)
DESCRIPTION
TILLÄMPAD DATALOGI (TILDA) Övning 4 www.nada.kth.se/~mhj/tilda. Hashning Sortering. Listor: O(n) Binärträd: O(log n) Kan vi söka ännu snabbare?. 4. 8. 5. 17. 7. 4. 11. 2. 5. 9. 17. Hashning. Iden med hashning. first. Björn. Agnetha. Benny. Anni-Frid. firstA. - PowerPoint PPT Presentation
Citation preview
TILLÄMPAD DATALOGI(TILDA)
Övning 4
www.nada.kth.se/~mhj/tilda
Hashning
Sortering
Listor:
O(n)
Binärträd:
O(log n)
Kan vi söka ännu snabbare?
4 8 5 17
7
4 11
172 5 9
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
59998false
59999 false
…..
…..
Stavningskontrollprogram:
true
true
true
…..
…..
f(”hej”) = 103181 mod 60000
43181
……
……
…
true
true
50 % att ett felstavat ord, t.ex. ”heej”, godkänns.
179998 179999
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 %
Sortering
Quicksort
5 9 3 4 7 10 6 2 8 1
pivot
93 94 92 7151 51
pivot
4232 3 42
Komplexiteten blir i allmänhet O(n log n)
6 7 98 1051 3 42
pivot
1
pivot
2
Komplexiteten blir O(n2) om redan sorterad
Röster för fred 030426:7 Körledaren förvarar sina noter sorterade i en tjock pärm. Till varje repetition plockar han ut några noter och efteråt sorteras de in i pärmen igen med quicksort. Som pivotelement väljs elementet längst till höger i varje delvektor. I kören finns en tildaelev som påpekar att det går att göra mycket enklare och effektivare. Hur då? Ange komplexiteten då m noter plockas ut från den n tjocka pärmen?
6 98 10541 2 73
m
6 98 10541 2 73
Komplexitet: O(m log m + n)
Dokusåpan 040313:7En populär kanadensisk dokusåpa söker deltagare. Flera (243 personer) vill vara med och arrangörerna sorterar de sökande i en lång rad efter näslängd. När programledaren öppnar dörren för att släppa in den första sökanden får en handfull av dem som står först i kön syn på honom och blir så skraja att de springer och gömmer sig i kön. Beskriv en smart algoritm för att sortera om kön. Antag att det visade sig vara tre personer som blev skrämda, hur många näsjämförelser behövs det då med din algortitm för att sortera om kön?
6 9 10541 2 73 86 9 1054 7 832 1
654 7 8 9 10
Antal jämförelser: (10-1) + (2 + 1) = 12Antal jämförelser: (243-1) + (2 + 1) = 245