diff --git a/lecture_material/09-Graph-Search-1/solution.ipynb b/lecture_material/09-Graph-Search-1/solution.ipynb index 8b53eb9cc198a5cab6fbb78e62c916b883c98c18..0e38c5c8ff069703626e8bd8a20e861600be29be 100644 --- a/lecture_material/09-Graph-Search-1/solution.ipynb +++ b/lecture_material/09-Graph-Search-1/solution.ipynb @@ -304,107 +304,107 @@ "name": "stdout", "output_type": "stream", "text": [ - "17\n", - " 13 (ROOT)\n", - "\t 1 (LEFT)\n", - "\t\t 0 (LEFT)\n", - "\t\t 10 (RIGHT)\n", + "11\n", + " 21 (ROOT)\n", + "\t 13 (LEFT)\n", + "\t\t 8 (LEFT)\n", "\t\t\t 6 (LEFT)\n", - "\t\t\t\t 3 (LEFT)\n", + "\t\t\t\t 4 (LEFT)\n", "\t\t\t\t\t 2 (LEFT)\n", - "\t\t\t\t\t 4 (RIGHT)\n", - "\t\t\t\t\t\t 5 (RIGHT)\n", - "\t\t\t\t 9 (RIGHT)\n", - "\t\t\t\t\t 8 (LEFT)\n", - "\t\t\t\t\t\t 7 (LEFT)\n", - "\t\t\t 12 (RIGHT)\n", - "\t\t\t\t 11 (LEFT)\n", - "\t 67 (RIGHT)\n", - "\t\t 52 (LEFT)\n", + "\t\t\t\t\t\t 0 (LEFT)\n", + "\t\t\t\t\t\t\t 1 (RIGHT)\n", + "\t\t\t\t\t\t 3 (RIGHT)\n", + "\t\t\t\t\t 5 (RIGHT)\n", + "\t\t\t\t 7 (RIGHT)\n", + "\t\t\t 10 (RIGHT)\n", + "\t\t\t\t 9 (LEFT)\n", + "\t\t\t\t 11 (RIGHT)\n", + "\t\t\t\t\t 12 (RIGHT)\n", + "\t\t 16 (RIGHT)\n", + "\t\t\t 14 (LEFT)\n", + "\t\t\t\t 15 (RIGHT)\n", + "\t\t\t 20 (RIGHT)\n", + "\t\t\t\t 19 (LEFT)\n", + "\t\t\t\t\t 17 (LEFT)\n", + "\t\t\t\t\t\t 18 (RIGHT)\n", + "\t 45 (RIGHT)\n", + "\t\t 34 (LEFT)\n", + "\t\t\t 32 (LEFT)\n", + "\t\t\t\t 28 (LEFT)\n", + "\t\t\t\t\t 27 (LEFT)\n", + "\t\t\t\t\t\t 22 (LEFT)\n", + "\t\t\t\t\t\t\t 25 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 24 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t 23 (LEFT)\n", + "\t\t\t\t\t\t\t\t 26 (RIGHT)\n", + "\t\t\t\t\t 30 (RIGHT)\n", + "\t\t\t\t\t\t 29 (LEFT)\n", + "\t\t\t\t\t\t 31 (RIGHT)\n", + "\t\t\t\t 33 (RIGHT)\n", + "\t\t\t 38 (RIGHT)\n", + "\t\t\t\t 37 (LEFT)\n", + "\t\t\t\t\t 36 (LEFT)\n", + "\t\t\t\t\t\t 35 (LEFT)\n", + "\t\t\t\t 44 (RIGHT)\n", + "\t\t\t\t\t 43 (LEFT)\n", + "\t\t\t\t\t\t 42 (LEFT)\n", + "\t\t\t\t\t\t\t 39 (LEFT)\n", + "\t\t\t\t\t\t\t\t 41 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t 40 (LEFT)\n", + "\t\t 60 (RIGHT)\n", "\t\t\t 50 (LEFT)\n", - "\t\t\t\t 18 (LEFT)\n", - "\t\t\t\t\t 16 (LEFT)\n", - "\t\t\t\t\t\t 15 (LEFT)\n", - "\t\t\t\t\t\t\t 14 (LEFT)\n", - "\t\t\t\t\t\t 17 (RIGHT)\n", - "\t\t\t\t\t 22 (RIGHT)\n", - "\t\t\t\t\t\t 21 (LEFT)\n", - "\t\t\t\t\t\t\t 20 (LEFT)\n", - "\t\t\t\t\t\t\t\t 19 (LEFT)\n", + "\t\t\t\t 46 (LEFT)\n", + "\t\t\t\t\t 48 (RIGHT)\n", + "\t\t\t\t\t\t 47 (LEFT)\n", "\t\t\t\t\t\t 49 (RIGHT)\n", - "\t\t\t\t\t\t\t 23 (LEFT)\n", - "\t\t\t\t\t\t\t\t 39 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t 35 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t 31 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 24 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t 25 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t 27 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t 26 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t 28 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 30 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 29 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 32 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t 33 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t 34 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t 37 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 36 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 38 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t 41 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t 40 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t 44 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 43 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t 42 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t 47 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t 46 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t\t 45 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t\t\t 48 (RIGHT)\n", - "\t\t\t\t 51 (RIGHT)\n", - "\t\t\t 55 (RIGHT)\n", - "\t\t\t\t 54 (LEFT)\n", - "\t\t\t\t\t 53 (LEFT)\n", - "\t\t\t\t 58 (RIGHT)\n", - "\t\t\t\t\t 56 (LEFT)\n", - "\t\t\t\t\t\t 57 (RIGHT)\n", - "\t\t\t\t\t 60 (RIGHT)\n", - "\t\t\t\t\t\t 59 (LEFT)\n", - "\t\t\t\t\t\t 62 (RIGHT)\n", - "\t\t\t\t\t\t\t 61 (LEFT)\n", - "\t\t\t\t\t\t\t 63 (RIGHT)\n", - "\t\t\t\t\t\t\t\t 66 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t 64 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t\t 65 (RIGHT)\n", - "\t\t 82 (RIGHT)\n", - "\t\t\t 80 (LEFT)\n", - "\t\t\t\t 69 (LEFT)\n", - "\t\t\t\t\t 68 (LEFT)\n", - "\t\t\t\t\t 79 (RIGHT)\n", - "\t\t\t\t\t\t 74 (LEFT)\n", - "\t\t\t\t\t\t\t 73 (LEFT)\n", - "\t\t\t\t\t\t\t\t 71 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t 70 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t 72 (RIGHT)\n", - "\t\t\t\t\t\t\t 75 (RIGHT)\n", - "\t\t\t\t\t\t\t\t 77 (RIGHT)\n", - "\t\t\t\t\t\t\t\t\t 76 (LEFT)\n", - "\t\t\t\t\t\t\t\t\t 78 (RIGHT)\n", - "\t\t\t\t 81 (RIGHT)\n", - "\t\t\t 94 (RIGHT)\n", - "\t\t\t\t 83 (LEFT)\n", - "\t\t\t\t\t 88 (RIGHT)\n", - "\t\t\t\t\t\t 85 (LEFT)\n", - "\t\t\t\t\t\t\t 84 (LEFT)\n", - "\t\t\t\t\t\t\t 86 (RIGHT)\n", - "\t\t\t\t\t\t\t\t 87 (RIGHT)\n", - "\t\t\t\t\t\t 91 (RIGHT)\n", - "\t\t\t\t\t\t\t 90 (LEFT)\n", - "\t\t\t\t\t\t\t\t 89 (LEFT)\n", - "\t\t\t\t\t\t\t 92 (RIGHT)\n", + "\t\t\t\t 52 (RIGHT)\n", + "\t\t\t\t\t 51 (LEFT)\n", + "\t\t\t\t\t 53 (RIGHT)\n", + "\t\t\t\t\t\t 56 (RIGHT)\n", + "\t\t\t\t\t\t\t 54 (LEFT)\n", + "\t\t\t\t\t\t\t\t 55 (RIGHT)\n", + "\t\t\t\t\t\t\t 57 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 58 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t 59 (RIGHT)\n", + "\t\t\t 74 (RIGHT)\n", + "\t\t\t\t 66 (LEFT)\n", + "\t\t\t\t\t 65 (LEFT)\n", + "\t\t\t\t\t\t 64 (LEFT)\n", + "\t\t\t\t\t\t\t 62 (LEFT)\n", + "\t\t\t\t\t\t\t\t 61 (LEFT)\n", + "\t\t\t\t\t\t\t\t 63 (RIGHT)\n", + "\t\t\t\t\t 72 (RIGHT)\n", + "\t\t\t\t\t\t 67 (LEFT)\n", + "\t\t\t\t\t\t\t 71 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 68 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t 69 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t\t 70 (RIGHT)\n", + "\t\t\t\t\t\t 73 (RIGHT)\n", + "\t\t\t\t 78 (RIGHT)\n", + "\t\t\t\t\t 75 (LEFT)\n", + "\t\t\t\t\t\t 76 (RIGHT)\n", + "\t\t\t\t\t\t\t 77 (RIGHT)\n", + "\t\t\t\t\t 91 (RIGHT)\n", + "\t\t\t\t\t\t 84 (LEFT)\n", + "\t\t\t\t\t\t\t 81 (LEFT)\n", + "\t\t\t\t\t\t\t\t 79 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t 80 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 82 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t 83 (RIGHT)\n", + "\t\t\t\t\t\t\t 88 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 87 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t 85 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t\t 86 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 89 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t 90 (RIGHT)\n", + "\t\t\t\t\t\t 94 (RIGHT)\n", + "\t\t\t\t\t\t\t 92 (LEFT)\n", "\t\t\t\t\t\t\t\t 93 (RIGHT)\n", - "\t\t\t\t 97 (RIGHT)\n", - "\t\t\t\t\t 95 (LEFT)\n", - "\t\t\t\t\t\t 96 (RIGHT)\n", - "\t\t\t\t\t 99 (RIGHT)\n", - "\t\t\t\t\t\t 98 (LEFT)\n" + "\t\t\t\t\t\t\t 97 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 95 (LEFT)\n", + "\t\t\t\t\t\t\t\t\t 96 (RIGHT)\n", + "\t\t\t\t\t\t\t\t 98 (RIGHT)\n", + "\t\t\t\t\t\t\t\t\t 99 (RIGHT)\n" ] } ], @@ -703,7 +703,7 @@ "</svg>\n" ], "text/plain": [ - "<__main__.Graph at 0x7f875c333b80>" + "<__main__.Graph at 0x7ff53065d420>" ] }, "execution_count": 14, @@ -744,6 +744,18 @@ " g.edge(n, child.name)\n", " return g._repr_image_svg_xml()\n", " \n", + " def dfs_search_v1(self, src_name, dst_name):\n", + " \"\"\"\n", + " Clears the visited set and invokes dfs_search using Node object instance\n", + " with name src_name.\n", + " \"\"\"\n", + " # Q: is this method recursive?\n", + " # A: no, it is just invoking dfs_search method for Node object instance\n", + " # dfs_search method in Node class is recursive\n", + " # These methods in two different classes just happen to share the same name\n", + " self.visited.clear()\n", + " return self.nodes[src_name].dfs_search_v1(self.nodes[dst_name])\n", + "\n", " def dfs_search(self, src_name, dst_name):\n", " \"\"\"\n", " Clears the visited set and invokes dfs_search using Node object instance\n", @@ -814,7 +826,7 @@ "id": "c83e9993-765c-42a0-97f6-6277627acf95", "metadata": {}, "source": [ - "### Testcases for DFS" + "### Testcases for DFS with True/False" ] }, { @@ -827,14 +839,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "None\n", - "(B, C, D)\n" + "False\n", + "True\n" ] } ], "source": [ - "print(g.dfs_search(\"B\", \"A\")) # should return False\n", - "print(g.dfs_search(\"B\", \"D\")) # should return True" + "print(g.dfs_search_v1(\"B\", \"A\")) # should return False\n", + "print(g.dfs_search_v1(\"B\", \"D\")) # should return True" ] }, { @@ -877,6 +889,127 @@ "print(g.dfs_search(\"B\", \"D\")) # should return (B, C, D)" ] }, + { + "cell_type": "markdown", + "id": "a54b6599", + "metadata": {}, + "source": [ + "### `tuple` review\n", + "\n", + "- similar to lists, but immutable\n", + "- defined using `()`\n", + "- `*` operator represents replication and not multiplication for lists and tuples\n", + "- `+` operator represents concatenation and not additional for lists and tuples" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "7da7bccc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5,)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(3+2,) # this is a tuple containing 5" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "b05a563a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(3+2) # order precedence" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "778a76d7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5, 5, 5)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# replicates item 5 three times and returns a new tuple\n", + "(3+2,) * 3" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "b8cc1b36", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(3+2) * 3 # gives us 15" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "a9e31d22", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 5)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# returns a new tuple containing all items in the first tuple and \n", + "# the second tuple\n", + "(3, ) + (5, )" + ] + }, { "cell_type": "markdown", "id": "43c566a5", @@ -904,7 +1037,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "id": "4480be3c", "metadata": {}, "outputs": [ @@ -986,10 +1119,10 @@ "</svg>\n" ], "text/plain": [ - "<__main__.Graph at 0x7f87581aead0>" + "<__main__.Graph at 0x7ff5306d9f00>" ] }, - "execution_count": 18, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1001,7 +1134,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 24, "id": "9467f6cf", "metadata": {}, "outputs": [ @@ -1018,127 +1151,6 @@ "print(g.dfs_search(\"A\", \"E\")) # should return (A, B, C, D, E)\n", "print(g.dfs_search(\"E\", \"A\")) # should return None" ] - }, - { - "cell_type": "markdown", - "id": "a54b6599", - "metadata": {}, - "source": [ - "### `tuple` review\n", - "\n", - "- similar to lists, but immutable\n", - "- defined using `()`\n", - "- `*` operator represents replication and not multiplication for lists and tuples\n", - "- `+` operator represents concatenation and not additional for lists and tuples" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "7da7bccc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5,)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(3+2,) # this is a tuple containing 5" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "b05a563a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(3+2) # order precedence" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "778a76d7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5, 5, 5)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# replicates item 5 three times and returns a new tuple\n", - "(3+2,) * 3" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "b8cc1b36", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(3+2) * 3 # gives us 15" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "a9e31d22", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(3, 5)" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# returns a new tuple containing all items in the first tuple and \n", - "# the second tuple\n", - "(3, ) + (5, )" - ] } ], "metadata": { diff --git a/lecture_material/09-Graph-Search-1/template_lec_001.ipynb b/lecture_material/09-Graph-Search-1/template_lec_001.ipynb index 9d56986e71a14c5968cb232bc04a85ba8ac0ea3d..1ccdeba7b60d705c997e2378fa70f2c2717bbf56 100644 --- a/lecture_material/09-Graph-Search-1/template_lec_001.ipynb +++ b/lecture_material/09-Graph-Search-1/template_lec_001.ipynb @@ -486,7 +486,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ab522b80", + "id": "d2b5e4a3", "metadata": {}, "outputs": [], "source": [ @@ -496,7 +496,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6cfbd94e", + "id": "c5d9affc", "metadata": {}, "outputs": [], "source": [ @@ -506,7 +506,7 @@ }, { "cell_type": "markdown", - "id": "ec42d30a", + "id": "da658c4d", "metadata": {}, "source": [ "### Testcases for DFS" @@ -515,7 +515,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b42891f0", + "id": "32d1fa4f", "metadata": {}, "outputs": [], "source": [ @@ -525,7 +525,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e8a47ce4", + "id": "a9dfbc1e", "metadata": {}, "outputs": [], "source": [ @@ -535,115 +535,115 @@ }, { "cell_type": "markdown", - "id": "9e72414d", + "id": "f521b9da", "metadata": {}, "source": [ - "### DFS search\n", + "### `tuple` review\n", "\n", - "- return the actual path rather than just returning True / False\n", - "- for example, path between B and D should be (B, C, D)" + "- similar to lists, but immutable\n", + "- `*` operator represents replication and not multiplication for lists and tuples\n", + "- `+` operator represents concatenation and not additional for lists and tuples" ] }, { - "cell_type": "markdown", - "id": "dd6ea22f", + "cell_type": "code", + "execution_count": null, + "id": "6802d98e", "metadata": {}, + "outputs": [], "source": [ - "### Why is it called \"*Depth* First Search\"?\n", - "\n", - "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n", - "- we need a `Stack` data structure:\n", - " - Last-In-First-Out (LIFO)\n", - "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n", - "- might not give us the shortest possible path" + "# this is a tuple containing 5\n", + "(3+2,)" ] }, { "cell_type": "code", "execution_count": null, - "id": "80171185", + "id": "696d0755", "metadata": {}, "outputs": [], "source": [ - "g = example(2)\n", - "g" + "(3+2) # order precedence" ] }, { "cell_type": "code", "execution_count": null, - "id": "e429ba1d", + "id": "3046fe4a", "metadata": {}, "outputs": [], "source": [ - "print(g.dfs_search(\"A\", \"E\")) # should return\n", - "print(g.dfs_search(\"E\", \"A\")) # should return " + "# replicates item 5 three times and returns a new tuple\n", + "(3+2,) * 3" ] }, { - "cell_type": "markdown", - "id": "0b4f0cce", + "cell_type": "code", + "execution_count": null, + "id": "aed44ea1", "metadata": {}, + "outputs": [], "source": [ - "### `tuple` review\n", - "\n", - "- similar to lists, but immutable\n", - "- `*` operator represents replication and not multiplication for lists and tuples\n", - "- `+` operator represents concatenation and not additional for lists and tuples" + "(3+2) * 3 # gives us 15" ] }, { "cell_type": "code", "execution_count": null, - "id": "39abbaa1", + "id": "d8806544", "metadata": {}, "outputs": [], "source": [ - "# this is a tuple containing 5\n", - "(3+2,)" + "# returns a new tuple containing all items in the first tuple and \n", + "# the second tuple\n", + "(3, ) + (5, )" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "78b4949d", + "cell_type": "markdown", + "id": "9aabb4fb", "metadata": {}, - "outputs": [], "source": [ - "(3+2) # order precedence" + "### DFS search\n", + "\n", + "- return the actual path rather than just returning True / False\n", + "- for example, path between B and D should be (B, C, D)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "67c0dafe", + "cell_type": "markdown", + "id": "eb9a6595", "metadata": {}, - "outputs": [], "source": [ - "# replicates item 5 three times and returns a new tuple\n", - "(3+2,) * 3" + "### Why is it called \"*Depth* First Search\"?\n", + "\n", + "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n", + "- we need a `Stack` data structure:\n", + " - Last-In-First-Out (LIFO)\n", + "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n", + "- might not give us the shortest possible path" ] }, { "cell_type": "code", "execution_count": null, - "id": "e2fca58d", + "id": "c934d86d", "metadata": {}, "outputs": [], "source": [ - "(3+2) * 3 # gives us 15" + "g = example(2)\n", + "g" ] }, { "cell_type": "code", "execution_count": null, - "id": "221b772b", + "id": "8c8dc14a", "metadata": {}, "outputs": [], "source": [ - "# returns a new tuple containing all items in the first tuple and \n", - "# the second tuple\n", - "(3, ) + (5, )" + "print(g.dfs_search(\"A\", \"E\")) # should return\n", + "print(g.dfs_search(\"E\", \"A\")) # should return " ] } ], diff --git a/lecture_material/09-Graph-Search-1/template_lec_002.ipynb b/lecture_material/09-Graph-Search-1/template_lec_002.ipynb index f2b336b1944116e50898a826f6bc679b27b30887..1ccdeba7b60d705c997e2378fa70f2c2717bbf56 100644 --- a/lecture_material/09-Graph-Search-1/template_lec_002.ipynb +++ b/lecture_material/09-Graph-Search-1/template_lec_002.ipynb @@ -535,115 +535,115 @@ }, { "cell_type": "markdown", - "id": "9aabb4fb", + "id": "f521b9da", "metadata": {}, "source": [ - "### DFS search\n", + "### `tuple` review\n", "\n", - "- return the actual path rather than just returning True / False\n", - "- for example, path between B and D should be (B, C, D)" + "- similar to lists, but immutable\n", + "- `*` operator represents replication and not multiplication for lists and tuples\n", + "- `+` operator represents concatenation and not additional for lists and tuples" ] }, { - "cell_type": "markdown", - "id": "eb9a6595", + "cell_type": "code", + "execution_count": null, + "id": "6802d98e", "metadata": {}, + "outputs": [], "source": [ - "### Why is it called \"*Depth* First Search\"?\n", - "\n", - "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n", - "- we need a `Stack` data structure:\n", - " - Last-In-First-Out (LIFO)\n", - "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n", - "- might not give us the shortest possible path" + "# this is a tuple containing 5\n", + "(3+2,)" ] }, { "cell_type": "code", "execution_count": null, - "id": "c934d86d", + "id": "696d0755", "metadata": {}, "outputs": [], "source": [ - "g = example(2)\n", - "g" + "(3+2) # order precedence" ] }, { "cell_type": "code", "execution_count": null, - "id": "8c8dc14a", + "id": "3046fe4a", "metadata": {}, "outputs": [], "source": [ - "print(g.dfs_search(\"A\", \"E\")) # should return\n", - "print(g.dfs_search(\"E\", \"A\")) # should return " + "# replicates item 5 three times and returns a new tuple\n", + "(3+2,) * 3" ] }, { - "cell_type": "markdown", - "id": "f521b9da", + "cell_type": "code", + "execution_count": null, + "id": "aed44ea1", "metadata": {}, + "outputs": [], "source": [ - "### `tuple` review\n", - "\n", - "- similar to lists, but immutable\n", - "- `*` operator represents replication and not multiplication for lists and tuples\n", - "- `+` operator represents concatenation and not additional for lists and tuples" + "(3+2) * 3 # gives us 15" ] }, { "cell_type": "code", "execution_count": null, - "id": "6802d98e", + "id": "d8806544", "metadata": {}, "outputs": [], "source": [ - "# this is a tuple containing 5\n", - "(3+2,)" + "# returns a new tuple containing all items in the first tuple and \n", + "# the second tuple\n", + "(3, ) + (5, )" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "696d0755", + "cell_type": "markdown", + "id": "9aabb4fb", "metadata": {}, - "outputs": [], "source": [ - "(3+2) # order precedence" + "### DFS search\n", + "\n", + "- return the actual path rather than just returning True / False\n", + "- for example, path between B and D should be (B, C, D)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "3046fe4a", + "cell_type": "markdown", + "id": "eb9a6595", "metadata": {}, - "outputs": [], "source": [ - "# replicates item 5 three times and returns a new tuple\n", - "(3+2,) * 3" + "### Why is it called \"*Depth* First Search\"?\n", + "\n", + "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n", + "- we need a `Stack` data structure:\n", + " - Last-In-First-Out (LIFO)\n", + "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n", + "- might not give us the shortest possible path" ] }, { "cell_type": "code", "execution_count": null, - "id": "aed44ea1", + "id": "c934d86d", "metadata": {}, "outputs": [], "source": [ - "(3+2) * 3 # gives us 15" + "g = example(2)\n", + "g" ] }, { "cell_type": "code", "execution_count": null, - "id": "d8806544", + "id": "8c8dc14a", "metadata": {}, "outputs": [], "source": [ - "# returns a new tuple containing all items in the first tuple and \n", - "# the second tuple\n", - "(3, ) + (5, )" + "print(g.dfs_search(\"A\", \"E\")) # should return\n", + "print(g.dfs_search(\"E\", \"A\")) # should return " ] } ],