Алгоритм сжатия для кодирования списков слов

Вы можете использовать Компаратор бит для сортировки по любому свойству в вашем пользовательском классе.

14
задан Tall Jeff 2 January 2009 в 20:06
поделиться

9 ответов

Посмотрите McIlroy "Разработка Списка Написания" в его страница пабов. Классическая старая статья о проверке правописания на миникомпьютере, который ограничения отображают удивительно хорошо на тех, Вы перечислили. Подробный анализ разделения аффикса и двух различных методов сжатия: фильтры Цветка и связанное Кодирование методом Хаффмана схемы редкий bitset; я пошел бы с фильтрами Цветка, вероятно, в предпочтении к методу, который он выбрал, который еще сжимает некоторых КБ по значительной стоимости в скорости. ( Жемчуг Программирования имеет короткую главу о данной статье.)

Видят, что также методы раньше хранили словарь в системах полнотекстового поиска, например, Введение в Информационный поиск . В отличие от вышеупомянутых методов это не имеет никаких ложных положительных сторон.

13
ответ дан 24 October 2019 в 05:06
поделиться

Фильтр Цветка ( http://en.wikipedia.org/wiki/Bloom_filter и http://www.coolsnap.net/kevin/?p=13 ) является структурой данных, используемой для хранения слов словаря в очень сжато в некоторых программах проверки правописания. Существует, однако, риск для ложных положительных сторон.

5
ответ дан 24 October 2019 в 05:06
поделиться

Я предложил бы заполненное суффиксное дерево. Хорошее сжатие на списках слов, и превосходные времена поиска.

http://en.wikipedia.org/wiki/Suffix_tree

4
ответ дан 24 October 2019 в 05:06
поделиться

Подвести итог:

  • нулевые ложные положительные стороны
  • нулевые ложные отрицательные стороны
  • высокая степень сжатия
  • никакая потребность в инверсии (т.е. никакое необходимое несжатие)

я собирался предложить фильтры Цветка, но они имеют ненулевые ложные положительные стороны.

Вместо этого Программируя Жемчуг говорит о подобном наборе требований (/usr/share/dict/words в 41K).

Это проявило подход сокращения основ: Например: отправленный был корень, так мог иметь пред - и добавленные постфиксы:

  • существующий
  • представляют
  • представление
  • искажение
2
ответ дан 24 October 2019 в 05:06
поделиться

Можно получить 30% + степень сжатия из хранения слов как последовательные суффиксы в 7-разрядном формате. Я не уверен, чем это называют, но это переводит довольно эффективно в древовидную структуру.

напр.: a+n+d+s|an+d+y|and+es+roid

является 26 символами, по сравнению с:

реклама как и любой андроид

Анд, который равняется 33.

Факторинг в степень сжатия на 12,5% для хранения как 7-разрядное содержание, это - приблизительно 31%-е общее количество сжатия. Степень сжатия зависит, конечно, на размере и содержании Вашего списка слов.

Превращение это в древовидную структуру с 26 корнями, вероятно, привело бы к поискам, которые быстрее, чем сравнение подстроки простого текста с плоским файлом.

Задумываются о нем, если Вы только используете 26 символов плюс два для разделителей, можно сделать все в 5 битах, которое является сжатием на 37,5% в и себя, принося вышеупомянутый пример более чем к 50%-му уровню сжатия.

2
ответ дан 24 October 2019 в 05:06
поделиться

Я не эксперт по этому, но не дерево префикса в значительной степени стандартное решение этого? Это хранит общие префиксы слов только однажды.

1
ответ дан 24 October 2019 в 05:06
поделиться

Я думаю, что Ваш лучший выбор Сжатое Суффиксное дерево / Сжатый Суффиксный Массив . Можно найти богатство информации в вышеупомянутых ссылках. Это - продолжающаяся область исследования, очень интересная действительно.

2
ответ дан 24 October 2019 в 05:06
поделиться

Для чистого сжатия Максимальное Сжатие сайт предлагает некоторые результаты для английского списка слов на 4 МБ, лучшая программа сжимает это приблизительно до 400 КБ. Некоторые другие ресурсы сжатия для сжатия текста/слова страница Hutter Prize и Сравнительный тест Сжатия Крупного текста .

1
ответ дан 24 October 2019 в 05:06
поделиться

Knuth упоминает "Patricia trie" в Искусство издания 3 Программирования. Я никогда не использовал его ни для какой реальной работы, но возможно который был бы полезен.

редактирование: каково Ваше ограничение RAM? Если у Вас есть партии больше RAM, чем доступный ROM, возможно, сжатие данных в ROM (требующий распаковки в RAM) является правильным способом пойти. Я предполагаю, есть ли у Вас носитель, но не большая сумма RAM, технически Вы могли бы также сохранить части структуры данных как сжатые блобы в памяти и последний использованный кэш для имения в наличии нескольких из них, затем динамично распаковать соответствующий блоб, когда это не находится в кэше.

0
ответ дан 24 October 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: