What a bound is
What O-notation does not say
What asymptotic notation actually claims, the difference between O, Θ and Ω, why an O(n log n) algorithm can lose to an O(n²) one at every size anyone will ever run, and the four things the notation deliberately throws away.
The constant the notation drops
How the constant factor in a complexity class is measured rather than estimated, why six linearithmic algorithms differ by a factor of two, and what the constant is and is not evidence about.
A limit is not a prediction
Why no finite set of measurements can establish an asymptotic claim, the case on this site where the fitted class genuinely changes when the range is extended, and how far a closed-form limit is from the finite object it describes.
Expected is not average
The difference between a guarantee averaged over an assumed distribution of inputs and a guarantee averaged over the algorithm's own coins, why the two are written with the same word, and what happens to each when somebody chooses the input.
What derandomising costs
Median-of-medians against a random pivot, measured over forty seeds, and the finding that derandomisation does not buy speed or safety in the class — it buys the disappearance of variance, and it is paid for in the mean.
The depth limit that almost never fires
What introsort's depth limit costs, how rarely it fires, and what it is worth against an adversary that decides the order of two elements at the moment it is asked.
The model a bound was quoted in
Four dials that separate the streaming models, the measured consequence of each, and the four distinct ways a correct bound gets quoted about something else.
The pass that was never a parameter
Making the number of passes a parameter — what crosses a boundary, why the carry has to be enforced rather than declared, and the exact answer a second read buys.
What a fold charges per level
Why a merge tree's depth rather than its width is what a counter table pays, why a chain costs a quantile summary less, and where the shape stops mattering at all.
What a pass costs when it is a file
Exact selection against a file of 4,194,304 keys in 1,024-word blocks, charged in block transfers with the read buffer counted as memory: where the state law n^(1/p) falls under one block, passes and transfers across memory from two blocks to the whole file, rereading against writing the interval out, the heavy tail where writing out costs more than it saves, a rule that decides from the counts, and both cutting rules on three inputs.
The branches an error opens
How fast an index walk's cost grows per error allowed, why the factor falls rather than holding, and why a wider alphabet is not simply dearer.
The table that walks every pair
What each set of shift tables costs before the text is touched, why one construction is linear and the other is not, and what that does to the comparison between them.
The branch that cannot reach an answer
What a lower-bound pruning removes from a bounded-error search tree, how the share moves with the budget and the alphabet, and where the crossing against the whole table ends up.
The case a failure link does not cover
The second case of the exact shift condition, what a construction that omits it produces, and why the omission is unsafe rather than merely inexact.
The cost that is the size of the answer
Muthukrishnan's chain of previous occurrences, what makes it proportional to the answer, and where its constant puts the crossing against a scan.
Where a crossing moved to
The output-sensitive document listing remeasured with the structure it is published with, what the crossing becomes, and what a prediction made from an asymptotic reading got wrong.
The cap an automaton cannot see
Why a linear-time construction enforces a different depth cap from an exhaustive one, what the difference costs, and the three regimes in which it costs nothing.
A factor of fourteen, for four per cent
The operations saved and the bits paid, measured together across four alphabets, with the workload that decides whether the trade is worth taking.
A code word is at least one bit
Where a frequency-shaped wavelet tree stops tracking the entropy, checked against Gallager's redundancy bound, and what gets underneath it.
Two at binary, five at twenty-six
The interval enumeration measured across four alphabet sizes, and why a factor quoted from natural language is four times what a genomics workload will see.
The flat bottom of a shallow curve
How Elias–Fano's split is chosen, why the bottom of the cost curve is flat, and what that flatness excused for several strands.
Flat in the budget, and not
Two operation savings swept over the error budget, what each one's shape says about its mechanism, and why the crossing between them is on a different axis entirely.
The exponential is in the expression
The deterministic machine's size measured on two expression families, why the bound is met rather than approached, and what a state count quoted without its family says.
A floor under a product
The time–space product of ten sorts, counted as peak auxiliary slots and again as the published bound counts it, against a family built to inhabit the model the bound is proved in: a read-only input, a write-only output, S cells between them, and a product of exactly n²(1 + 3/S).
A file written once for the queries after
A sequence of 23 exact selection queries against a file of 2^22 keys in 1,024-word blocks, charged in block transfers: answering each from nothing, keeping the first query's counts, writing the file into parts of equal width during the first pass, and writing it into parts the counts balance — the cumulative cost, the query at which each starts to pay, what one later query costs as memory grows, why a pass writes far fewer parts than it counts, and uniform keys against a Pareto tail.
A product paid for in blocks
The time–space product of sorting, T·S with S counted as the published bound counts it, recomputed with T in block transfers — each sort's own access trace replayed through an LRU memory of M cells in lines of B — for heapsort, three quicksorts, Shellsort and the read-only family that meets the bound: the product against B, transfers per access, the product against the memory, each sort's distance from the family against n, and the order of the sorts under each accounting.
Parts cut where the questions are
Selection queries against a file of 2^22 keys in blocks of 1,024 words, answered from one of seven parts written after a stated number of queries, with every block transfer charged by exact selection within the part: where each rule cuts, the cost a later query against the concentration of the workload beside the square-root prediction, against the number of past queries the cut was fitted to on uniform and heavy-tailed keys, and against how far the workload moves after the cut.
A recut the law decides
A file of 2²² keys written as seven parts cut by the square-root law from recent selection queries, with 90% of the queries in a band 2% wide that drifts at 0.02 to 0.5 percentiles every hundred queries or jumps every 1,000 to 10,000 queries, 20,000 queries a stream and four streams a setting, each query charged one or two reads of its part and each rewrite 8,192 transfers: recuts at fixed intervals of 125 to 4,000 queries against a recut the law triggers from a decayed density, cost against speed, the fixed intervals' curves, the law's ratio at four half-lives, jumps, one fast stream block by block, and where the cost goes.
Every cut the law moves
A file of 2²² keys in seven parts cut by the square-root law from a decayed density of recent selection queries, recut when the law's saving pays, on queries whose hot band drifts at 0.02 to 0.5 percentiles every hundred queries or jumps every 1,000 to 10,000, four streams a setting: the cuts recut by recut on one stream, transfers a query for the law charged for the whole file, for the changed parts, with small moves held back and with only the parts around the band recut, against the best fixed interval; the share of the file and of the cuts each recut changes; the cost against how far a cut may move before it is moved; and jumps.
The two parts the law was not given
A file of 2²² keys queried in a band 2% wide that drifts at 0.02 to 0.5 percentiles every hundred queries or jumps every 1,000 to 10,000, recut under the square-root law's rule with a half-life of 250 queries and charged for the parts that change: the parts each design writes around one band; transfers a query against drift speed for the law in seven and nine parts and for backgrounds of seven, six, five and four parts by keys with the band's part cut in three or four; queries and rewrites at one speed; a still band at every centre; one drifting stream block by block; jumps; and the cost in the thousand queries after a jump.