{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $A$ be a real symmetric [[positive definite|0KX66CZMBB]] $n \\times n$ [[sparse matrix|JGACZYEEY7]].\nLet $G$ be its [[graph|00C0BR7D7H]]: the vertices are $1, \\dots, n$, and $i \\ne j$ are adjacent when $a_{ij} \\ne 0$.\nTo *eliminate* a vertex $v$ of a graph means to join every two neighbours of $v$ by an edge and then to delete $v$.\nFor an ordering $v_1, \\dots, v_n$ of the vertices, let $G_0 = G$ and let $G_k$ be the graph obtained from $G_{k-1}$ by eliminating $v_k$.\n\n1. Let $P$ be the permutation matrix of the ordering, and let $L$ be the [[Cholesky factor|0WKG8CYY6A]] of $P A P^T$. If no numerical cancellation occurs, then for $i \u003e j$ the entry $l_{ij}$ is nonzero exactly when $v_i$ and $v_j$ are adjacent in $G_{j-1}$.\n2. The *minimum degree algorithm* builds the ordering greedily: for $k = 1, \\dots, n$, it takes for $v_k$ a vertex of least [[degree|0KS0KRDV4Y]] in $G_{k-1}$.\n\n## Remarks\n\nClause 1 holds because one step of symmetric [[Gaussian elimination|0JVJ2WCXZH]] with pivot $v$ subtracts a multiple of the row of $v$ from the row of each neighbour of $v$.\nThat update creates a nonzero at every pair of neighbours of $v$, which is exactly the set of edges added when $v$ is eliminated.\nThe new nonzeros are called *fill-in*.\nA vertex of degree $d$ creates at most $d(d-1)/2$ new edges when it is eliminated, so the greedy rule tries to keep the fill small.\nExample: take the star graph with centre $1$ and leaves $2, \\dots, n$.\nEliminating the centre first fills the whole matrix.\nEliminating the leaves first, each of degree $1$, creates no fill at all.\nThe rule is a heuristic and need not give an ordering of least fill; finding an ordering of least fill is NP-hard.\nPractical codes, such as approximate minimum degree, use quotient graphs and degree bounds to run fast.\n\n## Explanations\n\n### L1 human\n\nSolving a large sparse linear system by elimination can turn many zeros into nonzeros, which costs memory and time.\nThe order in which the unknowns are eliminated decides how much of this fill appears.\nThe minimum degree algorithm always eliminates next the unknown that is linked to the fewest others.\nIt is a simple greedy rule that works well in practice.\n\n### L2 human\n\nThe graph model turns a question about matrices into a question about graphs, and it predicts the sparsity of the Cholesky factor before any arithmetic.\nMinimum degree is one of the standard fill-reducing orderings, together with [[nested dissection|9DTJ87P4R1]] and bandwidth-reducing orderings such as [[Cuthill–McKee|1X0E3JHCH9]].\nIt works well on irregular problems, while nested dissection has better guarantees on grid-like and planar problems.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "JGACZYEEY7",
      "0WKG8CYY6A"
    ],
    "kind": "statement",
    "msc": [
      "65F50",
      "65F05",
      "05C85"
    ],
    "name": "Minimum degree algorithm",
    "role": "fact",
    "same_as": {
      "wikidata": "Q17098969",
      "wikipedia": "Minimum degree algorithm"
    },
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Minimum_degree_algorithm"
      }
    ],
    "tag": "4135XQ4WHK",
    "uses": [
      "0KX66CZMBB",
      "JGACZYEEY7",
      "0WKG8CYY6A",
      "00C0BR7D7H",
      "0KS0KRDV4Y",
      "0JVJ2WCXZH",
      "9DTJ87P4R1",
      "1X0E3JHCH9"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/4135XQ4WHK/",
  "links": [
    {
      "field": "about",
      "target": "JGACZYEEY7"
    },
    {
      "field": "about",
      "target": "0WKG8CYY6A"
    },
    {
      "field": "uses",
      "target": "0KX66CZMBB"
    },
    {
      "field": "uses",
      "target": "JGACZYEEY7"
    },
    {
      "field": "uses",
      "target": "0WKG8CYY6A"
    },
    {
      "field": "uses",
      "target": "00C0BR7D7H"
    },
    {
      "field": "uses",
      "target": "0KS0KRDV4Y"
    },
    {
      "field": "uses",
      "target": "0JVJ2WCXZH"
    },
    {
      "field": "uses",
      "target": "9DTJ87P4R1"
    },
    {
      "field": "uses",
      "target": "1X0E3JHCH9"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/4135XQ4WHK.md",
  "msc": [
    "65F50",
    "65F05",
    "05C85"
  ],
  "name": "Minimum degree algorithm",
  "prov": null,
  "role": "fact",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/413/4135XQ4WHK.md",
  "status": null,
  "tag": "4135XQ4WHK",
  "uri": "m2://4135XQ4WHK",
  "url": "https://tamnd.github.io/math2/wiki/minimum-degree-algorithm/",
  "writing": {
    "tag": "4135XQ4WHK",
    "kind": "statement",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
