← abrahamyeung.com

Bounds on edit-metric codes

Eq(n,d) is the largest number of words of length n over q symbols such that every two of them are at Levenshtein distance at least d. The distance counts the insertions, deletions and substitutions needed to turn one word into the other. These tables give the best known bounds for binary, ternary and quaternary codes of fixed length, and for binary and ternary codes of variable length.

The tables start from Sheridan Houghten's tables at Brock University, copied on 27 October 2026, and record improvements found since then. 75 cells have a better lower bound than Houghten's table, and 10 more follow from those. One more follows from other entries of Houghten's own tables. Every new lower bound that comes with a code links to the codewords and their SHA-256, and check.py checks any of them. This page is maintained separately from Houghten's.

Last updated 2026-11-07. Corrections and new codes are welcome at ayeung16@stanford.edu. Data: bounds.csv (every cell, with its source), records.csv (every claim beyond Houghten's table).

Improvements

Cells where the best known bound differs from Houghten's table, newest first.

cellHoughtennowconstructiondatesourcecode
E4(14,10)≥13≥18tabu search on the codewords
earlier: 14 (this page, 2026-11-06)
2026-11-07this pagecodewords 1 kB
af3d1b47975ffd8b…
E4(13,9)≥17≥21tabu search on the codewords
earlier: 20 (this page, 2026-11-06)
2026-11-07this pagecodewords 1 kB
6f3d70cc5f352d86…
E4(12,9)≥13≥14tabu search on the codewords2026-11-07this pagecodewords 1 kB
7de53b0be9c9521a…
E4(11,9)≥7≥9tabu search on the codewords
earlier: 8 (this page, 2026-11-06)
2026-11-07this pagecodewords 1 kB
4ff1fc23a1c6855f…
E3(12,8)10–3611–36tabu search on the codewords2026-11-07this pagecodewords 1 kB
7a7d5ef936425286…
E3(11,8)7–128–12tabu search on the codewords2026-11-07this pagecodewords 1 kB
888fa44709567236…
E3(11,7)11–3613–36tabu search on the codewords2026-11-07this pagecodewords 1 kB
b2a5e0c24ae8ad7a…
E4(13,11)≥5≥7tabu search on the codewords2026-11-06this pagecodewords 1 kB
184b12c4a765e3db…
E4(13,10)≥11≥12tabu search on the codewords2026-11-06this pagecodewords 1 kB
083645394017e65d…
E4(12,10)≥6≥8tabu search on the codewords2026-11-06this pagecodewords 1 kB
667bb68f90a12c9f…
E4(14,9)≥27≥37lexicode2026-11-06this pagecodewords 1 kB
d3ec8a08c4005750…
E4(15,8)≥61≥251lexicode
and so E4(16,8) ≥ 251
2026-11-06this pagecodewords 4 kB
bc117447c9227237…
E4(14,8)≥54≥112lexicode2026-11-06this pagecodewords 2 kB
22b2befad2d31b6a…
E4(15,7)≥196≥1107lexicode
and so E4(16–17,7) ≥ 1107
2026-11-06this pagecodewords 18 kB
15ae5c445ac05761…
E4(14,7)≥188≥448lexicode2026-11-06this pagecodewords 7 kB
3334b349bdc96d91…
E4(16,5)≥9220≥154463lexicode
and so E4(17,5) ≥ 154463
2026-11-06this pagecodewords 2.6 MB
7b1cc9895641e052…
E4(16,4)≥18308≥1712330lexicode
and so E4(17,4) ≥ 1712330
2026-11-06this pagecodewords 29.1 MB
27a72718218263c3…
E4(14,3)≥40604≥1782677lexicode
and so E4(15–17,3) ≥ 1782677
2026-11-06this pagecodewords 26.7 MB
2ad22bf3b7e2e20f…
E2(24,7)≥132≥210lexicode2026-11-06this pagecodewords 6 kB
1b8f67c7f269b2ae…
E2(23,7)≥97≥140lexicode2026-11-06this pagecodewords 4 kB
420139e3dc0153f5…
E2(20,7)≥35≥44lexicode2026-11-06this pagecodewords 1 kB
6132a6d9f8461c24…
E2(24,5)≥1489≥3979lexicode2026-11-06this pagecodewords 100 kB
e3ac518ee03c3870…
E2(23,5)≥1268≥2344lexicode2026-11-06this pagecodewords 57 kB
911222c15690f60b…
E2(20,5)≥379≥501lexicode2026-11-06this pagecodewords 11 kB
6fc9dc522a1b88d2…
E2(16,5)≥65≥70lexicode2026-11-06this pagecodewords 2 kB
f43325da6ab2ccfc…
E4(15,6)≥880≥6486lexicode
and so E4(16–17,6) ≥ 6486
2026-11-05this pagecodewords 104 kB
75bf91e501c06d4d…
E4(14,6)≥879≥2346lexicode2026-11-05this pagecodewords 36 kB
92a4f972ecb53ad7…
E4(10,6)60–49668–496prescribed symmetry (dihedral symbol group, reflections combined with reversal) + local search2026-11-05this pagecodewords 1 kB
eb867a52ebe6e648…
E4(15,5)≥6419≥49992lexicode2026-11-05this pagecodewords 800 kB
ec111574133cb4c4…
E4(14,5)≥5517≥16440lexicode2026-11-05this pagecodewords 247 kB
aa888ba53bf8cd9d…
E4(15,4)≥17780≥510118lexicode2026-11-05this pagecodewords 8.2 MB
b5a36e98fe33103e…
E4(10,4)1463–81921520–8192prescribed symmetry (dihedral symbol group, quarter turns and two reflections combined with reversal) + local search2026-11-05this pagecodewords 17 kB
100524bdc0698e3c…
E4(8,4)176–512204–512prescribed symmetry (dihedral symbol group, reflections combined with reversal) + local search
earlier: 200 (Yeung 2026)
2026-11-05this pagecodewords 2 kB
eaa89bde408b5c68…
E3(12,6)56–48663–486prescribed symmetry (all symbol permutations and reversal) + local search2026-11-05this pagecodewords 1 kB
568131647b5068f1…
E3(12,5)208–1557219–1557prescribed symmetry (all symbol permutations and reversal) + local search2026-11-05this pagecodewords 3 kB
567f156e035f7d4e…
E3(12,4)1129–58321227–5832prescribed symmetry (all symbol permutations and reversal) + local search2026-11-05this pagecodewords 16 kB
84a706f14405ad90…
E3(12,3)7819–196838238–19683prescribed symmetry (cyclic symbol shift and reversal) + local search2026-11-05this pagecodewords 108 kB
1df538f21bcb4e2a…
E3(11,6)29–16236–162prescribed symmetry (cyclic symbol shift and reversal) + local search2026-11-03this pagecodewords 1 kB
dc17504563bfd7ec…
E3(10,6)18–5419–54prescribed symmetry (symbol swap and reversal) + local search2026-11-03this pagecodewords 1 kB
277ae6ea1ee3f514…
E3(11,5)98–648108–648prescribed symmetry (cyclic symbol shift and reversal) + local search2026-11-03this pagecodewords 2 kB
b643535c5dc00ade…
E3(10,5)49–21654–216prescribed symmetry (cyclic symbol shift and reversal) + local search2026-11-03this pagecodewords 1 kB
af66b7099e3be1a6…
E3(11,4)471–1944525–1944prescribed symmetry (all symbol permutations and reversal) + local search2026-11-03this pagecodewords 7 kB
188b37b46232302b…
E3(9,5)25–7226–72local search on the full conflict graph2026-10-30this pagecodewords 1 kB
d0125f9477a6e8e8…
E3(10,4)202–648214–648local search on the full conflict graph2026-10-30this pagecodewords 3 kB
a779abe32f8e9307…
E3(9,4)88–21697–216local search on the full conflict graph2026-10-30this pagecodewords 1 kB
84807952f74fb97f…
E3(8,4)41–7245–72local search on the full conflict graph2026-10-30this pagecodewords 1 kB
55fb5c48ae32c99a…
E3(7,4)21–2422–24local search on the full conflict graph2026-10-30this pagecodewords 1 kB
d12a99d782914093…
E3(11,3)2972–70293205–7029prescribed symmetry (symbol swap and reversal) + local search2026-10-30this pagecodewords 39 kB
380e6e628ef3dee2…
E3(10,3)1133–28111261–2811local search on the full conflict graph2026-10-30this pagecodewords 14 kB
09a8e07988f564ba…
E3(9,3)438–937503–937local search on the full conflict graph2026-10-30this pagecodewords 6 kB
83b83addd095089d…
E3(8,3)179–324201–324local search on the full conflict graph2026-10-30this pagecodewords 2 kB
4474956503afe82d…
E3(7,3)71–10883–108local search on the full conflict graph2026-10-30this pagecodewords 1 kB
90d9acbb186355bb…
E2(12,4)54–8455–84local search on the full conflict graph2026-10-30this pagecodewords 1 kB
96075d21863f1270…
E2(11,4)32–4233–42local search on the full conflict graph2026-10-30this pagecodewords 1 kB
ae414fe2fffabe7f…
E2(12,3)179–256180–256local search on the full conflict graph2026-10-30this pagecodewords 3 kB
a0d12eb8b83dac60…
E2(11,3)104–136106–136local search on the full conflict graph2026-10-30this pagecodewords 2 kB
b4c4f5db49aae059…
E4(14,4)≥15206≥153767lexicode2026-10-26this pagecodewords 2.3 MB
9cd1825c0f96bbfc…
E4(13,4)≥7744≥46908lexicode2026-10-26this pagecodewords 657 kB
4d79e4c843ac7b24…
E4(13,3)≥40604≥500882lexicode2026-10-26this pagecodewords 7.0 MB
3ab0ef6e02273359…
E4(12,4)≥4574≥14522lexicode2026-10-10this pagecodewords 189 kB
a90753c71c599a6b…
E4(12,3)≥40604≥141943lexicode2026-10-10this pagecodewords 1.8 MB
19e55fe76f3ca4bc…
E4(9,6)27–12832–128prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
f034a20a9dac7571…
E4(8,6)14–3216–32prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
773280cf9dc013ce…
E4(9,5)97–384100–384prescribed symmetry + local search2026-09Yeung 2026codewords 2 kB
f0647e8c17476633…
E4(8,5)38–9644–96prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
b777627b5733905e…
E4(7,5)18–2420–24prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
74f19f275251e84f…
E4(9,4)495–2048520–2048prescribed symmetry + local search2026-09Yeung 2026codewords 6 kB
f48053ee681fc579…
E4(7,4)65–12872–128prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
85cb1ceb68de50cc…
E4(6,4)28–3230–32prescribed symmetry + local search2026-09Yeung 2026codewords 1 kB
fc6fb24268384a77…
E4(9,3)3451–93603760–9360prescribed symmetry (C4) + local search
earlier: 3717 (Weindel & Heckel 2025)
2026-09Yeung 2026codewords 38 kB
9c7c0ce7c75fbf30…
E4(8,3)1132–23401148–2340prescribed symmetry (Klein four-group) + local search2026-09Yeung 2026codewords 11 kB
e98fe9d121189c38…
E4(7,3)356–614364–614prescribed symmetry (C3 x C2) + local search2026-09Yeung 2026codewords 4 kB
dadc469672cd5dfe…
E4(6,3)114–176120–176prescribed symmetry (Klein four-group) + local search2026-09Yeung 2026codewords 1 kB
adeaa3604074f5f2…
E4(11,3)≥40604≥42080OnlineMIS on the full conflict graph2025Weindel & Heckel 2025not published
E4(10,3)11743–3041712489–30417ReduMIS on the full conflict graph2025Weindel & Heckel 2025not published
E2(24,3)≥14089≥16927append one symbol to a code for E2(23,3), which Houghten's table gives as ≥16927–Houghten–
new code, linkedreported in the literature, codewords not publicfollows from an improved cell

Binary, fixed length

E2(n,d) for words of length n over 2 symbols. Houghten's table: binaryedit.html.

n\d123456789101112
1211111111111
2421111111111
3842111111111
41682211111111
532164221111111
664327422111111
71286412522211111
825612819942221111
9512256341354222111
10102451258–682184222211
1120481024106–13633–42116422221
1240962048180–25655–8416–189442222
166553632768≥1062≥70
20220219≥6208≥501≥44
23223222≥16927≥2344≥140
24224223≥16927≥3979≥210
32232231≥211170≥1667

Houghten's binary page has no rows for n = 13–15 or 17–19, 21, 22 and 25–31.

Ternary, fixed length

E3(n,d) for words of length n over 3 symbols. Houghten's table: ternaryedit.html.

n\d123456789101112
1311111111111
2931111111111
32793111111111
481277311111111
52438115531111111
672924335–361343111111
7218772983–10822–2483311111
865612187201–32445–7215–247331111
9196836561503–93797–21626–7212–18633111
1059049196831261–2811214–64854–21619–549–1453311
11311590493205–7029525–1944108–64836–16213–368–124331
123123118238–196831227–5832219–155763–48620–10811–367–9433

Quaternary, fixed length

E4(n,d) for words of length n over 4 symbols. Houghten's table: quaternaryedit.html.

n\d12345678910111213
14111111111111
216411111111111
3641641111111111
425664164111111111
510242564411411111111
640961024120–17630–32841111111
7163844096364–61472–12820–2484111111
865536163841148–2340204–51244–9616–325411111
949655363760–9360520–2048100–38432–12811–20541111
104104912489–304171520–8192249–153668–49620–8010–1654111
11411410≥42080≥4574≥676≥139≥41≥16≥9≥4≥411
12412411≥141943≥14522≥1894≥338≥79≥30≥14≥8≥4≥41
13413412≥500882≥46908≥5517≥879≥188≥54≥21≥12≥7≥4≥1
14414413≥1782677≥153767≥16440≥2346≥448≥112≥37≥18≥7≥5≥4
15415414≥1782677≥510118≥49992≥6486≥1107≥251≥45≥19≥10≥6≥4
16416415≥1782677≥1712330≥154463≥6486≥1107≥251≥83≥32≥16≥8≥6
17417416≥1782677≥1712330≥154463≥6486≥1107≥322≥143≥57≥24≥13≥8

Houghten's quaternary page gives only lower bounds for n > 10; they are written with ≥ here.

Binary, variable length

The largest code over 2 symbols with minimum edit distance d whose longest word has length n. Houghten's table: binaryeditvar.html.

n\d123456789101112
1311111111111
2731111111111
31553111111111
431113311111111
563216331111111
61274310533111111
72558516733311111
851117123–331263331111
9102334140–6716–2575333111
10204768361–13525–51116333311
1140951365109–27136–10314–238633331
1281912731188–54355–20718–4712–1765333–53

Ternary, variable length

The largest code over 3 symbols with minimum edit distance d whose longest word has length n. Houghten's table: ternaryeditvar.html.

n\d12345678910
14111111111
213411111111
3401041111111
41213184111111
536491176411111
6109327436–5214541111
7328082079–15722–43944111
898412461195–47244–13016–288–134411
9295247381477–141794–39126–8513–407–13441
1088573221441134–4252203–117450–25619–12110–406–134–134

Notes

Reading the tables

A single number is the exact value. a–b means the value is between a and b. ≥a means only a lower bound is known. Hover a coloured cell to see where its value comes from and what Houghten's table gives; click it to jump to its entry in the list of improvements. In the variable-length tables a code may contain words of any length up to n, the empty word included.

Bounds that follow from others

Appending the same symbol to every word of a code leaves all distances unchanged, so Eq(n+1,d) ≥ Eq(n,d). A code with minimum distance d+1 also has minimum distance d, so Eq(n,d) ≥ Eq(n,d+1). Cells marked as following from an improved cell take their value this way. Every upper bound is Houghten's.

Checking a code

Each code file has a short header declaring q, n, d, the size and the SHA-256 of the sorted codewords, followed by one word per line. check.py needs only Python 3 and checks one file at a time:

python3 check.py codes/edit4_n13_d3_size500882.txt

Before it was listed, each code here was also accepted by three verifiers that share no code: a ball-marking check, a sort-based ball-collision check and a pairwise bit-parallel Levenshtein check.

How the new codes were found

The entries from Yeung 2026 came from searching for codes invariant under a chosen group of symbol permutations and reversal, which shrinks the search to orbits of words. Of the entries first published here, the large quaternary ones are lexicodes: take the words in lexicographic order and keep each one that is far enough from every word kept so far. Most binary and ternary ones come from iterated local search for a maximum independent set in the conflict graph, whose vertices are all qn words, with an edge between two words closer than d. Where that graph is too large, the search runs on the graph of orbits under a small group of symbol permutations and reversal, which the paper uses for the quaternary cells. The same search reproduces every exact value it was run on before any open cell was believed. The small codes at large d come from tabu search on the codewords themselves: random words are changed one symbol at a time, always making the change that most reduces how far the close pairs fall short of d, and a word is added whenever no pair is too close. All of these searches were run by an LLM coding agent under the protocol in the paper, which also describes what went wrong along the way.

Sources