{"id":33720,"date":"2024-11-01T09:19:38","date_gmt":"2024-11-01T09:19:38","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33720"},"modified":"2024-11-01T11:46:59","modified_gmt":"2024-11-01T11:46:59","slug":"python-coding-test-course-solving-the-traveling-salesman-problem","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33720\/","title":{"rendered":"python coding test course, solving the traveling salesman problem"},"content":{"rendered":"<p><body><\/p>\n<p>Hello, everyone! In this lecture, we will explore in detail how to implement an algorithm to solve the <strong>Traveling Salesman Problem (TSP)<\/strong>. The TSP is about finding the path that visits all given cities at the minimum cost and then returns to the starting city. This problem is one of the classic combinatorial optimization problems and has various approaches.<\/p>\n<h2>1. Problem Description<\/h2>\n<p>Given N cities and the movement cost between each pair of cities, the goal is to find a minimum cost path that visits each city exactly once and returns to the starting city. We will use the following input and output format to solve this problem.<\/p>\n<h3>Input<\/h3>\n<ul>\n<li>The first line contains the number of cities N (1 \u2264 N \u2264 10).<\/li>\n<li>From the second line onward, an N x N adjacency matrix is given, where the value in the i-th row and j-th column of the matrix represents the cost to move from city i to city j. If movement between two cities is impossible, the cost is 0.<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<ul>\n<li>Output the minimum cost to visit all cities and return to the starting city.<\/li>\n<\/ul>\n<h2>2. Problem Solving Process<\/h2>\n<p>There are various algorithms to solve this problem, but here we will describe an approach using <strong>DFS (Depth-First Search)<\/strong> and <strong>Memoization<\/strong>. The following are the steps to solve the problem.<\/p>\n<h3>Step 1: Understand the Problem<\/h3>\n<p>To solve the TSP problem, all possible paths need to be explored. While a complete search can calculate the minimum cost by considering all possibilities, the number of combinations increases exponentially as the number of cities increases, hence an efficient method is required.<\/p>\n<h3>Step 2: Record Visited Cities with Bitmask<\/h3>\n<p>You can use a bitmask to record whether each city has been visited. For instance, with four cities, you can represent each city as a bit, creating combinations from 0b0000 to 0b1111. This method makes it easy to check whether a city has been visited or not.<\/p>\n<h3>Step 3: Implement DFS and Memoization<\/h3>\n<p>Using DFS to explore all paths while calculating costs, we will employ memoization techniques to store already calculated paths to avoid redundant calculations. Below is the Python code implementing this:<\/p>\n<pre><code>from sys import maxsize\n\ndef tsp(curr_city, visited, n, cost_matrix, memo):\n    if visited == (1 &lt;&lt; n) - 1:  # All cities visited\n        return cost_matrix[curr_city][0] or maxsize  # Return to starting city or maxsize if not possible\n\n    if memo[curr_city][visited] != -1:\n        return memo[curr_city][visited]  # Return already computed cost\n\n    min_cost = maxsize\n    for city in range(n):\n        if visited &amp; (1 &lt;&lt; city) == 0:  # City not visited\n            new_cost = cost_matrix[curr_city][city] + tsp(city, visited | (1 &lt;&lt; city), n, cost_matrix, memo)\n            min_cost = min(min_cost, new_cost)\n\n    memo[curr_city][visited] = min_cost\n    return min_cost\n\ndef solve_tsp(n, cost_matrix):\n    memo = [[-1] * (1 &lt;&lt; n) for _ in range(n)]\n    return tsp(0, 1, n, cost_matrix, memo)  # Start from city 0 with only city 0 visited\n\n# Example usage\nif __name__ == \"__main__\":\n    n = 4  # Number of cities\n    cost_matrix = [\n        [0, 10, 15, 20],\n        [10, 0, 35, 25],\n        [15, 35, 0, 30],\n        [20, 25, 30, 0]\n    ]\n    result = solve_tsp(n, cost_matrix)\n    print(f\"Minimum cost: {result}\")\n    <\/code><\/pre>\n<h3>Step 4: Code Explanation<\/h3>\n<p>The code above consists of the following main functions:<\/p>\n<ul>\n<li><code>tsp(curr_city, visited, n, cost_matrix, memo)<\/code>: Takes the current city, a bitmask of visited cities, the number of cities, the cost matrix, and a list for memoization to calculate the minimum cost.<\/li>\n<li><code>solve_tsp(n, cost_matrix)<\/code>: Initializes the memoization list and performs the TSP function.<\/li>\n<\/ul>\n<h3>Step 5: Time Complexity Analysis<\/h3>\n<p>The time complexity of the above algorithm is <code>O(n^2 * 2^n)<\/code>. Here, <code>n<\/code> is the number of cities, and <code>2^n<\/code> is the number of combinations of all bitmasks. Thus, as the number of cities increases, the amount of computation can increase dramatically, so in practice, the number of cities is limited to no more than 10.<\/p>\n<h2>3. Conclusion<\/h2>\n<p>In this lecture, we explored the concepts and algorithm implementation methods for the Traveling Salesman Problem (TSP). The TSP problem is a good example to utilize various problem-solving techniques and helps cultivate thinking that can be applied to other algorithmic problems through deep understanding.<\/p>\n<p>If you encounter a TSP-related problem in a coding test, it would be beneficial to approach it as discussed above. Now, I encourage you to practice more so you can solve this problem independently. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello, everyone! In this lecture, we will explore in detail how to implement an algorithm to solve the Traveling Salesman Problem (TSP). The TSP is about finding the path that visits all given cities at the minimum cost and then returns to the starting city. This problem is one of the classic combinatorial optimization problems &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33720\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;python coding test course, solving the traveling salesman problem&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[145],"tags":[],"class_list":["post-33720","post","type-post","status-publish","format-standard","hentry","category-python-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/33720\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello, everyone! In this lecture, we will explore in detail how to implement an algorithm to solve the Traveling Salesman Problem (TSP). The TSP is about finding the path that visits all given cities at the minimum cost and then returns to the starting city. This problem is one of the classic combinatorial optimization problems &hellip; \ub354 \ubcf4\uae30 &quot;python coding test course, solving the traveling salesman problem&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33720\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:19:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:46:59+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"python coding test course, solving the traveling salesman problem\",\"datePublished\":\"2024-11-01T09:19:38+00:00\",\"dateModified\":\"2024-11-01T11:46:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/\"},\"wordCount\":539,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Python Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33720\/\",\"name\":\"python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:19:38+00:00\",\"dateModified\":\"2024-11-01T11:46:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33720\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33720\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"python coding test course, solving the traveling salesman problem\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/33720\/","og_locale":"ko_KR","og_type":"article","og_title":"python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello, everyone! In this lecture, we will explore in detail how to implement an algorithm to solve the Traveling Salesman Problem (TSP). The TSP is about finding the path that visits all given cities at the minimum cost and then returns to the starting city. This problem is one of the classic combinatorial optimization problems &hellip; \ub354 \ubcf4\uae30 \"python coding test course, solving the traveling salesman problem\"","og_url":"https:\/\/atmokpo.com\/w\/33720\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:19:38+00:00","article_modified_time":"2024-11-01T11:46:59+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33720\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33720\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"python coding test course, solving the traveling salesman problem","datePublished":"2024-11-01T09:19:38+00:00","dateModified":"2024-11-01T11:46:59+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33720\/"},"wordCount":539,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Python Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33720\/","url":"https:\/\/atmokpo.com\/w\/33720\/","name":"python coding test course, solving the traveling salesman problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:19:38+00:00","dateModified":"2024-11-01T11:46:59+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33720\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33720\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33720\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"python coding test course, solving the traveling salesman problem"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=33720"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33720\/revisions"}],"predecessor-version":[{"id":33721,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33720\/revisions\/33721"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}