TILLÄMPAD DATALOGI (TILDA) Övning 4
Hashning Sortering
Listor: O(n) Binärträd: O(log n) Kan vi söka ännu snabbare?
Hashning
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
Benny Björn Anni-Frid Agnetha table [ ] f( ) = = 73 mod 4 1 f( ) = = 55 mod 4 3 f( ) = = 60 mod 4 0 f( ) = = 105 mod 4 1 Insättning (put) hashfunktiontabellstorlek Björn Agnetha Benny Anni-Frid
Benny Björn Anni-Frid Agnetha table [ ] f( ) = = 60 mod 4 0 f( ) = = 73 mod 4 1 f( ) = = 46 mod 4 2 Sökning (get) Björn Benny Björn f( ) = = 17 mod 4 1 Bo 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) = … mod 10000
Benny Anni-Frid Agnetha table [ ] Tabellstorlek Björn f(Björn) = 73 f(Agnetha) = 55 f(Benny) = 60 f(Anni-Frid) = 105 mod 8 Tumregel: 50% luft
Benny Anni-Frid Agnetha table [ ] 9999 Tabellstorlek Björn …..
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 * * =
Krockhantering med ”linear probing” Benny Agnetha table [ ] f(Björn) = 73 f(Agnetha) = 55 f(Benny) = 60 f(Anni-Frid) = 105 mod 8 Anni-Frid Björn 2 Krock! kluster
Krockhantering med ”quadratic probing” Benny Agnetha table [ ] 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 = 16 mod 8 0
Perfekt hashfunktion 0 false 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 * = 7 f(hjärter, 7) = 13 * = 32 f(ruter, knekt) = 13 * = 23 ess = 1, knekt = 11, dam = 12, kung = 13 true klöver 8: hjärter 7: ruter knekt: …..
Bloomfilter 0 false false false false false false ….. Stavningskontrollprogram: true ….. f(”hej”) = mod …………… true 50 % att ett felstavat ord, t.ex. ”heej”, godkänns f1(”hej”) = mod f2(”hej”) = mod f3(”hej”) = mod …………… % att ett felstavat ord, t.ex. ”heej”, godkänns. fortsätt med samtliga ord… true I Viggos Stava används 14 hashfunktioner %
Sortering
Quicksort pivot Komplexiteten blir i allmänhet O(n log n) pivot 1 2 Komplexiteten blir O(n 2 ) om redan sorterad
Röster för fred :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? m Komplexitet: O(m log m + n)
Dokusåpan :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? Antal jämförelser: (10-1) + (2 + 1) = 12Antal jämförelser: (243-1) + (2 + 1) = 245