Algorithm Search⌘K

Proofs: Nested dissection

These are the human proofs of Nested dissection, at full length.

Nested dissection returns a permutation, and ordering a separator after the parts it separates creates no fill between those parts full

This proof shows: correctness, termination.

Let G=(V,E)G = (V, E) be the graph of a symmetric pattern with ∣V∣=n|V| = n. Line numbers refer to the pseudocode of the page. For an ordering, f(v)f(v) is the position of vv, and LL is the symbolic Cholesky factor: lij≠0l_{ij} \ne 0 for i>ji > j exactly when the elimination graph model of the fill-in page puts an edge between the vertices numbered ii and jj when jj is eliminated.

Lemma 1 (the level separator). Let WW induce a connected subgraph with a level structure L0,…,LhL_0, \ldots, L_h from a root, h≥2h \ge 2, and let 1≤μ≤h−11 \le \mu \le h - 1. Let SS be the set of vertices of LμL_\mu with a neighbour in Lμ+1L_{\mu+1}. Then S≠∅S \ne \emptyset, and W∖SW \setminus S has no edge between X=L0∪⋯∪Lμ−1∪(Lμ∖S)X = L_0 \cup \cdots \cup L_{\mu-1} \cup (L_\mu \setminus S) and Y=Lμ+1∪⋯∪LhY = L_{\mu+1} \cup \cdots \cup L_h, both of which are nonempty.

Proof. Every vertex of Lμ+1L_{\mu+1} has a neighbour in LμL_\mu (its predecessor in the search), so S≠∅S \ne \emptyset. Edges of a level structure join the same or adjacent levels. An edge from YY to XX would join Lμ+1L_{\mu+1} to Lμ∖SL_\mu \setminus S, which contradicts the definition of SS. L0⊆XL_0 \subseteq X and Lh⊆YL_h \subseteq Y. □\square

The implementation picks μ\mu at the level where the cumulative count first reaches ∣W∣/2|W|/2, clamped to [1,h−1][1, h - 1]. When h<2h < 2 it orders the part by minimum degree instead.

Termination and permutation. Every task on the stack holds a vertex set, and the sets of the tasks on the stack together with the vertices already in the order always partition VV. This holds initially with the single task VV. Each step replaces a split task by one of three things:

  • its components (line L5);
  • its vertices appended to the order (line L6);
  • an emit task for SS and split tasks for the components of W∖SW \setminus S (lines L7 to L9).

An emit task appends its set. So each vertex is appended exactly once, and when the stack is empty, the order is a permutation. A split task on a disconnected set produces strictly smaller tasks. A split task on a connected set either ends at line L6 or, by Lemma 1, produces a nonempty SS and strictly smaller parts. So the multiset of task sizes decreases in the well-founded multiset order, and the loop ends. At most 2n2n split and emit tasks are created.

Lemma 2 (dissection order). When a split task for a set WW is processed with separator SS and parts C1,…,CtC_1, \ldots, C_t, all vertices of C1,…,CtC_1, \ldots, C_t are appended before any vertex of SS. Every neighbour of WW outside WW is appended after all of WW.

Proof. The stack is last in, first out. The emit task for SS is pushed below the split tasks of the parts, so it is popped only after those tasks and everything they push have been processed. For the second claim, induct on the dissection tree. A neighbour of WW outside WW lies in no sibling part, because parts are components after removing the separators. So it lies in the separator of some ancestor task, which by the first claim is appended after all of that ancestor's parts, and WW is inside one of them. Component splits at line L5 have no edges between them. □\square

Theorem 1 (no fill between parts). In the order produced, lij=0l_{ij} = 0 whenever the vertices numbered ii and jj lie in different parts Ca≠CbC_a \ne C_b of the same split.

Proof. By the path theorem of Rose, Tarjan and Lueker (1976), lij≠0l_{ij} \ne 0 for i>ji > j if and only if GG has a path between the two vertices whose interior vertices are all numbered below jj. Take x∈Cax \in C_a and y∈Cby \in C_b, and any path between them in GG. It cannot stay inside Ca∪CbC_a \cup C_b, since these are different components of G[W∖S]G[W \setminus S]. So it contains a vertex of SS or a vertex outside WW. By Lemma 2 such a vertex is numbered after both xx and yy. Hence no path qualifies, and lij=0l_{ij} = 0. □\square

So LL restricted to a split has the block form

PAPT=(A110A1S0A22A2SAS1AS2ASS),L=(L11000L220LS1LS2LSS),P A P^T = \begin{pmatrix} A_{11} & 0 & A_{1S} \\ 0 & A_{22} & A_{2S} \\ A_{S1} & A_{S2} & A_{SS} \end{pmatrix}, \qquad L = \begin{pmatrix} L_{11} & 0 & 0 \\ 0 & L_{22} & 0 \\ L_{S1} & L_{S2} & L_{SS} \end{pmatrix},

where the zero blocks stay zero. The two parts are factored independently, and only the separator block, a dense Schur complement in general, couples them. The tests check Theorem 1 on random geometric graphs.

Theorem 2 (fill and work on the grid; cited). For the k×kk \times k five-point grid, n=k2n = k^2, the cross-shaped nested dissection of George (1973) gives ∣L∣=314k2log⁡2k+O(k2)|L| = \tfrac{31}{4} k^2 \log_2 k + O(k^2) and about 82984k3\tfrac{829}{84} k^3 multiplications, and every ordering has ∣L∣=Ω(k2log⁡k)|L| = \Omega(k^2 \log k) and Ω(k3)\Omega(k^3) work (Hoffman, Martin and Rose, 1973). We do not reproduce these counts.

The recurrence behind the upper bounds is elementary. If F(k)F(k) is the work of a square of side kk whose boundary is already numbered later, then F(k)=4F(k/2)+O(k3)F(k) = 4F(k/2) + O(k^3). The O(k3)O(k^3) term is the dense factorization of a separator block of order O(k)O(k). Hence F(k)=O(k3)F(k) = O(k^3). The same count for storage gives ∣L∣(k)=4∣L∣(k/2)+O(k2)|L|(k) = 4|L|(k/2) + O(k^2), hence O(k2log⁡k)O(k^2 \log k). The tests check both orders of growth with explicit constants for k≤32k \le 32.

Floating point. Theorem 1 is structural and holds for computed factors too, because exact zeros are never updated. Cholesky of PAPTP A P^T, when it runs to completion, satisfies PAPT+ΔA=L^L^TP A P^T + \Delta A = \hat L \hat L^T with ∣ΔA∣≤γn+1∣L^∣∣L^T∣|\Delta A| \le \gamma_{n+1}|\hat L||\hat L^T| (Higham, Theorem 10.3) for every ordering. The tests verify this elementwise with exact rational residuals on grid matrices in nested dissection order.

Back to Nested dissection