Даю все наработки по архивированию словаря (см.файл-архив).
Сейчас алгоритм такой:
Слова сортируются по количеству букв и по алфавиту.
Слова разбиваются по блокам words_2 ... words_8, в каждом блоке только слова с указанным количеством букв (от 2 до 8).
Каждый блок содержит:
- заголовок с количеством слов в блоке (2 байта);
- последовательность битов архивированных слов.
Формирование последовательности битов:
1.
- если текущее слово не имеет одинаковую первую букву с предыдущим словом, то вставляется последовательность битов 000;
- если текущее слово имеет 1 одинаковую первую букву с предыдущим словом, то вставляется последовательность битов 001;
- если текущее слово имеет 2 одинаковых первых букв с предыдущим словом, то вставляется последовательность битов 10;
- если текущее слово имеет 3 одинаковых первых букв с предыдущим словом, то вставляется последовательность битов 11;
- если текущее слово имеет 4 одинаковых первых букв с предыдущим словом, то вставляется последовательность битов 010;
- если текущее слово имеет 5 одинаковых первых букв с предыдущим словом, то вставляется последовательность битов 011.
(Для первого слова блока записывается последовательность битов 000).
2. Оставшиеся неодинаковые буквы текущего слова записываются последовательно своими 5-битными кодами.
3. Переход к следующему слову и п.1.
---
Исходный словарь еще не до конца подчищен от лишних слов.
Нужно всё уместить в 34500 байт.
Сейчас пока получается около 38000 байт. Подсчитал, получается с текущим алгоритмом, чтобы уместиться в 34500 байт, нужно около 13500 слов в словаре.




Ответить с цитированием