Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.05.2020
Сообщений: 4
1

Сжатие данных алгоритмом LZ77

04.06.2020, 17:55. Показов 2595. Ответов 0

Author24 — интернет-сервис помощи студентам
Добрый день. Писал не большую програмку для сжатия текста. Выбрал алгоритм LZ77. Все было бы хорошо, тексты сжимает, но есть одно но. Когда имеется последовательность из одинаковых символов большого размера, алгоритм не правильно работает.
Теорию прочитал по алгоритму, но не могу придумать, как реализовать на питоне
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
src = 'aaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccc'
 
print('src: ' + src)
 
pack = ''
i = 0
while i < len(src):
    ln = 9
    found = False
    while not found and ln > 3:
        j = i - ln
        while j >= 0 and (i - j) < 100:
            if src[i:i+ln] == src[j:j+ln]:
                pack += '#%1d%2d' %(ln, (i - j))
                i += ln
                found = True
                break
            j -= 1
        ln -= 1
 
    if not found:
        pack += src[i]
        i += 1
    #Если хотим проверить эффективность сжатия
print(f'Сжатие символов (Сжатый текст - Исходный текст) {len(pack)} - {len(src)}')
print('pack: ' + pack)
#cp1251
 
unpack = ''
i = 0
while i < len(pack):
    if pack[i] != '#':
        unpack += pack[i]
        i += 1
        continue
    ln = int(pack[i+1: i+2])
    dist = int(pack[i+2: i+4])
    unpack += unpack[-dist: -dist+ln]
    i += 4
 
print('unpack: ' + unpack)
if src != unpack:
    print('!!!!')
    ln = ln - 1
 
 
print(f'{len(pack)} : {len(unpack)}')
Результат получается такой
pack: aaaa#4 4#8 8aaabbbb#4 4#8 8#9 9bbcccc#4 4#8 8#9 9#9 9cc
unpack: aaaaaaabbbbbbcccccc

Но если уменьшить максимальное количество символов в повторении с 9 до 3, то программа вообще не сжимает данные
Python
1
ln = 9  => ln = 3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2020, 17:55
Ответы с готовыми решениями:

Сжатие данных алгоритмом LZW
Добрый день, мне нужно реализовать сжатие текстового файла методом LZW. С самим кодированием...

Сжатие данных алгоритмом Хаффмана
Вопрос заключается в том какими классами пользуетесь для хранения битов. т.е мы знаем что буква А...

Сжатие строки алгоритмом сжатия данных LZMA
Помогите решить задачу. Есть массив char buf=&quot;строка для сжатия&quot;; в него записана строка, нужно её...

Сжатие информации методом LZ77
Привет! Люди помогите, может у кого есть исходник программы сжатия информации методом LZ77??? Я тут...

0
04.06.2020, 17:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2020, 17:55
Помогаю со студенческими работами здесь

Оптимизация кода сжатие по алгоритму LZ77
Добрый день, форумчане! Есть некий код, осуществляющий сжатие по алгоритму LZ77. Он прекрасно...

Сжатие изображений алгоритмом RLE
Подскажите пожалуйста, как имеющуюся картинку класа Image сжать с помощью алгоритма RLE, или же...

Сжатие файла алгоритмом LZW
Здравствуйте! Я написал программу, которая сжимает текстовую строку по алгоритму LZW. Теперь...

Сжатие изображение алгоритмом Jpeg
В общем задание на дипломную работу. Обыскал весь интернет, но ничего толкового не нашёл. Вся суть...

Сжатие и распаковка файла алгоритмом LZW
Всем привет, помогите пожалуйста с алгоритмом LZW. У меня есть &quot;шаблон&quot;, если так можно назвать,...

Сжатие текстовых файлов за алгоритмом GZIP
Здравствуйте! У меня возникла следующая проблема - сжать текстовый файл (с расширением txt) за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru