@@ -5,18 +5,82 @@ def __init__(self):
55 self .buckets = [[] for _ in range (self .capacity )]
66
77 def hashing (self , key ):
8- "Basic "
9- return
8+ """Basic hashing function"""
9+ unicode_points = 0
10+ for char in key :
11+ unicode_points += ord (char )
12+ return unicode_points % self .capacity
1013
1114 def resize (self ):
12- return
15+ old_buckets = self .buckets
16+ self .capacity *= 2
17+ self .buckets = [[] for _ in range (self .capacity )]
18+ self .size = 0 # reset size, will be updated in insert
19+ # rehashing & copy the old array into new array
20+ for bucket in old_buckets :
21+ for k , _ in bucket :
22+ self .insert (k , _ )
1323
1424 def insert (self , key , value ):
15- return
25+ """Insert a key-value pair into hash table"""
26+ if self .size / self .capacity >= 0.8 : # resize when 80% full
27+ self .resize ()
28+
29+ hash_code = self .hashing (key )
30+ retrieved_bucket = self .buckets [hash_code ] # might be a linked list
31+ for i , (k , _ ) in enumerate (retrieved_bucket ):
32+ # enumerate is to look thru each key_value pair with its corr. index
33+ if k == key :
34+ retrieved_bucket [i ] = (key , value )
35+ break
36+ else :
37+ retrieved_bucket .append ((key , value ))
38+ self .size += 1 # bucket array size += 1 as a new hashCode is inserted into the bucket
1639
1740 def get (self , key ):
18- return
41+ hash_code = self .hashing (key )
42+ retrieved_bucket = self .buckets [hash_code ]
43+ for k , v in retrieved_bucket :
44+ if k == key :
45+ return v
46+ return None
1947
2048 def delete (self , key ):
21- return
49+ hash_code = self .hashing (key )
50+ retrieved_bucket = self .buckets [hash_code ]
51+ for i , (k , _ ) in enumerate (retrieved_bucket ):
52+ if k == key :
53+ del retrieved_bucket [i ]
54+ self .size -= 1
55+ return
56+
57+ def print_hash (self ):
58+ hashTable = "{"
59+ for i , bucket in enumerate (self .buckets ):
60+ # if bucket: # only add non-empty buckets
61+ hashTable += f" { i } : { bucket } , "
62+ hashTable = hashTable .rstrip (", " ) + " }" # remove last comma
63+ return hashTable
64+
65+
66+ if __name__ == '__main__' :
67+ h = HashTable ()
68+ with open ("stock_prices.csv" , "r" ) as f :
69+ for line in f :
70+ tokens = line .split (',' )
71+ key = tokens [0 ]
72+ value = float (tokens [1 ])
73+ h .insert (key , value )
2274
75+ print (h .capacity )
76+ print (h .size )
77+ h .insert ('march 9' , float (999 ))
78+ h .delete ('march 9' )
79+ print (h .capacity )
80+ print (h .size )
81+ h .insert ('march 1' , float (111 ))
82+ h .insert ('march 2' , float (222 ))
83+ h .insert ('march 3' , float (333 ))
84+ print (h .capacity )
85+ print (h .size )
86+ print (h .print_hash ())
0 commit comments