computer notes - Data Structures - 35

Page 1

Class No.35 Data Structures http://ecomputernotes.com


Skip List: Implementation

S3 −∞

+∞

S2 −∞ S1 −∞ S0 −∞

12

34

+∞

23

34

+∞

23

34

45

+∞

http://ecomputernotes.com


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. http://ecomputernotes.com


Implementation: QuadNode  A quad-node stores: • • • • •

item link to the node before link to the node after link to the node below link to the node above

quad­node

 This will require copying the key (item) at different levels

http://ecomputernotes.com

x


Skip Lists with Quad Nodes

S3

−∞

S2

−∞

S1

−∞

S0

−∞

+∞ +∞

31

23

12

23

26

31

34

31

34

+∞

64

44

56

64

http://ecomputernotes.com

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

http://ecomputernotes.com


Implementation 5: AVL tree  An AVL tree, ordered by key  insert: a standard insert; (log n)  find: a standard find (without removing, of course); (log n)  remove: a standard remove; (log n)

key

key

entry

entry

key

key

entry

and so on

http://ecomputernotes.com

entry


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!

http://ecomputernotes.com


Implementation 6: Hashing  An array in which TableNodes are not stored consecutively  Their place of storage is calculated using the key and a hash function Key

hash function

key 4 10

array index

 Keys and entries are scattered throughout the array.

123

http://ecomputernotes.com

entry


Hashing  insert: calculate place of storage, insert TableNode; (1)  find: calculate place of storage, retrieve entry; (1)  remove: calculate place of storage, set it to null; (1)

key 4 10

123

All are constant time (1) !

http://ecomputernotes.com

entry


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.

http://ecomputernotes.com


Example: fruits  Suppose our hash function gave us the following values: hashCode("apple") = 5 hashCode("watermelon") = 3 hashCode("grapes") = 8 hashCode("cantaloupe") = 7 hashCode("kiwi") = 0 hashCode("strawberry") = 9 hashCode("mango") = 6 hashCode("banana") = 2

kiwi

0 1 2 3

banana watermelon

4 5 6 7 8 9

apple mango cantaloupe grapes strawberry

http://ecomputernotes.com


Example  Store data in a table array: table[5] = "apple" table[3] = "watermelon" table[8] = "grapes" table[7] = "cantaloupe" table[0] = "kiwi" table[9] = "strawberry" table[6] = "mango" table[2] = "banana"

0

kiwi

1 2 3

banana watermelon

4 5 6 7 8 9

apple mango cantaloupe grapes strawberry

http://ecomputernotes.com


Example  Associative array: table["apple"] table["watermelon"] table["grapes"] table["cantaloupe"] table["kiwi"] table["strawberry"] table["mango"] table["banana"]

0

kiwi

1 2 3

banana watermelon

4 5 6 7 8 9

apple mango cantaloupe grapes strawberry

http://ecomputernotes.com


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

http://ecomputernotes.com


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; }

http://ecomputernotes.com


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 i h( str ) =  ∑ str[i ] × b %T  i =0  0 1 2 = + + Example : h( ABC ) (65b 66b 67b )%T

http://ecomputernotes.com


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.

http://ecomputernotes.com


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.