алгоритма LZ78?
Если хранить как строку, то "привет мир" выглядит как "0п0р0и0в0е0т0 0м3р0", однако закодированный текст содержащий цифры будет сложно идентифицировать в дальнейшем и могут начаться путаницы.
Есть вариант хранить в бинарном виде, используя просто [(0, 'a'), (1, 'b'), (0, 'c'), (2, 'd')] - список кортежей, однако я переживаю как это всё скажется на производительности 😩😩:(
ну можешь пиклить да, можешь взять msgpack какой-нибудь
И что это мне даст? То есть вариант 0п0р0и0в0е0т0 0м3р0 нельзя нормально декодировать (если будут встречаться например символы с цифрами)?
Вот пример, если кто не понял про цифры: 020р0и0в0е0т0 0м3р Декод: 2ривет мир
Не понял, пришли ли в итоге к ответу, но выглядит, будто тебе нужен struct.
Я понял исходя из ответов, что примерно все в этом чате < мем где школьник переступает ступеньки с алгоритмы, структуры данных и тд >
Ну, твоя формулировка вопроса требует некоторой телепатии.
чат beginners, чего еще ты ожидал? натирки мазями и массажа шиацу?
> Добрый день, как бы вы хранили в файле результат работы алгоритма LZ78? encoded_data = [...] with open("file", "wb") as f: for n, ch in encoded_data: f.write(n.to_bytes(4)) f.write(ch.encode("utf-32")) decoded_data = [] with open("file", "rb") as f: while n_bytes := f.read(4) and ch_bytes := f.read(4): decoded_data.append((int.from_bytes(n_bytes), ch_bytes.decode("utf-32")))
Одно из решений, однако оно очень странное: ты сохраняешь int32 для индекса - мб ок, дальше вижу utf-32? Последовательность символов под этим индексом может быть произвольной, в этом и заключается смысл сжатия. К сожалению, вариант отпадает. Я послушал Вас всех, один из вариантов пока хранить построчно, однако тоже есть минусы этого метода
Ну записывай длину еще
Обсуждают сегодня