0% found this document useful (0 votes)
42 views18 pages

CS301 Lec41

The document discusses different implementations of hash tables including storing key-value pairs in an array using a hash function to calculate the index, example hash functions for strings and integers, and handling collisions when multiple keys hash to the same index.

Uploaded by

M NOOR MALIK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views18 pages

CS301 Lec41

The document discusses different implementations of hash tables including storing key-value pairs in an array using a hash function to calculate the index, example hash functions for strings and integers, and handling collisions when multiple keys hash to the same index.

Uploaded by

M NOOR MALIK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 18

Skip List: Implementation

S3  

S2  34 

S1  23 34 

S0  12 23 34 45 
Lecture No.41
Data Structure

Dr. Sohail Aslam


Implementation: TowerNode
head tail
Tower Node

20 26 30 40 50 57 60

 TowerNode will have array of next pointers.


 Actual number of next pointers will be
decided by the random procedure.
 Define MAXLEVEL as an upper limit on
number of levels in a node.
Implementation: QuadNode

 A quad-node stores:
• item
quad-node
• link to the node before
• link to the node after
• link to the node below
• link to the node above
x
 This will require copying the
key (item) at different levels
Skip Lists with Quad Nodes

S3  

S2  31 

S1  23 31 34 64 

S0  12 23 26 31 34 44 56 64 78 
Performance of Skip Lists

 In a skip list with n items


• The expected space used is proportional
to n.
• The expected search, insertion and
deletion time is proportional to log n.
 Skip lists are fast and simple to implement
in practice
Implementation 5: AVL tree

 An AVL tree, ordered by key


key entry
 insert: a standard insert; (log n)
 find: a standard find (without
removing, of course); (log n) key entry key entry

 remove: a standard remove;


(log n) key entry

and so on
Anything better?

 So far we have find, remove and insert


where time varies between constant logn.

 It would be nice to have all three as


constant time operations!
Implementation 6: Hashing

 An array in which
TableNodes are not stored key entry
consecutively
 Their place of storage is
4
calculated using the key and
a hash function
10

hash array
Key index
function
123
 Keys and entries are
scattered throughout the
array.
Hashing

 insert: calculate place of


storage, insert
key entry
TableNode; (1)
 find: calculate place of 4
storage, retrieve entry;
(1) 10
 remove: calculate place
of storage, set it to null;
(1) 123
All are constant time (1) !
Hashing

 We use an array of some fixed size T to


hold the data. T is typically prime.

 Each key is mapped into some number


in the range 0 to T-1 using a hash
function, which ideally should be
efficient to compute.
Example: fruits

 Suppose our hash function 0 kiwi


gave us the following 1
values: 2 banana
hashCode("apple") = 5 3 watermelon
hashCode("watermelon") = 3
4
hashCode("grapes") = 8
hashCode("cantaloupe") = 7 5 apple
hashCode("kiwi") = 0 6 mango
hashCode("strawberry") = 9 7 cantaloupe
hashCode("mango") = 6
hashCode("banana") = 2 8 grapes
9 strawberry
Example

 Store data in a table 0 kiwi


1
array:
table[5] = "apple"
2 banana
table[3] = "watermelon" 3 watermelon
table[8] = "grapes" 4
table[7] = "cantaloupe" 5 apple
table[0] = "kiwi"
table[9] = "strawberry" 6 mango
table[6] = "mango" 7 cantaloupe
table[2] = "banana" 8 grapes
9 strawberry
Example

 Associative array: 0 kiwi


1
table["apple"]
2 banana
table["watermelon"]
table["grapes"]
3 watermelon
4
table["cantaloupe"]
table["kiwi"] 5 apple
table["strawberry"] 6 mango
table["mango"] 7 cantaloupe
table["banana"] 8 grapes
9 strawberry
Example Hash Functions

 If the keys are strings the hash function is


some function of the characters in the
strings.
 One possibility is to simply add the ASCII
values of the characters:
 length 1 
h( str )    str[i ] %TableSize
 i 0 
Example : h( ABC )  (65  66  67)%TableSize
Finding the hash function

int hashCode( char* s )


{
int i, sum;
sum = 0;
for(i=0; i < strlen(s); i++ )
sum = sum + s[i]; // ascii value
return sum % TABLESIZE;
}
Example Hash Functions

 Another possibility is to convert the string


into some number in some arbitrary base b
(b also might be a prime number):

 length 1 
h( str )    str[i ]  b %T
i

 i 0 
 0

Example : h( ABC ) (65b 66b 67b )%T
1
 2
Example Hash Functions

 If the keys are integers then key%T is


generally a good hash function, unless the
data has some undesirable features.
 For example, if T = 10 and all keys end in
zeros, then key%T = 0 for all keys.
 In general, to avoid situations like this, T
should be a prime number.

You might also like