Вы можете использовать Компаратор бит для сортировки по любому свойству в вашем пользовательском классе.
Посмотрите McIlroy "Разработка Списка Написания" в его страница пабов. Классическая старая статья о проверке правописания на миникомпьютере, который ограничения отображают удивительно хорошо на тех, Вы перечислили. Подробный анализ разделения аффикса и двух различных методов сжатия: фильтры Цветка и связанное Кодирование методом Хаффмана схемы редкий bitset; я пошел бы с фильтрами Цветка, вероятно, в предпочтении к методу, который он выбрал, который еще сжимает некоторых КБ по значительной стоимости в скорости. ( Жемчуг Программирования имеет короткую главу о данной статье.)
Видят, что также методы раньше хранили словарь в системах полнотекстового поиска, например, Введение в Информационный поиск . В отличие от вышеупомянутых методов это не имеет никаких ложных положительных сторон.
Фильтр Цветка ( http://en.wikipedia.org/wiki/Bloom_filter и http://www.coolsnap.net/kevin/?p=13 ) является структурой данных, используемой для хранения слов словаря в очень сжато в некоторых программах проверки правописания. Существует, однако, риск для ложных положительных сторон.
Я предложил бы заполненное суффиксное дерево. Хорошее сжатие на списках слов, и превосходные времена поиска.
Подвести итог:
я собирался предложить фильтры Цветка, но они имеют ненулевые ложные положительные стороны.
Вместо этого Программируя Жемчуг говорит о подобном наборе требований (/usr/share/dict/words
в 41K).
Это проявило подход сокращения основ: Например: отправленный был корень, так мог иметь пред - и добавленные постфиксы:
Можно получить 30% + степень сжатия из хранения слов как последовательные суффиксы в 7-разрядном формате. Я не уверен, чем это называют, но это переводит довольно эффективно в древовидную структуру.
напр.: a+n+d+s|an+d+y|and+es+roid
является 26 символами, по сравнению с:
реклама как и любой андроид
Анд, который равняется 33.
Факторинг в степень сжатия на 12,5% для хранения как 7-разрядное содержание, это - приблизительно 31%-е общее количество сжатия. Степень сжатия зависит, конечно, на размере и содержании Вашего списка слов.
Превращение это в древовидную структуру с 26 корнями, вероятно, привело бы к поискам, которые быстрее, чем сравнение подстроки простого текста с плоским файлом.
Задумываются о нем, если Вы только используете 26 символов плюс два для разделителей, можно сделать все в 5 битах, которое является сжатием на 37,5% в и себя, принося вышеупомянутый пример более чем к 50%-му уровню сжатия.
Я не эксперт по этому, но не дерево префикса в значительной степени стандартное решение этого? Это хранит общие префиксы слов только однажды.
Я думаю, что Ваш лучший выбор Сжатое Суффиксное дерево / Сжатый Суффиксный Массив . Можно найти богатство информации в вышеупомянутых ссылках. Это - продолжающаяся область исследования, очень интересная действительно.
Для чистого сжатия Максимальное Сжатие сайт предлагает некоторые результаты для английского списка слов на 4 МБ, лучшая программа сжимает это приблизительно до 400 КБ. Некоторые другие ресурсы сжатия для сжатия текста/слова страница Hutter Prize и Сравнительный тест Сжатия Крупного текста .
Knuth упоминает "Patricia trie" в Искусство издания 3 Программирования. Я никогда не использовал его ни для какой реальной работы, но возможно который был бы полезен.
редактирование: каково Ваше ограничение RAM? Если у Вас есть партии больше RAM, чем доступный ROM, возможно, сжатие данных в ROM (требующий распаковки в RAM) является правильным способом пойти. Я предполагаю, есть ли у Вас носитель, но не большая сумма RAM, технически Вы могли бы также сохранить части структуры данных как сжатые блобы в памяти и последний использованный кэш для имения в наличии нескольких из них, затем динамично распаковать соответствующий блоб, когда это не находится в кэше.