1 / 19

TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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.

ayoka
Télécharger la présentation

TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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? 4 8 5 17 7 4 11 2 5 9 17

  4. Hashning

  5. 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 Benny 2 Anni-Frid 3

  6. Insättning (put) hashfunktion tabellstorlek f( ) = 2 + 10 + 29 + 18 + 14 = 73 mod 4 Björn 1 mod 4 3 f( ) = 1 + 7 + 14 + 5 + 20 + 7 + 1 = 55 Agnetha mod 4 0 f( ) = 2 + 5 + 14 + 14 + 25 = 60 Benny mod 4 f( ) = 1 + 14 + 14 + 9 + 30 + 6 + 18 + 9 + 4 = 105 Anni-Frid 1 table [ ] Benny 0 Björn Björn Anni-Frid 1 2 Agnetha 3

  7. Sökning (get) f( ) = 2 + 5 + 14 + 14 + 25 = 60 Benny mod 4 0 mod 4 f( ) = 2 + 10 + 29 + 18 + 14 = 73 Björn 1 mod 4 f( ) = 13 + 1 + 18 + 9 + 5 = 46 Marie 2 mod 4 f( ) = 2 + 15 = 17 Bo 1 table [ ] Benny Benny 0 Björn Björn Björn Anni-Frid Anni-Frid 1 2 Agnetha 3

  8. Tabellstorlek table [ ] 0 ….. Agnetha 55 mod 10000 ….. 73 f(Björn) = 73 Benny mod 10000 60 55 f(Agnetha) = 55 ….. mod 10000 60 f(Benny) = 60 Björn 73 mod 10000 105 f(Anni-Frid) = 105 ….. Anni-Frid 105 ….. 9999

  9. Tabellstorlek table [ ] 0 Björn Anni-Frid 1 2 mod 8 1 3 f(Björn) = 73 Benny mod 8 4 7 f(Agnetha) = 55 5 mod 8 4 f(Benny) = 60 6 mod 8 1 f(Anni-Frid) = 105 Agnetha 7 Tumregel: 50% luft

  10. Tabellstorlek table [ ] 0 ….. Agnetha 55 ….. Benny 60 ….. Björn 73 ….. Anni-Frid 105 ….. 9999

  11. Hashfunktion • god spridning • snabb att beräkna Hashning av strängar i Java: public static void main(String [] args) { String s1 = ”hej”; int code = s1.hashCode(); System.out.println(code); } 103181 f(s) = s[0] * 31(n-1) + s[1] * 31(n-2) + ... + s[n-1] f(s1) = 104 * 312 + 101 * 31 + 106 = 103181

  12. Krockhantering med ”linear probing” table [ ] 0 Björn 1 kluster Anni-Frid 2 mod 8 1 3 f(Björn) = 73 Benny mod 8 4 7 f(Agnetha) = 55 5 mod 8 4 f(Benny) = 60 6 mod 8 1 Krock! f(Anni-Frid) = 105 Agnetha 7 2

  13. Krockhantering med ”quadratic probing” table [ ] Anni-Frid 0 Björn 1 2 mod 8 1 3 f(Björn) = 73 Benny mod 8 4 7 f(Agnetha) = 55 5 mod 8 4 f(Benny) = 60 6 mod 8 1 Krock! f(Anni-Frid) = 105 Agnetha 7 22 = 4 Krock! mod 8 32 = 9 1 Krock! mod 8 42 = 16 0

  14. Perfekt hashfunktion false 0 Spara kort som dragits ur en kortlek. false 1 ….. false true 7 klöver = 0, ruter = 1, hjärter = 2, spader = 3 ess = 1, knekt = 11, dam = 12, kung = 13 ….. false true 23 f(färg, nr) = 13 * färg + nr-1 ….. false true 32 klöver 8: f(klöver, 8) = 13 * 0 + 8-1 = 7 f(hjärter, 7) = 13 * 2 + 7-1 = 32 hjärter 7: ….. ruter knekt: false f(ruter, knekt) = 13 * 1 + 11-1 = 23 50 false 51

  15. Bloomfilter false true 0 Stavningskontrollprogram: true false 1 mod 60000 ….. f(”hej”) = 103181 43181 70012 false true fortsätt med samtliga ord… …………… 50 % att ett felstavat ord, t.ex. ”heej”, godkänns. ….. 43181 103181 false true mod 180000 f1(”hej”) = 103181 103181 ….. mod 180000 f2(”hej”) = 430012 70012 143229 false true …………… mod 180000 f3(”hej”) = 1043229 143229 ….. fortsätt med samtliga ord… 179998 59998 false 12.5 % att ett felstavat ord, t.ex. ”heej”, godkänns. 179999 true false 59999 I Viggos Stava används 14 hashfunktioner 0.006 %

  16. Sortering

  17. Quicksort pivot pivot 1 1 5 3 2 9 2 2 3 4 3 3 9 4 4 9 4 2 5 1 5 7 10 6 9 2 8 7 1 Komplexiteten blir i allmänhet O(n log n) pivot pivot 1 1 2 2 3 4 5 6 7 8 9 10 Komplexiteten blir O(n2) 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? 1 2 3 4 5 6 7 8 9 10 m 1 2 3 4 5 6 7 8 9 10 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? 2 3 1 1 4 2 5 3 6 4 7 5 6 8 7 8 9 9 10 10 4 5 6 7 8 9 10 9 10 Antal jämförelser: (10-1) + (2 + 1) = 12 Antal jämförelser: (243-1) + (2 + 1) = 245

More Related