Я изучал это сжатие, пытаясь понять, как оно работает, и вот что я получил. Это может быть совершенно неправильно, хотя:
Допустим, у нас есть файл с содержимым «ТЕСТ».
Теперь мне нужно получить вероятности, и поскольку в этом слове есть 3 разных символа, которые я делаю:
T -> num_of_this_char_duplicates / number_of_content_char_length = 2/4 = 0.5
E -> 1/4 = 0.25
S -> 1/4 = 0.25
Таким образом, от 0 до 1
0----------------0.5--------0.75----------1
t e s
теперь мы ищем T из TEST, t находится в диапазоне от 0 до 0,5, и в этом диапазоне мы вычисляем новые диапазоны для t, e , s
формула, которую я нашел для этого, равна new_upper_limit = lower_limit + ((upper_limit - lower_limit) * probability)
, поэтому новый диапазон будет таким:
t e s
0----0.25-------0.375--------0.5
то же самое для второго символа из строки e, который находится между 0,25 и 0,375
t e s
0.25----0.3125-------0.34375-------0.375
и т. д. для s
t e s
0.34375----0.359375------0.3671875------0.375
и, наконец, снова для t
0.34375----0.359375
, поэтому последний диапазон должен быть сжатыми данными? верно?
Так что, если я случайно выберу число между последним диапазоном, скажем, 0,355 и повторю процесс, это число будет
between 0 - 0.5, which gives back T letter.
Next 0.355 is between 0.25 - 0.375 which gives back letter E.
Next 0.355 is between 0.34375 - 0.375 which gives back letter S.
Last 0.355 is between 0.34375 - 0.359375 which gives back letter T.
Так что, если все это правильно, мои вопросы будут такими:
На декодирующей части мне кажется, что мне нужно сохранить последний диапазон с предопределенными вероятностями символов, чтобы иметь возможность его декодировать. Правильно ли это?
Также в части декодирования как узнать, что 0,34375 - 0,359375 - это последний диапазон или последний символ в этом диапазоне, это из длины символов? Как и для каждого символа, должен быть поддиапазон, и то же самое для подсчета числа? Или это проверка как последний созданный диапазон?
- Если это число по числу символов, нужен ли последний диапазон или просто число между этими диапазонами?
Спасибо за ваше время!