Алгоритм Хаффмана нуждается в помощи для хранения кода - PullRequest
1 голос
/ 15 декабря 2009

Я написал программу для получения кода для каждого символа, как показано в выводе программы.

введите текст: nslfaslfjasfj text = "nslfaslfjasfj"

a: 2

е: 3

J: 2

л: 2 * +1011 *

п: 1

s: 3

Алгоритм Хаффмана Ниже "CHAR CODE":

n код: 111

J код: 110

код F: 10

s код: 01

l код: 001

код: 000

Следующим моим шагом должно быть сохранение вышеупомянутого в структуре и сравнение его с моим исходным текстом = "nslfaslfjasfj" для кодирования как "11101 ..... и т. Д.".

Я обнаружил проблему при хранении "CHAR CODE" в структуре. Должно ли оно храниться в виде строки типа string s = "111", а затем сохраняться в структуре? .. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Обычно целью кодирования Хаффмана является уменьшение длины сообщения, то есть его сжатие. Это означает, что вы хотите писать биты, а не символы «0» и «1». Поэтому имеет смысл хранить ваши символьные коды также в виде битов и использовать битовые операции для передачи их в поток. Сохранение пары (код символа, длина кода) для каждого элемента достаточно для построения кодировки.

Сказав это, вы можете сделать это со строками, как вы предлагаете. Это не так, и это может немного облегчить отладку, но будет работать хуже.

2 голосов
/ 15 декабря 2009

Вам понадобится сделать что-то вроде «BitWriter». Мы рассмотрели тему побитового ввода-вывода в Java для кодирования Хаффмана в классе структур данных в моем университете, слайды лекций находятся здесь бесплатно . Очевидно, Java! = C, но концепция та же.

1 голос
/ 15 декабря 2009

Учитывая, что вы пытаетесь сжать что-то, использование строк было бы ужасной идеей. Вы захотите хранить коды символов как двоичные файлы.

...