|
110 | 110 | },
|
111 | 111 | {
|
112 | 112 | "cell_type": "code",
|
113 |
| - "execution_count": 86, |
| 113 | + "execution_count": 70, |
114 | 114 | "metadata": {},
|
115 | 115 | "outputs": [],
|
116 | 116 | "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", |
122 | 123 | " def get_hash(self, key):\n",
|
123 | 124 | " hash = 0\n",
|
124 | 125 | " for char in key:\n",
|
125 | 126 | " 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", |
127 | 144 | " \n",
|
128 | 145 | " 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", |
144 | 154 | " 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 | + " " |
151 | 168 | ]
|
152 | 169 | },
|
153 | 170 | {
|
154 | 171 | "cell_type": "code",
|
155 |
| - "execution_count": 87, |
| 172 | + "execution_count": 71, |
156 | 173 | "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 | + ], |
158 | 186 | "source": [
|
159 | 187 | "t = HashTable()\n",
|
160 | 188 | "t[\"march 6\"] = 310\n",
|
|
165 | 193 | },
|
166 | 194 | {
|
167 | 195 | "cell_type": "code",
|
168 |
| - "execution_count": 88, |
| 196 | + "execution_count": 72, |
169 | 197 | "metadata": {
|
170 | 198 | "scrolled": true
|
171 | 199 | },
|
|
176 | 204 | "310"
|
177 | 205 | ]
|
178 | 206 | },
|
179 |
| - "execution_count": 88, |
| 207 | + "execution_count": 72, |
180 | 208 | "metadata": {},
|
181 | 209 | "output_type": "execute_result"
|
182 | 210 | }
|
|
187 | 215 | },
|
188 | 216 | {
|
189 | 217 | "cell_type": "code",
|
190 |
| - "execution_count": 89, |
| 218 | + "execution_count": 73, |
191 | 219 | "metadata": {
|
192 | 220 | "scrolled": true
|
193 | 221 | },
|
|
198 | 226 | "63457"
|
199 | 227 | ]
|
200 | 228 | },
|
201 |
| - "execution_count": 89, |
| 229 | + "execution_count": 73, |
202 | 230 | "metadata": {},
|
203 | 231 | "output_type": "execute_result"
|
204 | 232 | }
|
|
209 | 237 | },
|
210 | 238 | {
|
211 | 239 | "cell_type": "code",
|
212 |
| - "execution_count": 90, |
| 240 | + "execution_count": 74, |
213 | 241 | "metadata": {},
|
214 | 242 | "outputs": [
|
215 | 243 | {
|
216 | 244 | "data": {
|
217 | 245 | "text/plain": [
|
218 |
| - "[[('march 7', 420)],\n", |
219 |
| - " [('march 8', 67)],\n", |
| 246 | + "[[['march 7', 420]],\n", |
| 247 | + " [['march 8', 67]],\n", |
220 | 248 | " [],\n",
|
221 | 249 | " [],\n",
|
222 | 250 | " [],\n",
|
223 | 251 | " [],\n",
|
224 | 252 | " [],\n",
|
225 | 253 | " [],\n",
|
226 | 254 | " [],\n",
|
227 |
| - " [('march 6', 310), ('march 17', 63457)]]" |
| 255 | + " [['march 6', 310], ['march 17', 63457]]]" |
228 | 256 | ]
|
229 | 257 | },
|
230 |
| - "execution_count": 90, |
| 258 | + "execution_count": 74, |
231 | 259 | "metadata": {},
|
232 | 260 | "output_type": "execute_result"
|
233 | 261 | }
|
|
238 | 266 | },
|
239 | 267 | {
|
240 | 268 | "cell_type": "code",
|
241 |
| - "execution_count": 91, |
| 269 | + "execution_count": 75, |
242 | 270 | "metadata": {
|
243 | 271 | "scrolled": true
|
244 | 272 | },
|
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 | + ], |
246 | 282 | "source": [
|
247 | 283 | "t[\"march 6\"] = 11"
|
248 | 284 | ]
|
249 | 285 | },
|
250 | 286 | {
|
251 | 287 | "cell_type": "code",
|
252 |
| - "execution_count": 92, |
| 288 | + "execution_count": 76, |
253 | 289 | "metadata": {},
|
254 | 290 | "outputs": [
|
255 | 291 | {
|
256 | 292 | "data": {
|
257 | 293 | "text/plain": [
|
258 |
| - "[[('march 7', 420)],\n", |
259 |
| - " [('march 8', 67)],\n", |
| 294 | + "[[['march 7', 420]],\n", |
| 295 | + " [['march 8', 67]],\n", |
260 | 296 | " [],\n",
|
261 | 297 | " [],\n",
|
262 | 298 | " [],\n",
|
263 | 299 | " [],\n",
|
264 | 300 | " [],\n",
|
265 | 301 | " [],\n",
|
266 | 302 | " [],\n",
|
267 |
| - " [('march 6', 11), ('march 17', 63457)]]" |
| 303 | + " [['march 6', 11], ['march 17', 63457]]]" |
268 | 304 | ]
|
269 | 305 | },
|
270 |
| - "execution_count": 92, |
| 306 | + "execution_count": 76, |
271 | 307 | "metadata": {},
|
272 | 308 | "output_type": "execute_result"
|
273 | 309 | }
|
|
278 | 314 | },
|
279 | 315 | {
|
280 | 316 | "cell_type": "code",
|
281 |
| - "execution_count": 68, |
| 317 | + "execution_count": 77, |
282 | 318 | "metadata": {},
|
283 | 319 | "outputs": [
|
284 | 320 | {
|
285 | 321 | "data": {
|
286 | 322 | "text/plain": [
|
287 |
| - "310" |
| 323 | + "11" |
288 | 324 | ]
|
289 | 325 | },
|
290 |
| - "execution_count": 68, |
| 326 | + "execution_count": 77, |
291 | 327 | "metadata": {},
|
292 | 328 | "output_type": "execute_result"
|
293 | 329 | }
|
|
298 | 334 | },
|
299 | 335 | {
|
300 | 336 | "cell_type": "code",
|
301 |
| - "execution_count": 48, |
| 337 | + "execution_count": 78, |
302 | 338 | "metadata": {},
|
303 | 339 | "outputs": [
|
304 | 340 | {
|
305 | 341 | "name": "stdout",
|
306 | 342 | "output_type": "stream",
|
307 | 343 | "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" |
309 | 348 | ]
|
310 | 349 | }
|
311 | 350 | ],
|
312 | 351 | "source": [
|
313 | 352 | "del t[\"march 6\"]"
|
314 | 353 | ]
|
| 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": [] |
315 | 381 | }
|
316 | 382 | ],
|
317 | 383 | "metadata": {
|
|
330 | 396 | "name": "python",
|
331 | 397 | "nbconvert_exporter": "python",
|
332 | 398 | "pygments_lexer": "ipython3",
|
333 |
| - "version": "3.7.3" |
| 399 | + "version": "3.10.14" |
334 | 400 | }
|
335 | 401 | },
|
336 | 402 | "nbformat": 4,
|
|
0 commit comments