1 / 19

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.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

(TILDA)

Övning 4

Sortering

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

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

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

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

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

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

table [ ]

0

…..

Agnetha

55

…..

Benny

60

…..

Björn

73

…..

Anni-Frid

105

…..

9999

• 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

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

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

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

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 %

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

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)

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