Одна структура, которую я видел для минимизации пробела в орфографическом словаре, состояла в том, чтобы закодировать каждое слово как:
- количество символов (байт), общее с последним; и
- новый финал.
Итак, список слов
HERE would encode as THIS
sanctimonious 0,sanctimonious
sanction 6,on
sanguine 3,guine
trivial 0,trivial
Вы сохраняете 7 байтов прямо там (19%), я подозреваю, что экономия была бы аналогичной для словаря из 20000 слов только из-за минимального расстояния между (общими префиксами) смежных слов.
Для ускорения поиска в памяти была таблица из 26 записей, в которой содержались начальные смещения для слов, начинающихся с a, b, c, ..., z. Слова в этих смещениях всегда имели 0 в качестве первого байта, поскольку они не имели общих букв с предыдущим словом.
Похоже, это что-то вроде трэя, но без указателей, которые наверняка стали бы дорогостоящими, если бы с каждым символом в дереве был связан 4-байтовый указатель.
Имейте в виду, это было из моих дней CP / M, когда память была гораздо более скудной, чем сейчас.