How can the shortest traveling salesman tour be found in $O(2^n poly(n))$ time and less than exponential space?
I'm stuck on problem 9.4 from The Nature of Computation which reads:
Dynamic Salesman. A naive search algorithm for TSP takes $O(n!)$ time to check all tours. Use dynamic programming to reduce this to a simple exponential, i.e., to solve TSP in $O(2^npoly(n))$ time. Can you do this without using an exponential amount of memory? Hint: work out Problems 3.31 and 3.32.
The first part is relatively straightforward. Given a graph, a set of previously visited vertices, a start vertex, and a target vertex, go through all neighbors of the start vertex that haven't been visited already and recursively solve the TSP starting from the neighbor. Then add the distance between start and neighbor to each and return the minimum. The base case, which returns $0$, occurs when $start = target$ and all vertices have been visited.
There are $2^n$ possible inputs for the set of previously visited vertices and $n^2$ possibilities for the start and target vertices. Since each call performs $O(n)$ work we get a dynamic programming algorithm with time complexity $O(2^n \cdot n^2 \cdot n) = O(2^npoly(n))$.
The tricky part is the exponential amount of memory, since the cache used by dynamic programming might grow exponentially large. What do the hints suggest? Problem 3.31 asked to solve Hamiltonian Path in $2^npoly(n)$ time, which could be done with the same idea I presented just now.
Problem 3.32 is more promising. It asked to show that the number of Hamiltonian paths from $s$ to $t$ can be computed in $2^npoly(n)$ time and $poly(n)$ space by evaluating the following expression:
$$\sum_{S\subseteq V}(-1)^{|S|}|q(S)|,$$
where $q(S)$ is the set of paths from $s$ to $t$ of length $n-1$ not visiting any vertex in $S$. 180
($|q(S)|$ can be computed relatively easily by iterating the adjacency matrix of $V\setminus S \quad n-1$ times.)
To prove this claim first observe that the number of Hamiltonian paths can be expressed like so:
$$|q(\emptyset)| - |\bigcup_{v_i}q({v_i})|$$
which is the total number of paths minus the number of non-Hamiltonian paths, i.e. the paths not visiting some vertex $v_i$ (all of length $n-1$). Using the inclusion-exclusion-principle the second term can be rewritten as
$$|\bigcup_{v_i}q({v_i})| = -\sum_{S\subseteq V\setminus \emptyset}(-1)^{|S|}|\bigcap_{v_i\in S}q({v_i})|$$
Some further thought will then reveal the equivalence $q(A) \cap q(B) = q(A \cup B)$. (A path that avoids everything in $A$ and everything in $B$ also avoids everything in the union of $A$ and $B$. Similarly a path that avoids everything in $A$ or $B$ also avoids everything in $A$ and everything in $B$.)
With this our expression then becomes
$$|q(\emptyset)| + \sum_{S\subseteq V\setminus \emptyset}(-1)^{|S|}|q(S)| = \sum_{S\subseteq V}(-1)^{|S|}|q(S)|\qquad \Box$$
So how does this help finding the shortest traveling salesman tour? I see two options. Either use the algorithm laid out just now as a subroutine. Or reuse the ideas from the proof.
The first option seems pretty fruitless to me. Any instance of TSP that isn't defined on a fully connected graph can be converted to such an instance by adding in the missing edges with astronomically large weights. Counting the number of Hamiltonian paths on any subset $S$ of such a graph then becomes trivially easy. Every permutation of vertices is a Hamiltonian path so it's $|S|!$. Problem 3.32 seems of absolutely no help then. 180