csc2100b tutorial 6 - chinese university of hong · pdf filecsc2100b tutorial 3 hashing - hash...

34
CSC2100B Tutorial 6 Hashing Tom Chao Zhou Yi LIU Mar 4, 2004

Upload: lemien

Post on 15-Feb-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100BTutorial 6 Hashing

Tom Chao Zhou

Yi LIUMar 4, 2004

Page 2: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 2

Hashing - overviewHash functionCollision resolution

Separate Chaining (Open hashing)Open addressing (Closed Hashing)

Linear probingQuadratic probingDouble hashing

Page 3: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 3

Hashing - hash function

Hash functionA mapping function that maps a key to a number in the range 0 to TableSize -1

int hashfunc(int integer_key){

return integer_key % HASHTABLESIZE;}

Page 4: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 4

Hashing - separate chaining

If two keys map to same value, the elements are chained together.

Page 5: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 5

Hashing - example

Insert the following four keys 22 84 35 62 into hash table of size 10 using separate chaining. The hash function is key % 10

Initial hash table

Page 6: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 6

Hashing - exampleInsert the following four keys 22 84 35 62 into hash table of size 10 using separate chaining. The hash function is key % 10

After insert 22

22 % 10 = 2

Page 7: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 7

Hashing - exampleInsert the following four keys 22 84 35 62 into hash table of size 10 using separate chaining. The hash function is key % 10

After insert 84

84 % 10 = 4

Page 8: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 8

Hashing - exampleInsert the following four keys 22 84 35 62 into hash table of size 10 using separate chaining. The hash function is key % 10

After insert 35

35 % 10 = 5

Page 9: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 9

Hashing - exampleInsert the following four keys 22 84 35 62 into hash table of size 10 using separate chaining. The hash function is key % 10

After insert 62

62 % 10 = 2

Page 10: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 10

Hashing

Open addressingOpen addressing hash tables store the records directly within the array. A hash collision is resolved by probing, or searching through alternate locations in the array.

Linear probingQuadratic probingRandom probingDouble hashing

Page 11: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 11

Hashing - Open addressing

#define HASHTABLESIZE 51

typedef struct{

int key[HASHTABLESIZE];int state[HASHTABLESIZE];

/* -1=lazy delete, 0=empty, 1=occupied */} hashtable;

/* The hash function */int hash(int input){

return input % HASHTABLESIZE;}

Page 12: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 12

Hashing - Open addressingOpen addressing

if collision occurs, alternative cells are tried.h0(X), h1(X), h2(X), ...

hi(X) = (Hash(X) + F(i) ) mod TableSize

Linear probing : F(i) = iQuadratic probing : F(i) = i2

Double hashing : F(i) = i * Hash2(X)

Page 13: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 13

Hashing - Open addressingvoid open_addressing_insert(int item, hashtable * ht ){

int hash_value;hash_value = hash(item);i = hash_value;while (ht->state[i]== 1){

if (ht->key[i] == item) {fprintf(stderr,”Duplicate entry\n”);exit(1);

}i = (i + F(i)) % HASHTABLESIZE;if (i == hash_value) {

fprintf(stderr, “The table is full\n”);exit(1);

}}ht->key[i] = item;ht->state[i] = 1;

}

Page 14: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 14

Hashing - Open addressing

Linear probingF(i) = i

hi(X) = (Hash(X) + i ) mod TableSize

h0(X) = (Hash(X) + 0) mod TableSize, h1(X) = (Hash(X) + 1) mod TableSize,h2(X) = (Hash(X) + 2) mod TableSize, ...

Page 15: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 15

Hashing - Open addressingLinear probing

/* The h function */int h(int i, int input){return (hash(input) + i)% HASHTABLESIZE;

}

Page 16: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 16

Hashing - Open addressing

Linear probing exampleInitial hash table

Page 17: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 17

Hashing - Open addressing

Linear probing exampleInsert 7 at h0(7) (7 mod 17) = 7

Page 18: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 18

Hashing - Open addressing

Linear probing exampleInsert 36 at h0(36) (36 mod 17) = 2

Page 19: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 19

Hashing - Open addressing

Linear probing exampleInsert 24 at h1(24) (24 mod 17) = 7

Page 20: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 20

Hashing - Open addressing

Linear probing exampleInsert 75 at h2(75) (75 mod 17) = 7

Page 21: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 21

Hashing - Open addressingLinear probing example

Delete 24

Page 22: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 22

Hashing - Open addressingLinear probing example

Find 75, found !

Page 23: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 23

Hashing - Open addressing

Quadratic probingF(i) = i2

hi(X) = (Hash(X) + i2 ) mod TableSize

h0(X) = (Hash(X) + 02) mod TableSize, h1(X) = (Hash(X) + 12) mod TableSize,h2(X) = (Hash(X) + 22) mod TableSize, ...

Page 24: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 24

Hashing - Open addressing

Quadratic probing

/* The h function */int h(int i, int input){

return (hash(input) + i * i) % HASHTABLESIZE;

}

Page 25: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 25

Hashing - Open addressing

Quadratic probing exampleInitial hash table

Page 26: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 26

Hashing - Open addressingQuadratic probing example

Insert 5 at h0(5) (5 mod 17) = 5

Page 27: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 27

Hashing - Open addressing

Quadratic probing exampleInsert 56 at h1(56) (56 mod 17) = 5

((56 + 1*1) mod 17) = 6

Page 28: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 28

Hashing - Open addressingQuadratic probing example

Insert 73 at h2(56) (73 mod 17) = 5((73 + 2*2) mod 17) = 9

Page 29: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 29

Hashing - Open addressing

Quadratic probing exampleInsert 124 at h3(124) (124 mod 17) = 5

((124 + 3*3) mod 17) = 6

Page 30: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 30

Hashing - Open addressing

Random probingRandomize(X)

h0(X) = Hash(X), h1(X) = (h0(X) + RandomGen()) mod TableSize,h2(X) = (h1(X) + RandomGen()) mod TableSize, ...

Use Randomize(X) to ‘seed’ the random number generator using XEach call of RandomGen() will return the next random number in the random sequence for seed X

Page 31: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 31

Hashing - Open addressing

Implement random probing using random number generator in C

pseudo-random number generator: rand()returns an integer between 0 and RAND_MAX

‘Seed’ the randomizersrand(unsigned int);

Use time as a ‘seed’time(NULL);

Page 32: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 32

Hashing - Open addressing

random number generation in C

srand(time(NULL));

for (i = 0; i < 10; i++)printf("%d\n", rand());

Page 33: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

CSC2100B Tutorial 33

Hashing - Open addressing

Double hashing : F(i) = i * Hash2(X)

hi(X) = (Hash(X) + i * Hash2(X) ) mod TableSize

h0(X) = (Hash(X) + 0 * Hash2(X)) mod TableSize, h1(X) = (Hash(X) + 1 * Hash2(X)) mod TableSize,h2(X) = (Hash(X) + 2 * Hash2(X)) mod TableSize, ...

Page 34: CSC2100B Tutorial 6 - Chinese University of Hong · PDF fileCSC2100B Tutorial 3 Hashing - hash function zHash function {A mapping function that maps a key to a number in the range

Thanks!