Skip to content

Commit 230a939

Browse files
hash_map implementation
1 parent a26a914 commit 230a939

File tree

1 file changed

+118
-52
lines changed

1 file changed

+118
-52
lines changed

data_structures/4_HashTable_2_Collisions/4_hash_table_collision_handling.ipynb

Lines changed: 118 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -110,51 +110,79 @@
110110
},
111111
{
112112
"cell_type": "code",
113-
"execution_count": 86,
113+
"execution_count": 70,
114114
"metadata": {},
115115
"outputs": [],
116116
"source": [
117-
"class HashTable: \n",
118-
" def __init__(self):\n",
119-
" self.MAX = 10\n",
120-
" self.arr = [[] for i in range(self.MAX)]\n",
121-
" \n",
117+
"class HashTable(object):\n",
118+
" def __init__(self, max_item:int=10) -> None:\n",
119+
" super().__init__()\n",
120+
" self.max_item = max_item\n",
121+
" self.arr = [[] for _ in range(self.max_item)]\n",
122+
" \n",
122123
" def get_hash(self, key):\n",
123124
" hash = 0\n",
124125
" for char in key:\n",
125126
" hash += ord(char)\n",
126-
" return hash % self.MAX\n",
127+
" return hash % self.max_item\n",
128+
"\n",
129+
" def __setitem__(self, key, val):\n",
130+
" hash_value = self.get_hash(key)\n",
131+
" if self.arr[hash_value] == []:\n",
132+
" self.arr[hash_value].append([key,val])\n",
133+
" print(f\"added new entry for {key}\")\n",
134+
" else:\n",
135+
" found = False\n",
136+
" for item in self.arr[hash_value]:\n",
137+
" if item[0] == key:\n",
138+
" print(f\"replacing value for key {key}\")\n",
139+
" item[1] = val\n",
140+
" found = True\n",
141+
" if not found:\n",
142+
" self.arr[hash_value].append([key,val])\n",
143+
" print(f\"appended new entry for {key}\")\n",
127144
" \n",
128145
" def __getitem__(self, key):\n",
129-
" arr_index = self.get_hash(key)\n",
130-
" for kv in self.arr[arr_index]:\n",
131-
" if kv[0] == key:\n",
132-
" return kv[1]\n",
133-
" \n",
134-
" def __setitem__(self, key, val):\n",
135-
" h = self.get_hash(key)\n",
136-
" found = False\n",
137-
" for idx, element in enumerate(self.arr[h]):\n",
138-
" if len(element)==2 and element[0] == key:\n",
139-
" self.arr[h][idx] = (key,val)\n",
140-
" found = True\n",
141-
" if not found:\n",
142-
" self.arr[h].append((key,val))\n",
143-
" \n",
146+
" hash_value = self.get_hash(key)\n",
147+
" if len(self.arr[hash_value]) == 1:\n",
148+
" return self.arr[hash_value][0][1]\n",
149+
" else:\n",
150+
" for item in self.arr[hash_value]:\n",
151+
" if item[0] == key:\n",
152+
" return item[1]\n",
153+
" \n",
144154
" def __delitem__(self, key):\n",
145-
" arr_index = self.get_hash(key)\n",
146-
" for index, kv in enumerate(self.arr[arr_index]):\n",
147-
" if kv[0] == key:\n",
148-
" print(\"del\",index)\n",
149-
" del self.arr[arr_index][index]\n",
150-
" "
155+
" print(\"inside delete function\")\n",
156+
" hash_value = self.get_hash(key)\n",
157+
" print(hash_value)\n",
158+
" if len(self.arr[hash_value]) == 1:\n",
159+
" f\"replacing the value for key {key} with empty list\"\n",
160+
" self.arr[hash_value] = []\n",
161+
" else:\n",
162+
" for item in self.arr[hash_value]:\n",
163+
" print(f\"item: {item}, key: {key}\")\n",
164+
" if item[0] == key:\n",
165+
" f\"setting the value for key {key} with empty list\"\n",
166+
" item = []\n",
167+
" "
151168
]
152169
},
153170
{
154171
"cell_type": "code",
155-
"execution_count": 87,
172+
"execution_count": 71,
156173
"metadata": {},
157-
"outputs": [],
174+
"outputs": [
175+
{
176+
"name": "stdout",
177+
"output_type": "stream",
178+
"text": [
179+
"added new entry for march 6\n",
180+
"added new entry for march 7\n",
181+
"added new entry for march 8\n",
182+
"appended new entry for march 17\n"
183+
]
184+
}
185+
],
158186
"source": [
159187
"t = HashTable()\n",
160188
"t[\"march 6\"] = 310\n",
@@ -165,7 +193,7 @@
165193
},
166194
{
167195
"cell_type": "code",
168-
"execution_count": 88,
196+
"execution_count": 72,
169197
"metadata": {
170198
"scrolled": true
171199
},
@@ -176,7 +204,7 @@
176204
"310"
177205
]
178206
},
179-
"execution_count": 88,
207+
"execution_count": 72,
180208
"metadata": {},
181209
"output_type": "execute_result"
182210
}
@@ -187,7 +215,7 @@
187215
},
188216
{
189217
"cell_type": "code",
190-
"execution_count": 89,
218+
"execution_count": 73,
191219
"metadata": {
192220
"scrolled": true
193221
},
@@ -198,7 +226,7 @@
198226
"63457"
199227
]
200228
},
201-
"execution_count": 89,
229+
"execution_count": 73,
202230
"metadata": {},
203231
"output_type": "execute_result"
204232
}
@@ -209,25 +237,25 @@
209237
},
210238
{
211239
"cell_type": "code",
212-
"execution_count": 90,
240+
"execution_count": 74,
213241
"metadata": {},
214242
"outputs": [
215243
{
216244
"data": {
217245
"text/plain": [
218-
"[[('march 7', 420)],\n",
219-
" [('march 8', 67)],\n",
246+
"[[['march 7', 420]],\n",
247+
" [['march 8', 67]],\n",
220248
" [],\n",
221249
" [],\n",
222250
" [],\n",
223251
" [],\n",
224252
" [],\n",
225253
" [],\n",
226254
" [],\n",
227-
" [('march 6', 310), ('march 17', 63457)]]"
255+
" [['march 6', 310], ['march 17', 63457]]]"
228256
]
229257
},
230-
"execution_count": 90,
258+
"execution_count": 74,
231259
"metadata": {},
232260
"output_type": "execute_result"
233261
}
@@ -238,36 +266,44 @@
238266
},
239267
{
240268
"cell_type": "code",
241-
"execution_count": 91,
269+
"execution_count": 75,
242270
"metadata": {
243271
"scrolled": true
244272
},
245-
"outputs": [],
273+
"outputs": [
274+
{
275+
"name": "stdout",
276+
"output_type": "stream",
277+
"text": [
278+
"replacing value for key march 6\n"
279+
]
280+
}
281+
],
246282
"source": [
247283
"t[\"march 6\"] = 11"
248284
]
249285
},
250286
{
251287
"cell_type": "code",
252-
"execution_count": 92,
288+
"execution_count": 76,
253289
"metadata": {},
254290
"outputs": [
255291
{
256292
"data": {
257293
"text/plain": [
258-
"[[('march 7', 420)],\n",
259-
" [('march 8', 67)],\n",
294+
"[[['march 7', 420]],\n",
295+
" [['march 8', 67]],\n",
260296
" [],\n",
261297
" [],\n",
262298
" [],\n",
263299
" [],\n",
264300
" [],\n",
265301
" [],\n",
266302
" [],\n",
267-
" [('march 6', 11), ('march 17', 63457)]]"
303+
" [['march 6', 11], ['march 17', 63457]]]"
268304
]
269305
},
270-
"execution_count": 92,
306+
"execution_count": 76,
271307
"metadata": {},
272308
"output_type": "execute_result"
273309
}
@@ -278,16 +314,16 @@
278314
},
279315
{
280316
"cell_type": "code",
281-
"execution_count": 68,
317+
"execution_count": 77,
282318
"metadata": {},
283319
"outputs": [
284320
{
285321
"data": {
286322
"text/plain": [
287-
"310"
323+
"11"
288324
]
289325
},
290-
"execution_count": 68,
326+
"execution_count": 77,
291327
"metadata": {},
292328
"output_type": "execute_result"
293329
}
@@ -298,20 +334,50 @@
298334
},
299335
{
300336
"cell_type": "code",
301-
"execution_count": 48,
337+
"execution_count": 78,
302338
"metadata": {},
303339
"outputs": [
304340
{
305341
"name": "stdout",
306342
"output_type": "stream",
307343
"text": [
308-
"del 0\n"
344+
"inside delete function\n",
345+
"9\n",
346+
"item: ['march 6', 11], key: march 6\n",
347+
"item: ['march 17', 63457], key: march 6\n"
309348
]
310349
}
311350
],
312351
"source": [
313352
"del t[\"march 6\"]"
314353
]
354+
},
355+
{
356+
"cell_type": "code",
357+
"execution_count": 79,
358+
"metadata": {},
359+
"outputs": [
360+
{
361+
"data": {
362+
"text/plain": [
363+
"11"
364+
]
365+
},
366+
"execution_count": 79,
367+
"metadata": {},
368+
"output_type": "execute_result"
369+
}
370+
],
371+
"source": [
372+
"t[\"march 6\"]"
373+
]
374+
},
375+
{
376+
"cell_type": "code",
377+
"execution_count": null,
378+
"metadata": {},
379+
"outputs": [],
380+
"source": []
315381
}
316382
],
317383
"metadata": {
@@ -330,7 +396,7 @@
330396
"name": "python",
331397
"nbconvert_exporter": "python",
332398
"pygments_lexer": "ipython3",
333-
"version": "3.7.3"
399+
"version": "3.10.14"
334400
}
335401
},
336402
"nbformat": 4,

0 commit comments

Comments
 (0)