Skip to content

Commit e1e27ca

Browse files
add hash table collision handling using linear probing
1 parent 6aea255 commit e1e27ca

File tree

1 file changed

+202
-7
lines changed

1 file changed

+202
-7
lines changed

data_structures/4_HashTable_2_Collisions/Solutions.ipynb

Lines changed: 202 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -462,13 +462,11 @@
462462
]
463463
},
464464
{
465-
"cell_type": "code",
466-
"execution_count": 36,
467-
"id": "38abc1ec-d1c5-4002-ac83-ca9dd318433d",
465+
"cell_type": "markdown",
466+
"id": "30ac3e92-b786-4954-9db4-bdd786c28822",
468467
"metadata": {},
469-
"outputs": [],
470468
"source": [
471-
"#Implement hash table collision handling using linear probing"
469+
"# Implement hash table collision handling using linear probing"
472470
]
473471
},
474472
{
@@ -681,11 +679,208 @@
681679
},
682680
{
683681
"cell_type": "code",
684-
"execution_count": null,
682+
"execution_count": 85,
685683
"id": "bddee77e-9c11-47f6-aa9f-a344a61305d7",
686684
"metadata": {},
687685
"outputs": [],
688-
"source": []
686+
"source": [
687+
"class HashTableLP:\n",
688+
" def __init__(self, num_of_rows):\n",
689+
" self.num_of_rows = num_of_rows\n",
690+
" self.arr = [None for _ in range(self.num_of_rows)]\n",
691+
" \n",
692+
" def get_hash(self, key):\n",
693+
" sum_h = 0\n",
694+
" for el in key:\n",
695+
" sum_h += ord(el)\n",
696+
" mod = sum_h % self.num_of_rows\n",
697+
" return mod \n",
698+
" \n",
699+
" def __getitem__(self, key):\n",
700+
" h = self.get_hash(key)\n",
701+
" if self.arr[h][0] == key:\n",
702+
" return self.arr[h][1]\n",
703+
" else:\n",
704+
" while self.arr[h][0] != key:\n",
705+
" h += 1\n",
706+
" h %= self.num_of_rows\n",
707+
" return self.arr[h][1] \n",
708+
" \n",
709+
" def __setitem__(self, key, value):\n",
710+
" h = self.get_hash(key)\n",
711+
" if self.arr[h] is None:\n",
712+
" self.arr[h] = (key, value)\n",
713+
" else:\n",
714+
" while self.arr[h] is not None:\n",
715+
" h += 1\n",
716+
" h %= self.num_of_rows\n",
717+
" self.arr[h] = (key, value) \n",
718+
" \n",
719+
" def __delitem__(self, key):\n",
720+
" h = self.get_hash(key)\n",
721+
" if self.arr[h][0] == key:\n",
722+
" del self.arr[h]\n",
723+
" else:\n",
724+
" while self.arr[h][0] != key:\n",
725+
" h += 1\n",
726+
" h %= self.num_of_rows\n",
727+
" del self.arr[h]"
728+
]
729+
},
730+
{
731+
"cell_type": "code",
732+
"execution_count": 86,
733+
"id": "48dc4747-5393-480d-9d70-ae0f0ea0b6ae",
734+
"metadata": {},
735+
"outputs": [],
736+
"source": [
737+
"htlp = HashTableLP(10)"
738+
]
739+
},
740+
{
741+
"cell_type": "code",
742+
"execution_count": 87,
743+
"id": "8d04333a-3c8b-474c-b2e9-6cf7955eb263",
744+
"metadata": {},
745+
"outputs": [],
746+
"source": [
747+
"htlp[\"march 6\"] = 120\n",
748+
"htlp[\"march 8\"] = 67\n",
749+
"htlp[\"march 9\"] = 4\n",
750+
"htlp[\"march 17\"] = 459"
751+
]
752+
},
753+
{
754+
"cell_type": "code",
755+
"execution_count": 89,
756+
"id": "95b5f8f7-36ef-479e-82db-f5befcea4933",
757+
"metadata": {},
758+
"outputs": [
759+
{
760+
"data": {
761+
"text/plain": [
762+
"9"
763+
]
764+
},
765+
"execution_count": 89,
766+
"metadata": {},
767+
"output_type": "execute_result"
768+
}
769+
],
770+
"source": [
771+
"htlp.get_hash(\"march 6\")"
772+
]
773+
},
774+
{
775+
"cell_type": "code",
776+
"execution_count": 90,
777+
"id": "cc705fae-bcf6-4908-b686-639baa43e098",
778+
"metadata": {},
779+
"outputs": [
780+
{
781+
"data": {
782+
"text/plain": [
783+
"9"
784+
]
785+
},
786+
"execution_count": 90,
787+
"metadata": {},
788+
"output_type": "execute_result"
789+
}
790+
],
791+
"source": [
792+
"htlp.get_hash(\"march 17\")"
793+
]
794+
},
795+
{
796+
"cell_type": "code",
797+
"execution_count": 88,
798+
"id": "f92b0165-f200-4f1f-bd2d-0750595e1206",
799+
"metadata": {},
800+
"outputs": [
801+
{
802+
"data": {
803+
"text/plain": [
804+
"[('march 17', 459),\n",
805+
" ('march 8', 67),\n",
806+
" ('march 9', 4),\n",
807+
" None,\n",
808+
" None,\n",
809+
" None,\n",
810+
" None,\n",
811+
" None,\n",
812+
" None,\n",
813+
" ('march 6', 120)]"
814+
]
815+
},
816+
"execution_count": 88,
817+
"metadata": {},
818+
"output_type": "execute_result"
819+
}
820+
],
821+
"source": [
822+
"htlp.arr"
823+
]
824+
},
825+
{
826+
"cell_type": "code",
827+
"execution_count": 92,
828+
"id": "e11ed292-8a92-44f9-899c-a9b670653849",
829+
"metadata": {},
830+
"outputs": [
831+
{
832+
"data": {
833+
"text/plain": [
834+
"4"
835+
]
836+
},
837+
"execution_count": 92,
838+
"metadata": {},
839+
"output_type": "execute_result"
840+
}
841+
],
842+
"source": [
843+
"htlp[\"march 9\"]"
844+
]
845+
},
846+
{
847+
"cell_type": "code",
848+
"execution_count": 93,
849+
"id": "57ab0444-dd72-4964-b60c-e833190f3733",
850+
"metadata": {},
851+
"outputs": [],
852+
"source": [
853+
"del htlp[\"march 8\"]"
854+
]
855+
},
856+
{
857+
"cell_type": "code",
858+
"execution_count": 94,
859+
"id": "6d3d67c4-536a-47aa-854f-45235b67ea67",
860+
"metadata": {},
861+
"outputs": [
862+
{
863+
"data": {
864+
"text/plain": [
865+
"[('march 17', 459),\n",
866+
" ('march 9', 4),\n",
867+
" None,\n",
868+
" None,\n",
869+
" None,\n",
870+
" None,\n",
871+
" None,\n",
872+
" None,\n",
873+
" ('march 6', 120)]"
874+
]
875+
},
876+
"execution_count": 94,
877+
"metadata": {},
878+
"output_type": "execute_result"
879+
}
880+
],
881+
"source": [
882+
"htlp.arr"
883+
]
689884
}
690885
],
691886
"metadata": {

0 commit comments

Comments
 (0)