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

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

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

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

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

TILLÄMPAD DATALOGI(TILDA)

Övning 4

www.nada.kth.se/~mhj/tilda

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

Hashning

Sortering

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

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

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

Hashning

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

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 6: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 7: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 8: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 9: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 10: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

Benny

Anni-Frid

Agnetha

table [ ]

9999

Tabellstorlek

Björn

105

73

60

55

0

…..

…..

…..

…..

…..

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

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 12: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 13: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 14: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 15: TILLÄMPAD DATALOGI (TILDA) Övning 4 nada.kth.se/~mhj/tilda

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 %

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

Sortering

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

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

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

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)

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

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