Другие языки программирования и технологии
Закодировать сообщения "AABCDAACCCCDBB", "КИБЕРНЕТИКИ" и "СИНЯЯ СИНЕВА СИНИ", вычислить длины в битах полученных кодов,
используя алгоритмы LZW. Сколько читал и искал, так и не понял как сделать Просьба помочь в решении или указать ответы Заранее спасибо!
На примере первой строки:
0) Составить словарь:
----------
A = 00
B = 01
C = 10
D = 11
----------
1) Читаем 1-й символ строки и получаем код:
Буфер = [A]
Код A = 00
Результат = (nul)
2) Читаем следующий символ строки:
Буфер = [A]A
Такого значения в словаре нет. Делаем себе пометку: добавить АА в словарь.
Код А = 00
Результат = (00)
Сдвигаем буфер: [A]А <- сдвиг <- [A]
==========
Добавим в словарь: AA = 100.
Т. к. произошло увеличение разрядности словаря, то и всем остальным символам словаря нужно увеличить разрядность!
Новый словарь:
----------
A = 000
B = 001
C = 010
D = 011
AA = 100
----------
3) Очередной символ:
Буфер = [ A ]B
Такого значения в словаре нет. Делаем себе пометку: добавить АB в словарь.
Код A = 000
Результат = 00(000)
Сдвигаем буфер: [ A ]B <- сдвиг <- [ B ]
==========
Добавим в словарь: AB = 101.
4) Очередной символ:
Буфер = [ B ]C
Такого значения в словаре нет. Делаем себе пометку: добавить BC в словарь.
Код B = 001
Результат = 00000(001)
Сдвигаем буфер: [ B ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: BC = 110.
5) Очередной символ:
Буфер = [ C ]D
Такого значения в словаре нет. Делаем себе пометку: добавить CD в словарь.
Код C = 010
Результат = 00000001(010)
Сдвигаем буфер: [ C ]D <- сдвиг <- [ D ]
==========
Добавим в словарь: CD = 111.
6) Очередной символ:
Буфер = [ D ]A
Такого значения в словаре нет. Делаем себе пометку: добавить DA в словарь.
Код D = 011
Результат = 00000001010(011)
Сдвигаем буфер: [ D ]A <- сдвиг <- [ A ]
==========
Добавим в словарь: DA = 1000.
Т. к. произошло увеличение разрядности словаря, то и всем остальным символам словаря нужно увеличить разрядность!
Новый словарь:
----------
A = 0000
B = 0001
C = 0010
D = 0011
AA = 0100
AB = 0101
BC = 0110
CD = 0111
DA = 1000
----------
7) Очередной символ:
Буфер = [ A ]A
Тут самое интересное!! !
Такое значение в словаре есть!
Буфер = [ AA ]
8) Очередной символ:
Буфер = [ AA ]C
Такого значения в словаре нет. Делаем себе пометку: добавить AAC в словарь.
Код AA = 0100
Результат = 00000001010011(0100)
Сдвигаем буфер: [ AA ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: AAC = 1001.
8) Очередной символ:
Буфер = [ C ]C
Такого значения в словаре нет. Делаем себе пометку: добавить CC в словарь.
Код C = 0010
Результат = 000000010100110100(0010)
Сдвигаем буфер: [ C ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: CC = 1010.
9) Очередной символ:
Буфер = [ C ]C
Такое значение в словаре есть!
Буфер = [ CC ]
10) Очередной символ:
Буфер = [ CC ]C
Такого значения в словаре нет. Делаем себе пометку: добавить CCC в словарь.
Код CC = 1010
Результат = 0000000101001101000010(1010)
Сдвигаем буфер: [ CC ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: CCC = 1011.
11) Очередной символ:
Буфер = [ C ]D
Такое значение в словаре есть!
Буфер = [ CD ]
12) Очередной символ:
Буфер = [ CD ]B
Такого значения в словаре нет. Делаем себе пометку: добавить CDB в словарь.
Код CD = 0111
Результат = 00000001010011010000101010(0111)
Сдвигаем буфер: [ CD ]B <- сдвиг <- [ B ]
==========
Добавим в словарь: CDB = 1100.
13) Очередной символ:
Буфер = [ B ]B
Такого значения в словаре нет. Делаем себе пометку: добавить BB в словарь.
Код B = 0001
Результат = 000000010100110100001010100111(0001)
Сдвигаем буфер: [ B ]B <- сдвиг <- [ B ]
14) Последний символ:
Буфер = [ B ]
Код B = 0001
Результат = 0000000101001101000010101001110001(0001)
= = = = = = = = = = = = = = = = = = = = = =
Как-то так!
00000001010011010000101010011100010001
... если где-то не ошибся.. . ;-)
0) Составить словарь:
----------
A = 00
B = 01
C = 10
D = 11
----------
1) Читаем 1-й символ строки и получаем код:
Буфер = [A]
Код A = 00
Результат = (nul)
2) Читаем следующий символ строки:
Буфер = [A]A
Такого значения в словаре нет. Делаем себе пометку: добавить АА в словарь.
Код А = 00
Результат = (00)
Сдвигаем буфер: [A]А <- сдвиг <- [A]
==========
Добавим в словарь: AA = 100.
Т. к. произошло увеличение разрядности словаря, то и всем остальным символам словаря нужно увеличить разрядность!
Новый словарь:
----------
A = 000
B = 001
C = 010
D = 011
AA = 100
----------
3) Очередной символ:
Буфер = [ A ]B
Такого значения в словаре нет. Делаем себе пометку: добавить АB в словарь.
Код A = 000
Результат = 00(000)
Сдвигаем буфер: [ A ]B <- сдвиг <- [ B ]
==========
Добавим в словарь: AB = 101.
4) Очередной символ:
Буфер = [ B ]C
Такого значения в словаре нет. Делаем себе пометку: добавить BC в словарь.
Код B = 001
Результат = 00000(001)
Сдвигаем буфер: [ B ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: BC = 110.
5) Очередной символ:
Буфер = [ C ]D
Такого значения в словаре нет. Делаем себе пометку: добавить CD в словарь.
Код C = 010
Результат = 00000001(010)
Сдвигаем буфер: [ C ]D <- сдвиг <- [ D ]
==========
Добавим в словарь: CD = 111.
6) Очередной символ:
Буфер = [ D ]A
Такого значения в словаре нет. Делаем себе пометку: добавить DA в словарь.
Код D = 011
Результат = 00000001010(011)
Сдвигаем буфер: [ D ]A <- сдвиг <- [ A ]
==========
Добавим в словарь: DA = 1000.
Т. к. произошло увеличение разрядности словаря, то и всем остальным символам словаря нужно увеличить разрядность!
Новый словарь:
----------
A = 0000
B = 0001
C = 0010
D = 0011
AA = 0100
AB = 0101
BC = 0110
CD = 0111
DA = 1000
----------
7) Очередной символ:
Буфер = [ A ]A
Тут самое интересное!! !
Такое значение в словаре есть!
Буфер = [ AA ]
8) Очередной символ:
Буфер = [ AA ]C
Такого значения в словаре нет. Делаем себе пометку: добавить AAC в словарь.
Код AA = 0100
Результат = 00000001010011(0100)
Сдвигаем буфер: [ AA ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: AAC = 1001.
8) Очередной символ:
Буфер = [ C ]C
Такого значения в словаре нет. Делаем себе пометку: добавить CC в словарь.
Код C = 0010
Результат = 000000010100110100(0010)
Сдвигаем буфер: [ C ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: CC = 1010.
9) Очередной символ:
Буфер = [ C ]C
Такое значение в словаре есть!
Буфер = [ CC ]
10) Очередной символ:
Буфер = [ CC ]C
Такого значения в словаре нет. Делаем себе пометку: добавить CCC в словарь.
Код CC = 1010
Результат = 0000000101001101000010(1010)
Сдвигаем буфер: [ CC ]C <- сдвиг <- [ C ]
==========
Добавим в словарь: CCC = 1011.
11) Очередной символ:
Буфер = [ C ]D
Такое значение в словаре есть!
Буфер = [ CD ]
12) Очередной символ:
Буфер = [ CD ]B
Такого значения в словаре нет. Делаем себе пометку: добавить CDB в словарь.
Код CD = 0111
Результат = 00000001010011010000101010(0111)
Сдвигаем буфер: [ CD ]B <- сдвиг <- [ B ]
==========
Добавим в словарь: CDB = 1100.
13) Очередной символ:
Буфер = [ B ]B
Такого значения в словаре нет. Делаем себе пометку: добавить BB в словарь.
Код B = 0001
Результат = 000000010100110100001010100111(0001)
Сдвигаем буфер: [ B ]B <- сдвиг <- [ B ]
14) Последний символ:
Буфер = [ B ]
Код B = 0001
Результат = 0000000101001101000010101001110001(0001)
= = = = = = = = = = = = = = = = = = = = = =
Как-то так!
00000001010011010000101010011100010001
... если где-то не ошибся.. . ;-)
Похожие вопросы
- Как из готового отформатировонного текста получить код html?? (вопрос мб не корректен, я хз как обьяснить подругому ><)
- Сколько нужно бит, чтобы закодировать 40 битную информацию ?
- Как в Паскале написать прогу для перевода чисел из двоичной в шестьнадцатиричную.Длина кода 64 бит.(64 цифры в вводимом
- Вычислить arth Есть ли формула для проверки правильности вычисления .и правильный ли код?
- сколько бит требуется чтобы закодировать 2 цвета????
- Плиииз кто поможет по коду ошибки и синему экрану????
- Как получить двоичный код файла?
- Заменить бит в байте. Ассемблер
- Знающие люди объясните мне пожалуйста разницу между 32 бит и 64 битом!
- Биты и байты