| Dynamic Programming Algorithm Notice that if we consider the path (in order): and the path The cost of going from vertex 1 to vertex 2 to vertex 3 remains the same, so why must it be recalculated? This result can be saved for later use. Let dp[bitmask][vertex] represent the minimum cost of travelling through all the vertices whose corresponding bit in bitmask is set to 1 ending at vertex. For example: Since 12 represents 1100 in binary, dp[12][2] represents going through vertices 2 and 3 in the graph with the path ending at vertex 2. Thus we can have the following algorithm (C++ implementation): This line may be a little confusing, so lets go through it slowly: Here, bitmask | (1 << i) sets the ith bit of bitmask to 1, which represents that the ith vertex has been visited. The i after the comma represents the new pos in that function call, which represents the new "last" vertex. cost[pos][i] is to add the cost of travelling from vertex pos to vertex i. Thus, this line is to update the value of cost to the minimum possible value of travelling to every other vertex that has not been visited yet. Time Complexity The function TSP(bitmask,pos) has 2^N values for bitmask and N values for pos. Each function takes O(N) time to run (the for loop). Thus this implementation takes O(N^2 * 2^N) time to output the exact answer. The Travelling Salesman Problem is the problem of finding the minimum cost of travelling through N vertices exactly once per vertex. There is a cost cost[i][j] to travel from vertex i to vertex j. There are 2 types of algorithms to solve this problem:
Exact Algorithms and Approximation Algorithms Exact Algorithms - Brute Force Algorithm
- Dynamic Programming Algorithm
Approximation Algorithms To be added |