{"id":34510,"date":"2024-11-01T09:28:48","date_gmt":"2024-11-01T09:28:48","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34510"},"modified":"2024-11-01T11:40:58","modified_gmt":"2024-11-01T11:40:58","slug":"javascript-coding-test-course-solving-the-traveling-salesman-problem","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34510\/","title":{"rendered":"JavaScript Coding Test Course, Solving the Traveling Salesman Problem"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this tutorial, we will cover one of the frequently asked problems in coding tests, the <strong>Traveling Salesman Problem (TSP)<\/strong>. This problem helps to understand important concepts in graphs and dynamic programming.<\/p>\n<h2>1. Problem Description<\/h2>\n<p>The Traveling Salesman Problem is the problem of finding the minimum cost path that visits all given cities once and returns to the starting city. This problem is typically represented by a distance matrix that provides the cost of moving between cities, and the salesman must visit all cities exactly once.<\/p>\n<h2>2. Mathematical Representation of the Problem<\/h2>\n<p>Let the number of cities be represented as <strong>N<\/strong>. The distance matrix between cities is defined in the form of <code>cost[i][j]<\/code>. Here, <code>cost[i][j]<\/code> represents the cost of moving from city <code>i<\/code> to city <code>j<\/code>. The path that the salesman must take can be expressed as follows:<\/p>\n<pre>\nmin(cost[0][1] + cost[1][2] + ... + cost[N-1][0])\n<\/pre>\n<h2>3. Approach to Solve the Problem<\/h2>\n<p>Since the Traveling Salesman Problem is NP-hard, the time complexity is very high for solving it using brute force. Therefore, we can solve the problem more efficiently using <strong>dynamic programming<\/strong>.<\/p>\n<p>To solve this problem using a dynamic programming approach, we will use bit masking. Bit masking helps to easily check the visiting status by representing each city as a bit. Let&#8217;s approach the problem using the following algorithmic steps.<\/p>\n<h3>3.1 State Representation through Bit Masking<\/h3>\n<p>We represent the state of visited cities as a bitmask. For example, if there are 4 cities:<\/p>\n<ul>\n<li>0000: No city visited<\/li>\n<li>0001: City 0 visited<\/li>\n<li>0010: City 1 visited<\/li>\n<li>0011: Cities 0 and 1 visited<\/li>\n<li>&#8230;All combinations can be expressed in this way.<\/li>\n<\/ul>\n<h3>3.2 Definition of the Dynamic Programming Table<\/h3>\n<p>The DP table <code>dp[mask][i]<\/code> stores the minimum cost of visiting the cities corresponding to <code>mask<\/code> and starting from city <code>i<\/code>. In the initial state, <code>mask<\/code> is set to 1, and all other states are initialized to infinity (INFINITY).<\/p>\n<h2>4. Algorithm Implementation<\/h2>\n<p>Now, let&#8217;s implement the algorithm we wrote in JavaScript.<\/p>\n<pre>\nfunction tsp(cost) {\n    const N = cost.length;\n    const INF = Number.MAX_SAFE_INTEGER;\n    const dp = new Array(1 << N).fill(null).map(() => new Array(N).fill(INF));\n    \n    \/\/ Starting point\n    dp[1][0] = 0;\n\n    for (let mask = 0; mask < (1 << N); mask++) {\n        for (let u = 0; u < N; u++) {\n            if (dp[mask][u] === INF) continue; \/\/ Skip if u is not visited\n\n            \/\/ Visit all other cities not in the current mask\n            for (let v = 0; v < N; v++) {\n                if (mask &#038; (1 << v)) continue; \/\/ Skip if v is already visited\n\n                const nextMask = mask | (1 << v);\n                dp[nextMask][v] = Math.min(dp[nextMask][v], dp[mask][u] + cost[u][v]);\n            }\n        }\n    }\n\n    let ans = INF;\n    for (let i = 1; i < N; i++) {\n        ans = Math.min(ans, dp[(1 << N) - 1][i] + cost[i][0]);\n    }\n\n    return ans;\n}\n<\/pre>\n<h2>5. Time Complexity<\/h2>\n<p>The time complexity of this algorithm is <code>O(N^2 * 2^N)<\/code>. Since the method of representing states through bit masking and the process of updating the DP table are combined, significant computation time is required as the number of cities increases. Therefore, this algorithm is only practical when N is less than or equal to 20.<\/p>\n<h2>6. Testing and Examples<\/h2>\n<p>Now, let's provide some examples to test the algorithm. Below is the cost matrix between cities:<\/p>\n<pre>\nconst costMatrix = [\n    [0, 10, 15, 20],\n    [10, 0, 35, 25],\n    [15, 35, 0, 30],\n    [20, 25, 30, 0]\n];\nconsole.log(tsp(costMatrix)); \/\/ Expected output: 80\n<\/pre>\n<h2>7. Conclusion<\/h2>\n<p>By dealing with the Traveling Salesman Problem, we gained an understanding of the pathfinding techniques using dynamic programming and bit masking. This problem may seem like a simple route-finding problem, but it is an important algorithmic problem that can be applied in various fields, such as route optimization for internet companies.<\/p>\n<p>I hope this tutorial has been helpful in solving algorithmic problems using JavaScript, and I encourage you to solve more problems through additional practice. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this tutorial, we will cover one of the frequently asked problems in coding tests, the Traveling Salesman Problem (TSP). This problem helps to understand important concepts in graphs and dynamic programming. 1. Problem Description The Traveling Salesman Problem is the problem of finding the minimum cost path that visits all given cities once &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34510\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;JavaScript 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":[141],"tags":[],"class_list":["post-34510","post","type-post","status-publish","format-standard","hentry","category-javascript-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript 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\/34510\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Coding Test Course, Solving the Traveling Salesman Problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this tutorial, we will cover one of the frequently asked problems in coding tests, the Traveling Salesman Problem (TSP). This problem helps to understand important concepts in graphs and dynamic programming. 1. Problem Description The Traveling Salesman Problem is the problem of finding the minimum cost path that visits all given cities once &hellip; \ub354 \ubcf4\uae30 &quot;JavaScript Coding Test Course, Solving the Traveling Salesman Problem&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34510\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:28:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:40:58+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=\"2\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"JavaScript Coding Test Course, Solving the Traveling Salesman Problem\",\"datePublished\":\"2024-11-01T09:28:48+00:00\",\"dateModified\":\"2024-11-01T11:40:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/\"},\"wordCount\":458,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Javascript Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34510\/\",\"name\":\"JavaScript 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:28:48+00:00\",\"dateModified\":\"2024-11-01T11:40:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34510\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34510\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript 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":"JavaScript 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\/34510\/","og_locale":"ko_KR","og_type":"article","og_title":"JavaScript Coding Test Course, Solving the Traveling Salesman Problem - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this tutorial, we will cover one of the frequently asked problems in coding tests, the Traveling Salesman Problem (TSP). This problem helps to understand important concepts in graphs and dynamic programming. 1. Problem Description The Traveling Salesman Problem is the problem of finding the minimum cost path that visits all given cities once &hellip; \ub354 \ubcf4\uae30 \"JavaScript Coding Test Course, Solving the Traveling Salesman Problem\"","og_url":"https:\/\/atmokpo.com\/w\/34510\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:28:48+00:00","article_modified_time":"2024-11-01T11:40:58+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":"2\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34510\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34510\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"JavaScript Coding Test Course, Solving the Traveling Salesman Problem","datePublished":"2024-11-01T09:28:48+00:00","dateModified":"2024-11-01T11:40:58+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34510\/"},"wordCount":458,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Javascript Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34510\/","url":"https:\/\/atmokpo.com\/w\/34510\/","name":"JavaScript 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:28:48+00:00","dateModified":"2024-11-01T11:40:58+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34510\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34510\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34510\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"JavaScript 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\/34510","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=34510"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34510\/revisions"}],"predecessor-version":[{"id":34511,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34510\/revisions\/34511"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}