@@ -5,18 +5,82 @@ def __init__(self):
5
5
self .buckets = [[] for _ in range (self .capacity )]
6
6
7
7
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
10
13
11
14
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 , _ )
13
23
14
24
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
16
39
17
40
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
19
47
20
48
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 )
22
74
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