labrab4-5_Kuznetsovoy_Olgi_gr_6231K
.docx
При разбиении на подгруппы можно сделать большей по вероятности как верхнюю, так и нижнюю подгруппу. В моём примере большая по вероятности нижняя.
Subdividing, it is possible to make more probable either upper or lower group. In my example the lower one is more probable.
50
H=∑p(ai)log2p(ai)= 4,573834146
1
50
Iср =∑p(ai)n(ai)= 4,620954551
1
H – энтропия (entropy)
p(ai) – вероятность символа (the probability of the symbol)
Iср - среднее количество двоичных разрядов, используемых при кодировании символов по алгоритму Шеннона-Фано (the average number of binary bytes)
n(ai) — число двоичных разрядов в кодовой комбинации, соответствующей символу ai (the number of binary bytes, conforming ai symbol)
Построенный код близок к наилучшему эффективному коду по Шеннону, но не является лучшим. Можно и больше сжать сообщение.
A ready-built code is close to the optimal effective code by Shannon, but it is not the best. It is possible to compress the message better
Пример декодирования сообщения
Моё сообщение: СИЛА ТРЕНИЯ
В закодированном виде:
0101110100100110001110110100110110111101000101
При помощи таблицы его можно расшифровать.
|
шаг |
комбинация |
кол-во символов |
символ |
|
1 |
010 |
4 |
- |
|
2 |
0101 |
2 |
- |
|
3 |
01011 |
1 |
с |
|
4 |
101 |
2 |
- |
|
5 |
1010 |
1 |
и |
|
6 |
010 |
4 |
- |
|
7 |
0100 |
2 |
- |
|
8 |
01001 |
1 |
л |
|
9 |
100 |
2 |
- |
|
10 |
1000 |
1 |
а |
|
11 |
111 |
1 |
|
|
12 |
011 |
2 |
- |
|
13 |
0110 |
1 |
т |
|
14 |
100 |
2 |
- |
|
15 |
1001 |
1 |
р |
|
16 |
101 |
2 |
- |
|
17 |
1011 |
1 |
е |
|
18 |
011 |
2 |
- |
|
19 |
0111 |
1 |
н |
|
20 |
101 |
2 |
- |
|
21 |
1010 |
1 |
и |
|
22 |
001 |
5 |
- |
|
23 |
0010 |
3 |
- |
|
24 |
00101 |
1 |
я |
Моя наименьшая длина кодового слова равна трём.
В итоге получилась та же «сила трения», как и в закодированном сообщении.
Метод Хаффмана. (Huffman coding)
Для двоичного кода алгоритм Хаффмана сводится к следующему:
For binary code Huffman algorithm is the following:
Шаг 1. Символы выписываются в основной столбец и снова сортируются от самой большой вероятности к самой маленькой. Два последних символа объединяются в один вспомогательный, которому приписывается суммарная вероятность.
Step 1. The symbols are written in the main column and again sorted from the biggest to the smallest. The last two symbols are united in one auxiliary, which is given a total probability.
|
Сим волы |
Вероятности р(а1) |
Вспомогательные вычисления |
|||||||||||||
|
|
Шаг1 |
|
Шаг2 |
|
Шаг 3 |
|
Шаг 4 |
|
Шаг 5 |
|
Шаг 6 |
|
Шаг7 |
||
|
а1 |
|
|
0,22 |
|
0,22 |
|
0,26 |
|
0,32 |
|
0,42 |
|
0,58 |
|
1,0 |
|
а2 |
0,20 |
|
0,20 |
|
0,20 |
|
0,22 |
|
0,26 |
|
0,32 |
|
0,42 |
|
|
|
а3 |
0,16 |
|
0,16 |
|
0,16 |
|
0,20 |
|
0,22 |
|
0,26 |
|
|
|
|
|
а4 |
0,16 |
|
0,16 |
|
0,16 |
|
0,16 |
|
0,20 |
|
|
|
|
|
|
|
а5 |
0,10 |
|
0,10 |
|
0,16 |
|
0,16 |
|
|
|
|
|
|
|
|
|
а6 |
0,10 |
|
0,10 |
|
0,10 |
|
|
|
|
|
|
|
|
|
|
|
а7 |
0,04 |
|
0,06 |
|
|
|
|
|
|
|
|
|
|
|
|
|
а8 |
0.02 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Шаг 2. То, что осталось, и полученная суммарная вероятность снова располагаются по убыванию в дополнительном столбце, а две последних вероятности складываются. Повторять пока в последнем столбике должна остаться единица.
The rest and the result are again sorted by decrease in the auxiliary column and the last two probabilities are added. It is repeated till 1 rests in the last column.
Шаг 3. Строится кодовое дерево и составляются кодовые слова.
«Корнем» дерева будет единица. Оттуда направляются две ветви. Ветви с большей вероятностью присваивается символ 1, а с меньшей — символ 0. Это повторяется до тех пор, пока не дойдём до каждого символа.
Step 3. The Huffman tree is generated and codewords are composed.
1 is the ‘root’ of the tree. Two branches grow from there. The branch with bigger probability is given 1, with less – 0. It is repeated till we reach each symbol.

Кодовые слова составляются от начала к концам. Каждому ответвлению влево пишется символ 1, вправо — символ 0.
Codewords are composed from the beginning to the end. Each offshoot on the left is given 1, on the right – 0.
Поскольку только концам дерева сопоставляются кодовые слова, то ни одно кодовое слово не будет началом другого. Можно разбить последовательность кодовых слов на отдельные кодовые слова.
So long as the ends of the tree oppose the codewords, not a single codeword can be the beginning of the other one. It is possible to divide the combination of the codewords into some separated codewords.
Теперь, двигаясь по кодовому дереву сверху вниз, можно записать для каждой буквы соответствующую ей кодовую комбинацию
Now, moving from the top to the end, it is possible to write for each letter the right word combination.
|
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
a8 |
|
01 |
00 |
111 |
110 |
100 |
1011 |
10101 |
10100 |
Вывод:
Мы освоили метод построения кодов дискретного источника информации, используя конструктивный метод, предложенный К.Шенноном и Н.Фано и методику Д.Хаффмана и на примере показали однозначность раскодирования имеющегося сообщения. Методика Хаффмана лучше, поскольку кодирование однозначно. Символ будет кодироваться меньшим количеством нулей и единиц.

0,22