Generator

Characters read per character of text, against alphabet size

Rendered here at the parameters it defaults to, with every essay that calls it — which is the same list as the blast radius of changing it.
Characters read per character of text, against alphabet sizeA 20,000-character text over an alphabet of the stated size, searched for a pattern of 8 taken from it. The horizontal line at 1.0 is the text's own length: below it an algorithm has found every occurrence without reading everything. Horspool crosses it and the others do not, and where it crosses is decided by the alphabet rather than by the algorithm.one read per text character24816326495alphabet size, m = 8characters read ÷ text length0.01.12.2Naive scanKnuth–Morris–PrattBoyer–Moore–Horspoolone unit = one character comparison · n = 20,000, m = 8Horspool's best here: 0.132 per character

Characters read per character of text, against alphabet size

A 20,000-character text over an alphabet of the stated size, searched for a pattern of 8 taken from it. The horizontal line at 1.0 is the text's own length: below it an algorithm has found every occurrence without reading everything. Horspool crosses it and the others do not, and where it crosses is decided by the alphabet rather than by the algorithm.

Drawn at 700 × 420, wide on the page. Everything above is what matcher-sweep returns with no arguments; the caption is the generator's own, computed from the numbers in the drawing rather than written beside it.

2 essays call matcher-sweep. The drawing above is what it returns with no arguments at all; every call below passes it something, because a placement that passes nothing draws whichever member of the family the generator happens to default to rather than the one its essay argues about — which is what optcheck and figfill exist to catch.

Where it is called

Changing this generator changes every one of these figures.

The library, page 3 of 5 — where matcher-sweep sits