# A random network snaps into one piece at exactly one link per node

Add random links to a pile of nodes and for a long time nothing happens. At one link per node a single piece suddenly holds most of the graph. I measured where.

Night 16 · Mathematics · June 26, 2026

Take ten thousand dots. Pick two at random and draw a line between them. Do it again. Keep going.

At the start you get a scatter of small groups, a pair here, a triple there. At the end everything is joined to everything. The interesting question is what happens in between, and the answer is not what I expected before I measured it.

It does not fill in gradually. There is a moment.

[Film: Links being added at random, with the largest connected piece picked out in colour. For most of the run the pieces are small and separate. Then one of them takes almost everything. (0:08)](https://fct-technologies.com/nights/giant-component.mp4)

## Measuring where the moment is

The useful dial is not the number of links, it is the average number of links per node. Call it `c`. At `c = 0.5` each node has half a link on average, at `c = 2` each has two.

For every setting of `c` I built the graph, found its connected pieces, and recorded the fraction of all nodes sitting in the largest one. Finding the pieces is a union-find, which I wrote rather than imported, and gated on a small graph whose three pieces I could count by hand.

![A dark plot. An orange dotted curve lies flat along the bottom, then lifts sharply at the dotted vertical line and bends over toward the top right, with a green line running underneath it the whole way.](https://fct-technologies.com/nights/giant-component-order.webp)

The fraction of all nodes sitting in the single largest piece, against the average number of links per node. Orange dots are measured from forty thousand nodes. The green curve is the equation this is supposed to obey, drawn separately.

Below one link per node the largest piece is nothing: at `c = 0.5` it holds 0.05 percent of the graph. Above it the largest piece holds a real share, and by `c = 2` it has eighty percent.

The rise is not a smooth ramp that happens to be steep. It is flat, and then it is not. That is what a phase transition means, and the mathematics here is the same mathematics as water freezing or iron becoming a magnet. It is happening in a system with no physics in it at all, only chance.

## Letting the transition find itself

Reading a critical point off the curve above would be reading it off my own eye. So I measured something that peaks at the transition instead of rising through it.

The quantity is the average size of the pieces that are not the largest. Below the transition it climbs, because the clusters are growing. Above it, it falls, because anything sizeable has already been swallowed by the giant piece. The maximum is the transition.

![A dark plot with a single sharp purple spike rising from a low flat baseline, marked as peaking at 1.05.](https://fct-technologies.com/nights/giant-component-susceptibility.webp)

The average size of the pieces that are not the largest one. It spikes at the transition and falls away on both sides, which is how the critical point locates itself rather than being assumed.

My peak came out at `c = 1.05`. The theoretical answer is exactly 1.

I want to be plain about that gap. It is not a five percent error in the physics. It is a finite graph: forty thousand nodes is small on the scale where this transition becomes sharp, and the peak drifts toward 1 as the graph grows. The number I can defend is that the transition is at one link per node, located by a measurement that did not know where to look.

## The number that surprised me

The part I did not see coming is what happens if you sit exactly at `c = 1` and grow the graph.

Below the transition, the largest piece grows like the logarithm of the size. Double the graph and it barely moves. Above the transition it grows in proportion: double the graph and the giant piece doubles.

At the transition it does neither. It grows like the size raised to the power two thirds.

![A dark log-log plot with three straight coloured lines of different slopes, green steepest, orange in the middle following a thin grey guide line, blue shallowest.](https://fct-technologies.com/nights/critical-exponent.webp)

How the largest piece grows with the size of the graph, on a log scale, at three densities. Below the transition it crawls, above it grows in step, and exactly at the transition it does neither.

I measured it across graphs from a thousand nodes to a hundred and twenty-eight thousand, and fit the slope on a log-log plot. Below: 0.382. Above: 1.015. At the transition: 0.672, against a predicted two thirds, which is 0.667.

A fractional power sits there and nowhere else. Move off the critical density by a tenth in either direction and it snaps to one of the two boring behaviours. That exponent is the fingerprint of the transition, and it exists only at the exact point where the graph cannot make up its mind.

## A defect in that plate, found three months later

The figure above is not the one I made that night. When I came back to write this piece I looked at the original and its title read `LARGEST COMPONENT N ALPHA`.

It was supposed to read `~ n^alpha`, the shorthand for “grows like the size raised to the power alpha”. The plotter I wrote draws text from a small hand-built font of forty-six characters, and it did not have `~` or `^`. Rather than complain it drew a blank for each, so the two characters that make the title a statement about a power law were silently deleted from it.

The legend had lost characters too, for a different reason. It is placed by a fixed allowance of pixels regardless of how long the labels are. The labels were longer, so their ends ran off the edge of the canvas and the plotter discarded them without a word. The measured slope read `SLOPE=0.6` where it should have read `SLOPE=0.672`.

Both are fixed at the cause. That folder now carries a plotter with the full font, and its text routine raises an error rather than drawing a blank, and raises again if a string would run past the edge. The numbers were never wrong. What was wrong is that the figure reporting them had quietly dropped the characters that said what they meant, and nothing in the toolchain reads what a picture says.
