# Decomposing the search problem into several small problems

I am looking for papers/methods (or at least problem examples) where the original search problem $P$ can be solved by either:

1. Searching through the original graph. or
2. By decomposing it into several subset of problems $P_1,P_2, \dots,P_n$.

Ideally $sol(P )=sol(P_1)\cup sol(P_2)\cup \ldots \cup(P_n)$ with no preprocessing (i.e the union of the subproblems correspond directly to the solution of the problem).

I have no constraint; though prefer the underlying graph to be a DAG and the problem to be a reachability problem. Google seems to fail on finding such papers.

• Finding a minimum spanning forest for a disconnected graph? I'm not sure this question is concise enough that the answers will be of much use to you. Jan 17, 2014 at 19:05
• @G.Bach thanks. Suspect it to be far from what I want… cannot tell now.. I will look into it deeply and come back. Jan 17, 2014 at 19:21

Consider the $k$-path problem: given a graph $G$ and an integer $k$, is there a simple path of length $k$ in $G$? To solve $k$-path, it suffices to find two paths of length $k/2$ and a vertex $v$ s.t. the paths only intersect in $v$. In general, such algorithms are known as "meet in the middle", or "split and list". Basically, split the problem into two or more parts, enumerate all possible solutions for the smaller parts, and finally combine them to a solution.

Horowitz and Sahni give the classical example for subset-sum (given a list of $n$ integers, is there a sublist whose elements sum up to $0$?). First, split the list into two parts of length $n/2$. For both parts, enumerate all possible $2^{n/2}$ sums. Using sorting and binary search, check if there are two sublists that sum up to zero. In general, such an algorithm gives you a halved exponential dependence on the input size. There are some more examples of this too, for starters you could check out [1].

Also, to add to D.W.'s answer, divide-and-conquer also seems to satisfy your requirements. More specifically, look into graph decompositions. A classical one is the Lipton-Tarjan planar separator theorem, which leads to efficient divide-and-conquer algorithms on planar graphs. There are plenty of other separator theorems and decompositions out there too. One that you see often for directed graphs is a modular decomposition.

[1] Fomin, Fedor V., and Dieter Kratsch. Exact exponential algorithms. Springer, 2010.

The term you are looking for is "divide-and-conquer". There are gazillions of divide-and-conquer algorithms; any algorithm textbook should show you quite a few examples. Divide-and-conquer is more general, because it also allows you to do some merger operation to combine the solutions to each piece -- but many divide-and-conquer algorithms do follow the form you are looking for, so I think "divide-and-conquer" should be a helpful search term.

In graphs, one common use of divide-and-conquer is to decompose the graph into connected components or strongly connected components, and then work on each component separately. In many cases, no pre-processing or post-processing to glue together the solutions is needed: you just take a union of the solution for each component.

• While divide and conquer type situations certainly give us that equality seteropere is asking for, I don't think it's what he is looking for. Another situation that fulfills his conditions would be TSP: an optimal route decomposes into optimal routes for the induced subgraphs (if we partition the vertices in the order determined by the optimal route), but TSP is not divide-and-conquerable (that we know). If we know a "right" decomposition for the whole graph into subgraphs, we could use the optimal routes of the subgraphs to build an optimal route for the whole graph. Jan 18, 2014 at 0:43
{"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 1, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0}