Ladda ner presentationen
Presentation laddar. Vänta.
1
TILLÄMPAD DATALOGI (TILDA) Övning 4 www.nada.kth.se/~mhj/tilda
2
Hashning Sortering
3
Listor: O(n) Binärträd: O(log n) Kan vi söka ännu snabbare? 48517 7 411 17259
4
Hashning
5
BjörnAgnethaBennyAnni-Frid first BjörnBenny firstA AgnetaAnni-Frid firstB Agneta Björn Benny Anni-Frid table [ ] Iden med hashning hash betyder: hackmat, röra 0 1 2 3
6
Benny Björn Anni-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) hashfunktiontabellstorlek Björn Agnetha Benny Anni-Frid
7
Benny Björn Anni-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 Björn f( ) = 2 + 15 = 17 mod 4 1 Bo Marie Anni-Frid Björn
8
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
9
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 Tumregel: 50% luft
10
Benny Anni-Frid Agnetha table [ ] 9999 Tabellstorlek Björn 105 73 60 55 0 …..
11
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 * 31 2 + 101 * 31 + 106 = 103181 103181
12
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 Anni-Frid Björn 2 Krock! kluster
13
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 Björn 2 2 = 4 Krock! 3 2 = 9 Krock! Anni-Frid mod 8 1 4 2 = 16 mod 8 0
14
Perfekt hashfunktion 0 false 1 7 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 klöver 8: hjärter 7: ruter knekt: …..
15
Bloomfilter 0 false 1 70012 false 103181 false 143229 false 59998 false 59999 false ….. Stavningskontrollprogram: true ….. f(”hej”) = 103181 mod 60000 43181 …………… 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… true I Viggos Stava används 14 hashfunktioner 0.006 %
16
Sortering
17
Quicksort 59347106281 pivot 939492715151 4232342 Komplexiteten blir i allmänhet O(n log n) 67981051342 pivot 1 2 Komplexiteten blir O(n 2 ) om redan sorterad
18
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? 69810541273 m 698 541273 Komplexitet: O(m log m + n)
19
Dokusåpan 040313:7 En 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? 6910541273869 5478 321 6 9 54789 Antal jämförelser: (10-1) + (2 + 1) = 12Antal jämförelser: (243-1) + (2 + 1) = 245
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.