The data that is not a number

A price the levels share

A bidirectional index's wavelet-tree levels code each mixed block by its arrangement or by its gaps, and a flag that charges each code for the work a rank costs inside it reached below the curve the block lengths draw on one text of four. Setting that price separately for each level of the tree was predicted to find a few hundredths of a bit on English words, where the deep levels hold runs. It finds nothing on any text: under a ten-thousandth of a bit beyond one shared price. The price a block wants is set by the text, not by the depth of the node it sits in, and every level holds a fifth of the index.

A flag that weighs the work as well as the bits gave the coded levels of a bidirectional index a second dial. Each level is a bit vector cut into blocks, and a block whose bits are not all one value is stored either as the index of its arrangement among all blocks with that many ones, or as the gaps between its changes of value. A flag for the blocks that change once chose between them on bits alone. The weighed flag charged each code its bits plus a price for every unit of work a rank inside the block costs: an arrangement must be decoded bit by bit up to the position asked, a gap code only up to the change before it. On the repetitive collection that price reached 0.156 bits a character below anything a block length alone could reach at the same work. On English words it reached 0.002, on DNA and protein nothing.

Its closing section argued that the price was one number only because the proposal had made it one. A wavelet tree splits the alphabet in half at its root, so the root’s bit vector follows the text letter by letter, while near the leaves a node separates a few letters that often come in runs. A level whose blocks change often should want a different price from one whose blocks change rarely. It proposed choosing the price for each level separately, by an exchange rate between bits and work, and predicted that on English words the deep levels would gain a few tenths of a bit of work for 0.02 to 0.04 bits a character below the curve of lengths, while the repetitive collection would gain little over its single price. It named the risk that the deep levels are short, so that a gain confined to them would be a gain on a small share of the index.

None of the three holds. The deep levels are not short, they want the price the root wants, and a price for each level reaches exactly as far as one price for all of them.

One price for each depth

The index, the texts and the coding are the earlier essays’: both wavelet trees of a bidirectional index over 16,384 characters of each text, every node’s bit vector re-cut into blocks of 31 to 1,023 bits, the classes coded as runs, the superblocks every 32 blocks. A node’s depth is its distance from its tree’s root. The trees are balanced over the alphabet, so English words and the repetitive collection, with 21 letters each, have five depths, as does protein with 20; DNA has three.

The coding of a block depends only on its own bits and its own level’s price, so each depth’s bits and work can be read separately, each depth a point on the pair of axes bits and steps on one frame first drew, and they sum to the index’s: the sum is checked at every price and length. For an exchange rate λ\lambda, each depth takes the price that minimises its own bits plus λ\lambda times its own work, and the index’s point is the sum over depths. Prices are drawn from a grid of twenty, from 0 to 10, finer than the earlier essay’s eight, so that no depth is denied the price it wants by the grid’s spacing; the single price is measured on the same grid. Every set of per-level prices chosen is then run through the coding as one array, and its totals must equal the summed point. The work unit is the earlier essays’: one unit for each directory entry or class run a rank reads and for each bit or gap it decodes inside the block.

The same frontier on English words

On English words a price chosen for each level of the tree draws the same frontier as one price for all of them: its best point lies 0.002 bits a character below the curve the block lengths draw, and one price's 0.002English words: the points no other beats on both bits a character and work a rank, for block lengths alone at price nought, for one price on every level (a grid of 20 prices from 0 to 10), and for a price a level chosen by exchange rates from 0.001 to 5. Lengths: 31 1.538/10.1, 63 1.431/15.7, 127 1.367/23.6, 255 1.325/36.6, 511 1.311/61.1, 1023 1.304/104.4. One price: 31 at 10 1.996/8.6, 31 at 3 1.868/8.8, 31 at 2 1.724/9.2, 31 at 1.5 1.632/9.5, 31 at 1 1.566/9.8, 31 at 0.9 1.556/9.9, 31 at 0.8 1.551/9.9, 31 at 0.7 1.547/10.0, 31 at 0.6 1.543/10.0, 31 at 0.5 1.541/10.0, 31 at 0.4 1.539/10.1, 31 at 0.3 1.539/10.1, 31 at 0.2 1.538/10.1, 31 at 0.15 1.538/10.1, 31 at 0.1 1.538/10.1, 31 at 0.01 1.538/10.1, 31 at 0.03 1.538/10.1, 31 at 0.05 1.538/10.1, 31 at 0.07 1.538/10.1, 63 at 1 1.499/14.3, 63 at 0.9 1.481/14.5, 63 at 0.8 1.462/14.8, 63 at 0.7 1.450/15.0, 63 at 0.6 1.444/15.1, 63 at 0.5 1.441/15.2, 63 at 0.4 1.436/15.3, 63 at 0.3 1.434/15.4, 63 at 0.2 1.432/15.5, 63 at 0.15 1.431/15.5, 63 at 0.1 1.431/15.6, 63 at 0.07 1.431/15.6, 63 at 0.05 1.431/15.6, 63 at 0.01 1.431/15.6, 63 at 0.03 1.431/15.6, 127 at 0.7 1.409/21.2, 127 at 0.6 1.390/21.9, 127 at 0.5 1.379/22.4, 127 at 0.4 1.374/22.7, 127 at 0.3 1.371/22.9, 127 at 0.2 1.369/23.1, 127 at 0.15 1.367/23.4, 127 at 0.1 1.367/23.4, 127 at 0.07 1.367/23.5, 127 at 0.01 1.367/23.6, 127 at 0.03 1.367/23.6, 127 at 0.05 1.367/23.6, 255 at 0.6 1.361/31.0, 255 at 0.5 1.344/32.5, 255 at 0.4 1.336/33.4, 255 at 0.3 1.330/34.3, 255 at 0.2 1.328/34.8, 255 at 0.15 1.327/34.9, 255 at 0.1 1.327/35.0, 255 at 0.07 1.326/35.8, 255 at 0.01 1.325/36.3, 255 at 0.03 1.325/36.3, 255 at 0.05 1.325/36.3, 511 at 0.4 1.325/52.2, 511 at 0.3 1.318/54.3, 511 at 0.2 1.315/55.6, 511 at 0.15 1.314/56.1, 511 at 0.1 1.313/56.6, 511 at 0.07 1.312/57.6, 511 at 0.05 1.312/58.4, 511 at 0.03 1.312/59.2, 511 at 0.01 1.311/60.5, 511 at 0 1.311/61.1, 1023 at 0.3 1.310/89.9, 1023 at 0.1 1.306/93.3, 1023 at 0.15 1.306/93.3, 1023 at 0.2 1.306/93.3, 1023 at 0.05 1.305/95.1, 1023 at 0.07 1.305/95.1, 1023 at 0.03 1.305/98.0, 1023 at 0 1.304/104.4, 1023 at 0.01 1.304/104.4. A price a level: 31 at [10, 10, 10, 10, 10] 1.996/8.6, 31 at [10, 10, 10, 10, 10] 1.996/8.6, 31 at [10, 10, 10, 10, 10] 1.996/8.6, 31 at 10 1.996/8.6, 31 at [3, 3, 3, 3, 3] 1.868/8.8, 31 at 3 1.868/8.8, 31 at 2 1.724/9.2, 31 at 1.5 1.632/9.5, 31 at [1, 1, 1, 1.5, 1.5] 1.588/9.7, 31 at 1 1.566/9.8, 31 at 0.9 1.556/9.9, 31 at 0.8 1.551/9.9, 31 at 0.7 1.547/10.0, 31 at [0.6, 0.5, 0.6, 0.6, 0.6] 1.543/10.0, 31 at 0.6 1.543/10.0, 31 at 0.5 1.541/10.0, 31 at 0.4 1.539/10.1, 31 at [0.1, 0.2, 0.3, 0.3, 0.3] 1.539/10.1, 31 at 0.3 1.539/10.1, 31 at 0.2 1.538/10.1, 31 at 0.15 1.538/10.1, 31 at [0.1, 0, 0, 0, 0.15] 1.538/10.1, 31 at 0.1 1.538/10.1, 31 at [0, 0, 0, 0, 0.01] 1.538/10.1, 31 at [0, 0, 0, 0, 0.01] 1.538/10.1, 31 at [0, 0, 0, 0, 0.01] 1.538/10.1, 31 at [0, 0, 0, 0, 0.01] 1.538/10.1, 31 at 0.01 1.538/10.1, 31 at 0.03 1.538/10.1, 31 at 0.05 1.538/10.1, 31 at 0.07 1.538/10.1, 63 at 1 1.499/14.3, 63 at 0.9 1.481/14.5, 63 at 0.8 1.462/14.8, 63 at 0.7 1.450/15.0, 63 at [0.6, 0.7, 0.6, 0.6, 0.6] 1.445/15.1, 63 at 0.6 1.444/15.1, 63 at 0.5 1.441/15.2, 63 at 0.4 1.436/15.3, 63 at 0.3 1.434/15.4, 63 at [0.1, 0.3, 0.3, 0.3, 0.3] 1.433/15.4, 63 at 0.2 1.432/15.5, 63 at 0.15 1.431/15.5, 63 at [0.1, 0.07, 0.15, 0.1, 0.01] 1.431/15.6, 63 at 0.1 1.431/15.6, 63 at 0.07 1.431/15.6, 63 at [0.05, 0.05, 0.05, 0, 0.01] 1.431/15.6, 63 at 0.05 1.431/15.6, 63 at [0.01, 0, 0, 0, 0.01] 1.431/15.6, 63 at [0.01, 0, 0, 0, 0.01] 1.431/15.6, 63 at 0.01 1.431/15.6, 63 at 0.03 1.431/15.6, 127 at 0.7 1.409/21.2, 127 at 0.6 1.390/21.9, 127 at 0.5 1.379/22.4, 127 at 0.4 1.374/22.7, 127 at 0.3 1.371/22.9, 127 at [0.2, 0.3, 0.2, 0.2, 0.3] 1.370/23.0, 127 at 0.2 1.369/23.1, 127 at 0.15 1.367/23.4, 127 at [0.1, 0.1, 0.1, 0.07, 0] 1.367/23.4, 127 at 0.1 1.367/23.4, 127 at [0.01, 0, 0, 0.07, 0] 1.367/23.5, 127 at 0.07 1.367/23.5, 127 at 0.01 1.367/23.6, 127 at 0.03 1.367/23.6, 127 at 0.05 1.367/23.6, 255 at 0.6 1.361/31.0, 255 at [0.4, 0.5, 0.5, 0.4, 0.5] 1.344/32.5, 255 at 0.5 1.344/32.5, 255 at 0.4 1.336/33.4, 255 at 0.3 1.330/34.3, 255 at [0.3, 0.2, 0, 0.07, 0.1] 1.328/34.6, 255 at 0.2 1.328/34.8, 255 at 0.15 1.327/34.9, 255 at [0.1, 0.1, 0, 0.07, 0.1] 1.327/35.0, 255 at 0.1 1.327/35.0, 255 at 0.07 1.326/35.8, 255 at [0, 0, 0, 0.01, 0.01] 1.325/36.3, 255 at 0.01 1.325/36.3, 255 at 0.03 1.325/36.3, 255 at 0.05 1.325/36.3, 511 at 0.4 1.325/52.2, 511 at 0.3 1.318/54.3, 511 at [0.2, 0.1, 0.03, 0, 0.15] 1.315/55.6, 511 at 0.2 1.315/55.6, 511 at 0.15 1.314/56.1, 511 at 0.1 1.313/56.6, 511 at 0.07 1.312/57.6, 511 at 0.05 1.312/58.4, 511 at 0.03 1.312/59.2, 511 at 0.01 1.311/60.5, 511 at 0 1.311/61.1, 1023 at 0.3 1.310/89.9, 1023 at [0.05, 0, 0, 0, 0.1] 1.306/93.3, 1023 at 0.1 1.306/93.3, 1023 at 0.15 1.306/93.3, 1023 at 0.2 1.306/93.3, 1023 at 0.05 1.305/95.1, 1023 at 0.07 1.305/95.1, 1023 at 0.03 1.305/98.0, 1023 at [0, 0, 0, 0, 0] 1.304/104.4, 1023 at 0 1.304/104.4, 1023 at 0.01 1.304/104.4.1632641.401.601.802work a rank (log scale)levels' bits a character31631272555111023block lengths aloneone price, every levela price for each levelEnglish words, 16,384 charactersfrontiers: nothing beats them on both
Fig. 1 English words: the points no other beats on both bits a character and work a rank, for block lengths alone at price nought, for one price on every level, and for a price chosen for each level. Lengths: 1.431 at 15.7 units of work (63-bit blocks), 1.367 at 23.6 (127), 1.325 at 36.6 (255). One price: 1.327 at 35.0 (255, price 0.1), 1.371 at 22.9 (127, 0.3). A price for each level: the same points, with a few between them.

On English words a price chosen for each level reaches 0.0023 bits a character below the curve the block lengths draw, at 255-bit blocks; one price for every level, on the same fine grid, reaches 0.0024. The prediction said 0.02 to 0.04. The two frontiers lie on top of each other at every work a rank from 9 units to 100, and where the per-level frontier has a point of its own, between two of the single price’s, it is better by at most three ten-thousandths of a bit a character. At the scale of the plate the three curves are two, the lengths’ and the prices’, and the prices’ curve is one curve whichever way it is priced.

The prices the levels choose, when they can choose, are nearly the prices they would have been given. At an exchange rate of 0.02, where English words’ levels first start buying work with bits, four of the five depths take a price of 1 and depth 3 takes 0.9. At every rate above it, four take 1.5 and depth 3 takes 0.9. Below 0.01 the levels choose prices from nought to 0.3 whose effect on bits and work is too small to separate on any plate here. A level that takes a slightly different price is a level whose blocks happen to straddle the grid’s steps slightly differently, and the index’s total does not move.

The same frontier on the repetitive collection

On the repetitive collection a price chosen for each level of the tree draws the same frontier as one price for all of them: its best point lies 0.156 bits a character below the curve the block lengths draw, and one price's 0.156The repetitive collection: the points no other beats on both bits a character and work a rank, for block lengths alone at price nought, for one price on every level (a grid of 20 prices from 0 to 10), and for a price a level chosen by exchange rates from 0.001 to 5. Lengths: 31 0.662/5.9, 63 0.607/10.5, 127 0.549/19.1, 255 0.509/34.4, 511 0.476/52.1, 1023 0.450/54.6. One price: 31 at 10 0.724/5.2, 31 at 2 0.724/5.2, 31 at 3 0.724/5.2, 31 at 1.5 0.724/5.2, 31 at 1 0.721/5.2, 31 at 0.9 0.720/5.2, 31 at 0.8 0.717/5.3, 31 at 0.7 0.694/5.5, 31 at 0.6 0.688/5.5, 31 at 0.5 0.674/5.7, 31 at 0.4 0.666/5.8, 31 at 0.3 0.665/5.8, 31 at 0.2 0.663/5.8, 31 at 0.1 0.662/5.9, 31 at 0.15 0.662/5.9, 31 at 0.01 0.662/5.9, 31 at 0.03 0.662/5.9, 31 at 0.05 0.662/5.9, 31 at 0.07 0.662/5.9, 63 at 0.4 0.660/7.9, 63 at 0.3 0.630/9.0, 1023 at 0.1 0.458/9.7, 1023 at 0.15 0.458/9.7, 1023 at 0.2 0.458/9.7, 1023 at 0.3 0.458/9.7, 1023 at 0.4 0.458/9.7, 1023 at 0.5 0.458/9.7, 1023 at 0.6 0.458/9.7, 1023 at 0.7 0.458/9.7, 1023 at 0.8 0.458/9.7, 1023 at 0.9 0.458/9.7, 1023 at 1 0.458/9.7, 1023 at 1.5 0.458/9.7, 1023 at 2 0.458/9.7, 1023 at 3 0.458/9.7, 1023 at 10 0.458/9.7, 1023 at 0.05 0.456/13.6, 1023 at 0.07 0.456/13.6, 1023 at 0.03 0.453/29.4, 1023 at 0 0.450/54.6, 1023 at 0.01 0.450/54.6. A price a level: 31 at 10 0.724/5.2, 31 at [1.5, 1, 2, 0.9, 1.5] 0.724/5.2, 31 at [1.5, 1, 2, 0.9, 1.5] 0.724/5.2, 31 at [1.5, 1, 2, 0.9, 1.5] 0.724/5.2, 31 at [1.5, 1, 2, 0.9, 1.5] 0.724/5.2, 31 at 1.5 0.724/5.2, 31 at [1.5, 1, 1, 0.9, 0.9] 0.723/5.2, 31 at 1 0.721/5.2, 31 at 0.9 0.720/5.2, 31 at 0.8 0.717/5.3, 31 at 0.7 0.694/5.5, 31 at [0.7, 0.6, 0.6, 0.6, 0.6] 0.690/5.5, 31 at 0.6 0.688/5.5, 31 at 0.5 0.674/5.7, 31 at 0.4 0.666/5.8, 31 at [0.3, 0.3, 0.3, 0.3, 0.3] 0.665/5.8, 31 at 0.3 0.665/5.8, 31 at 0.2 0.663/5.8, 31 at [0.1, 0.1, 0.1, 0.1, 0.1] 0.662/5.9, 31 at 0.1 0.662/5.9, 31 at 0.15 0.662/5.9, 31 at [0, 0.01, 0, 0.01, 0.01] 0.662/5.9, 31 at [0, 0.01, 0, 0.01, 0.01] 0.662/5.9, 31 at [0, 0.01, 0, 0.01, 0.01] 0.662/5.9, 31 at [0, 0.01, 0, 0.01, 0.01] 0.662/5.9, 63 at 0.4 0.660/7.9, 63 at 0.3 0.630/9.0, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at [0.03, 0.05, 0.03, 0.1, 0.1] 0.458/9.7, 1023 at 0.1 0.458/9.7, 1023 at 0.15 0.458/9.7, 1023 at 0.2 0.458/9.7, 1023 at 0.3 0.458/9.7, 1023 at 0.4 0.458/9.7, 1023 at 0.5 0.458/9.7, 1023 at 0.6 0.458/9.7, 1023 at 0.7 0.458/9.7, 1023 at 0.8 0.458/9.7, 1023 at 0.9 0.458/9.7, 1023 at 1 0.458/9.7, 1023 at 1.5 0.458/9.7, 1023 at 2 0.458/9.7, 1023 at 3 0.458/9.7, 1023 at 10 0.458/9.7, 1023 at 0.05 0.456/13.6, 1023 at 0.07 0.456/13.6, 1023 at 0.03 0.453/29.4, 1023 at [0, 0, 0, 0, 0] 0.450/54.6, 1023 at 0 0.450/54.6, 1023 at 0.01 0.450/54.6.816320.5000.6000.700work a rank (log scale)levels' bits a character31631272555111023block lengths aloneone price, every levela price for each levelthe repetitive collection, 16,384 charactersfrontiers: nothing beats them on both
Fig. 2 The repetitive collection: lengths alone 0.607 at 10.5 units of work (63-bit blocks), 0.450 at 54.6 (1,023); one price 0.458 at 9.7 (1,023-bit blocks, price 0.1 to 10); a price for each level the same point, at prices of 0.03 to 0.1 on the five depths.

On the repetitive collection a price for each level reaches the single price’s 0.156 bits a character below the lengths’ curve, at the same point: 1,023-bit blocks costing 0.458 bits a character for 9.7 units of work a rank. The prediction expected little gain here, since this text’s cheap blocks are cheap at every level, and that is what the plate shows; it shows it on English words too, which was not expected.

The repetitive collection’s whole advantage was a single move: at a price of a tenth, almost every arrangement block in a 1,023-bit level flips to its gap code, the work of a rank falls by a factor of five and a half, and the bits rise by eight thousandths of a bit a character. That move happens at the same price at every depth, which is why a price for each level finds the same point, at prices of 0.03 to 0.1 across the five depths. Any price in that range flips the same blocks.

Five levels that bend together

At 255-bit blocks on English words, all five levels give up half their in-block work at the same step of the price, 0.8 or 0.6: the depth of a level does not change where its blocks would rather be gap codesEnglish words at 255-bit blocks: each depth of the wavelet trees (both trees, the root at 0), its bits a character against its share of a rank's work, as one price for in-block work runs from 0 to 10. Every depth holds 20%, 20%, 20%, 20%, 20% of the positions. depth 0: 0 0.332/10.2, 0.05 0.332/10.2, 0.15 0.333/9.7, 0.4 0.334/9.5, 0.7 0.342/8.7, 1 0.381/6.4, 3 0.385/6.2, 10 0.385/6.2; half its work gone at 0.8. depth 1: 0 0.250/7.0, 0.05 0.250/7.0, 0.15 0.251/6.8, 0.4 0.251/6.7, 0.7 0.256/6.3, 1 0.276/5.0, 3 0.283/4.7, 10 0.283/4.7; half its work gone at 0.8. depth 2: 0 0.286/8.7, 0.05 0.286/8.7, 0.15 0.286/8.7, 0.4 0.292/7.7, 0.7 0.312/5.9, 1 0.320/5.4, 3 0.330/4.9, 10 0.330/4.9; half its work gone at 0.6. depth 3: 0 0.174/4.9, 0.05 0.174/4.7, 0.15 0.175/4.4, 0.4 0.176/4.2, 0.7 0.189/3.1, 1 0.199/2.4, 3 0.199/2.4, 10 0.199/2.4; half its work gone at 0.6. depth 4: 0 0.283/5.9, 0.05 0.283/5.8, 0.15 0.284/5.4, 0.4 0.284/5.4, 0.7 0.290/4.8, 1 0.309/3.6, 3 0.315/3.4, 10 0.315/3.4; half its work gone at 0.8.0.2000.3000.40002.5057.5010the level's share of the work a rankthe level's bits a characterdepth 0depth 1depth 2depth 3depth 4right end: price noughtEnglish words, 255-bit blocksone curve a depth
Fig. 3 English words at 255-bit blocks: each depth’s bits a character against its share of the work a rank as one price rises from 0 to 10. Every depth holds 20% of the positions. Depth 0: 0.332 bits, 10.2 units at price nought, 0.385 and 6.2 at 10. Depth 2: 0.286, 8.7; 0.330, 4.9. Depth 3: 0.174, 4.9; 0.199, 2.4. Each gives up half its in-block work between prices of 0.6 and 0.8.

At 255-bit blocks on English words every depth of the tree gives up half of its in-block work between prices of 0.6 and 0.8, and every depth holds exactly a fifth of the index’s positions. Two levels give it up at the step to 0.6 and three at the step to 0.8. The curves differ in where they start: depth 3, whose blocks change value least often, costs 0.174 bits a character and 4.9 units of work where depth 0 costs 0.332 and 10.2. They do not differ in where they bend, and the bend is all a per-level price could exploit.

The rate at which each level trades is the plainer statement of the same fact. Taking a level from price nought to a price of 10 costs depth 0 another 0.053 bits a character for 4.0 units of work removed, depth 1 0.033 for 2.3, depth 2 0.044 for 3.8, depth 3 0.025 for 2.4 and depth 4 0.032 for 2.5. Every depth pays between 0.010 and 0.014 bits a character for each unit of work it gives up. An exchange rate between bits and work is a price on that trade, and when every level offers the trade on the same terms, the best response of every level to any rate is the same, which is one price.

The second fact disposes of the risk the closing section named. A balanced wavelet tree sends every symbol through every depth until its code ends, which is why a search asks a rank at every level of it, so each depth’s nodes together hold one bit for every character of the text, and with codes of equal length every depth holds the same share. On English words, with 27 symbols on five-bit codes, that is a fifth each. A deep level would be short in a tree shaped by the symbols’ frequencies, where a common letter’s code ends near the root, which is the shape a code word is at least one bit measured; in the tree this index uses it is as large as the root.

At 255-bit blocks on the repetitive collection, all five levels give up half their in-block work at the same step of the price, 0.1: the depth of a level does not change where its blocks would rather be gap codesThe repetitive collection at 255-bit blocks: each depth of the wavelet trees (both trees, the root at 0), its bits a character against its share of a rank's work, as one price for in-block work runs from 0 to 10. Every depth holds 20%, 20%, 20%, 20%, 20% of the positions. depth 0: 0 0.116/7.3, 0.05 0.117/6.7, 0.15 0.122/4.0, 0.4 0.125/3.2, 0.7 0.125/3.2, 1 0.125/3.2, 3 0.125/3.2, 10 0.125/3.2; half its work gone at 0.1. depth 1: 0 0.084/7.1, 0.05 0.085/6.1, 0.15 0.091/2.7, 0.4 0.092/2.3, 0.7 0.092/2.3, 1 0.092/2.3, 3 0.092/2.3, 10 0.092/2.3; half its work gone at 0.1. depth 2: 0 0.090/6.5, 0.05 0.091/5.1, 0.15 0.096/2.6, 0.4 0.097/2.2, 0.7 0.097/2.2, 1 0.097/2.2, 3 0.097/2.2, 10 0.097/2.2; half its work gone at 0.1. depth 3: 0 0.112/7.3, 0.05 0.113/5.8, 0.15 0.119/2.4, 0.4 0.121/1.9, 0.7 0.121/1.9, 1 0.121/1.9, 3 0.121/1.9, 10 0.121/1.9; half its work gone at 0.1. depth 4: 0 0.106/6.2, 0.05 0.107/5.1, 0.15 0.113/1.3, 0.4 0.114/1.1, 0.7 0.114/1.1, 1 0.114/1.1, 3 0.114/1.1, 10 0.114/1.1; half its work gone at 0.1.0.0800.1000.1200246the level's share of the work a rankthe level's bits a characterdepth 0depth 1depth 2depth 3depth 4right end: price noughtthe repetitive collection, 255-bit blocksone curve a depth
Fig. 4 The repetitive collection at 255-bit blocks, each depth as one price rises. Depth 0: 0.116 bits and 7.3 units at price nought, 0.125 and 3.2 from 0.4. Depth 4: 0.106 and 6.2, 0.114 and 1.1. Every depth gives up half its in-block work at the step to 0.1.

On the repetitive collection every depth gives up half its in-block work at the same step of the price, to 0.1, and nearly all it will give up by 0.4. Each depth pays 0.0016 to 0.0022 bits a character for every unit of work it removes, a sixth of English words’ rate and the same at every depth. Here the curves are steep and short. A block of this collection that is coded as an arrangement is nearly always a long stretch of one value with a few changes, a gap code is barely longer, and the work a gap code saves is most of the block. That is as true at depth 4 as at the root, because the collection’s repeats are copies of whole stretches of text, and a copy repeats its letters at every depth of the tree at once.

The price a block wants

The price at which a level's blocks would rather be gap codes is a property of the text, not of the depth: at 255-bit blocks its median runs from 0.601 to 0.788 across English words' five depths, 0.081 to 0.096 across the repetitive collection's, and 0.726 to 0.845 across protein'sFor each mixed block that the flag on bits alone codes as an arrangement, the price for in-block work at which its gap code becomes cheaper: its extra bits over the work it saves per position. Quartiles (bar) and median (dot) by depth of the wavelet trees, at 255-bit blocks, on a logarithmic scale from 0.005 to 10. English words: depth 0, 73 mixed blocks of which 52% are gap codes already, the rest flipping at 0.660, 0.746, 0.902; depth 1, 77 mixed blocks of which 71% are gap codes already, the rest flipping at 0.650, 0.788, 0.917; depth 2, 86 mixed blocks of which 65% are gap codes already, the rest flipping at 0.405, 0.633, 0.857; depth 3, 73 mixed blocks of which 77% are gap codes already, the rest flipping at 0.528, 0.601, 0.742; depth 4, 76 mixed blocks of which 71% are gap codes already, the rest flipping at 0.549, 0.735, 0.887. The repetitive collection: depth 0, 84 mixed blocks of which 75% are gap codes already, the rest flipping at 0.081, 0.096, 0.131; depth 1, 72 mixed blocks of which 65% are gap codes already, the rest flipping at 0.068, 0.083, 0.097; depth 2, 71 mixed blocks of which 69% are gap codes already, the rest flipping at 0.040, 0.096, 0.097; depth 3, 90 mixed blocks of which 68% are gap codes already, the rest flipping at 0.049, 0.089, 0.096; depth 4, 75 mixed blocks of which 64% are gap codes already, the rest flipping at 0.065, 0.081, 0.097. Protein: depth 0, 130 mixed blocks of which 2% are gap codes already, the rest flipping at 0.650, 0.726, 0.820; depth 1, 98 mixed blocks of which 2% are gap codes already, the rest flipping at 0.728, 0.845, 0.928; depth 2, 132 mixed blocks of which 4% are gap codes already, the rest flipping at 0.652, 0.807, 0.916; depth 3, 124 mixed blocks of which 3% are gap codes already, the rest flipping at 0.716, 0.834, 0.937; depth 4, 128 mixed blocks of which 14% are gap codes already, the rest flipping at 0.718, 0.823, 0.933.0.010.1110price at which an arrangement block would take its gap code (log scale)English wordsdepth 0 · 35 arrangeddepth 1 · 22 arrangeddepth 2 · 30 arrangeddepth 3 · 17 arrangeddepth 4 · 22 arrangedThe repetitive collectiondepth 0 · 21 arrangeddepth 1 · 25 arrangeddepth 2 · 22 arrangeddepth 3 · 29 arrangeddepth 4 · 27 arrangedProteindepth 0 · 128 arrangeddepth 1 · 96 arrangeddepth 2 · 127 arrangeddepth 3 · 120 arrangeddepth 4 · 110 arranged255-bit blocksbar: middle half of the blocks
Fig. 5 At 255-bit blocks, for each arrangement-coded mixed block, the price at which its gap code would become cheaper, by depth: quartiles and median. English words, medians 0.60 to 0.79 across the five depths. The repetitive collection, 0.08 to 0.10. Protein, 0.73 to 0.85. On English words 52% to 77% of each depth’s mixed blocks are gap codes already.

The price at which a block of English words would rather be a gap code has a median of 0.60 to 0.79 at every depth, against 0.08 to 0.10 for the repetitive collection and 0.73 to 0.85 for protein. Each block has such a price: its gap code’s extra bits over its arrangement’s, divided by the work a rank inside it would save per position. A price for each level could help only if the levels’ blocks wanted different prices, and the plate shows that they want the same one within a factor of 1.3 on each text, while the texts want prices a factor of eight apart.

The reason is in what a block’s choice depends on. An arrangement costs about log⁡2(Lc)\log_2 \binom{L}{c} bits for a block of LL bits with cc ones and charges a rank for every bit before its position; a gap code costs about two logarithms a change and charges a rank for every change before it. A block’s price is therefore set by how many times its bits change value, against how many ones it holds, and that is a property of how the text’s letters alternate between the two halves of the alphabet each node separates. In English, that alternation is about as frequent at every depth, because a word’s letters fall on both sides of almost any division of the alphabet. In the repetitive collection it is rare at every depth. Protein’s letters are drawn at random, so its blocks change value as often as random bits do at every depth, nearly all of them are best as arrangements, and the few that could flip want about the price English words’ blocks want, 0.73 to 0.85.

The other number on the plate is how much of each level is still on the table. On English words 52% to 77% of every depth’s mixed blocks are already gap codes at price nought, because a gap code is shorter than its arrangement whenever a block changes value only a few times. The price acts on the remaining quarter to half. The optimum the flag took away measured how the flag moved the best block length, and the plate here explains why one dial on top of the length is enough: what is left for a price to act on looks the same from every depth.

How far below the curve, on every text

Below the curve the block lengths draw, a price for each level reaches 0.0023 bits a character on English words, 0.1564 bits a character on the repetitive collection, 0.0002 bits a character on protein, 0.0000 bits a character on DNA — on no text more than a ten-thousandth of a bit beyond what one price for every level reachesFor each text, the most any setting reaches below the curve the block lengths draw at price nought, at the same work a rank: one price on every level on the earlier page's grid, one price on a grid of 20, and a price for each level. English words: 0.0023, 0.0024, 0.0023; The repetitive collection: 0.1564, 0.1564, 0.1564; Protein: 0.0002, 0.0002, 0.0002; DNA: 0.0000, 0.0000, 0.0000.one price, the earlier gridone price, the fine grida price for each level00.050.10.15English words0.002The repetitive collection0.156Protein0.000DNA0.000bits a character below the lengths' curvesame work a rank
Fig. 6 For each text, how far below the lengths’ curve each setting reaches at the same work a rank: one price on the earlier grid, one price on the fine grid, a price for each level. English words: 0.0023, 0.0024, 0.0023. The repetitive collection: 0.1564 for all three. Protein: 0.0002 for all three. DNA: nought.

A price for each level reaches 0.0023 bits a character below the lengths’ curve on English words, 0.156 on the repetitive collection, 0.0002 on protein and nothing on DNA, and on no text more than a ten-thousandth of a bit beyond one price for every level. The finer grid adds a ten-thousandth on English words over the earlier essay’s eight prices and nothing anywhere else. Whatever a price does to these levels it does through one number.

DNA and protein confirm the plate from the other side. Their letters are drawn at random, so every level’s blocks are random bits, arrangements are as short as anything can be and gap codes are long; a price high enough to flip a block costs more bits than any length change does, and no setting of the price at any depth reaches below the lengths’ curve. That is the earlier essay’s result for one price, and per level it holds the same way.

What the prediction got right

The closing section predicted that English words’ deep levels, which separate a few letters that come in runs, would want a lower price than the root, and that pricing them separately would reach 0.02 to 0.04 bits a character below the curve of lengths. The deep levels do not want a different price. Their blocks cost fewer bits and less work than the root’s, as the levels plate shows, but they trade the two at the same rate, so the price that bends one bends all. A per-level price reaches 0.0023, the same as one price.

It predicted the repetitive collection would gain little over its single price’s 0.156. It gains nothing, which is little. And it named the risk that deep levels are short. In a balanced tree they are exactly as long as the root, a fifth of the index each on English words, so a gain at the deep levels would have been a gain on most of the index had there been one.

What the measurement settles is the question the section asked: whether a text’s levels differ enough in their blocks that a price fitted to each beats a price fitted to the text. On these four texts, a text’s character is the same at every depth of its tree, in the one respect the flag reads.

What these levels do not settle

One tree shape. Both trees are balanced over the alphabet. A tree shaped by symbol frequencies has short deep levels holding the rare letters, whose blocks may well want a different price, and none was built.

One size of text. Every text is 16,384 characters, and on English words each depth at 255-bit blocks has about seventy-five mixed blocks, a quarter to a half of them arrangement-coded. A per-level price on a text a hundred times longer would be fitted to many more blocks, but it would be fitted to the same distribution, and nothing here suggests the distributions would separate.

One unit of work. A bit decoded, a gap passed and a directory entry read each cost one unit. If decoding an arrangement were cheaper per bit than reading a gap, the price at which blocks flip would move, by the same factor at every depth.

Still open: a price that follows the block

A level’s blocks want prices spread over a factor of two or three between the first and third quartile, and the spread within a level is wider than the difference between levels. A price set for the level treats its blocks as one market; the flag already makes a decision block by block, and could make this one too.

The measurement that follows gives every arrangement block its own decision: flip it to its gap code exactly when its own price, extra bits over work saved per position, is below the exchange rate. That is what one price does already, since one price flips exactly the blocks whose own price is under it, so the prediction is that it reaches the same frontier, on all four texts, as one price does now. What could move is the work unit. A rank that lands in a block decodes up to the position asked, and positions are asked unevenly when the queries that reach a level come from a text’s commonest patterns. The measurement therefore weights each block’s work by how often a pattern search’s ranks land in it, counted on the earlier essays’ pattern sets, and asks whether a block that is often asked should be priced differently from one that is rarely asked. The question is whether the price a block wants is a property of the block’s bits, which every level shares, or of the queries that reach it, which they do not.

What this makes readable

Essays that name this one as a prerequisite.

Named alongside this one

Essays reaching for the same objects. Nobody chose these; they are what the concept index makes visible.

What links here

Every essay whose body links to this one.

The objects this essay names

Each one links to every other essay that touches it.

Bidirectional indexCompressed bit vectorIndex sizePareto frontierPredictionRank querySpace accountingWavelet tree