a visual representation is created (middle), which in turn is used to permute the matrix to recursive Bordered Block Diagonal form (right).[]{data-label="fig:vmoprocess"}](ford2_layout_small "fig:"){height="3.4cm"}     ![The matrices `twotone` (top) and `ford2` (bottom). For the original matrix (left), a visual representation is created (middle), which in turn is used to permute the matrix to recursive Bordered Block Diagonal form (right).[]{data-label="fig:vmoprocess"}](ford2_permute "fig:"){width="3.6cm"}
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hypergraphs {#sec:hypergraphs}
-----------

We will start with a brief introduction to hypergraphs (see [@Berge1976] for more information) and the ways in which they can be related to sparse matrices.

\[def:hypergraph\] A *hypergraph* is a pair $G = (V, E)$ where $V$ is a set, the *vertices* of the hypergraph $G$, and $E$ a collection of subsets of $V$ (so for all $e \in E$, $e \subseteq V$), the *hyperedges* or *nets* of $G$ (see ). We call a hypergraph $G = (V, E)$ *weighted* when it is paired with functions $w : V \rightarrow [0, \infty[$ and $c : E \rightarrow [0, \infty[$ which assign *weights* $w(v) \geq 0$ and *costs* $c(e) \geq 0$ to vertices $v \in V$ and hyperedges $e \in E$, respectively. We call a hypergraph $G = (V, E)$ simply a *graph* if all hyperedges 