Сжатие файлов с помощью C++

Я хочу сделать свою собственную программу сжатия текстовых файлов. Я мало знаю о программировании на C++, но я изучил все основы и написание/чтение файла. Я много искал в google о сжатии и видел много разных методов сжатия файла, таких как LZW и Huffman. Проблема в том, что большинство из них не имеют исходного кода или имеют очень сложный. Я хочу спросить, знаете ли вы хорошие веб-страницы, где я могу учиться и делать программу сжатия себя?

изменить: Я оставлю эту тему открытой еще на некоторое время, так как планирую изучить ее в ближайшие несколько дней, и если у меня возникнут вопросы, я задам их здесь.

4 ответов


большинство алгоритмов довольно сложны. Но все они имеют общее, что они берут данные, которые повторяются, и хранят их только один раз и имеют систему знания, как их распаковывать (возвращая повторяющиеся сегменты на место)

вот простой пример, вы можете попробовать реализовать.

У нас есть этот файл данных

XXXXFGGGJJ

DDDDDDDDAA

XXXXFGGGJJ

здесь мы имеем символы, которые повторяются, и две строки, которые повторяются. Таким образом, вы можете начать с поиска способа уменьшить размер файла.

вот простой алгоритм сжатия.

4XF3G2J

8D2A

4XF3G2J

Итак, у нас есть 4 из X, один из F, 3 из G и т. д.


вы можете попробовать этот страница Он содержит четкую прогулку по основам сжатия и первым принципам.


сжатие-не самая простая задача. Я учился в колледже, чтобы изучить алгоритмы сжатия, такие как LZW и Huffman, и я могу сказать вам, что они не так просты. Если C++ - ваш первый язык,и вы только начинаете в этом роде, я бы не рекомендовал пытаться написать свой собственный алгоритм сортировки. Если вы более опытны, то я бы попытался написать Источник без какого - либо кода, предоставляемого вам-это показывает, что вы действительно понимаете сжатие алгоритм.

вот как меня учили - профессор объяснил алгоритм в очень широких терминах, а затем либо мы его реализуем (на Java, заметьте), либо мы ответим на вопросы о том, как алгоритм будет вести себя при определенных обстоятельствах. Если бы мы могли сделать любой из них, то мы действительно знали алгоритм - без него, показывая нам какой-либо источник вообще-это хороший навык для развития;)


дерево кодирования Хаффмана не слишком сложны, я бы начал с них. Вот ссылка: Пример: Деревья Кодирования Хаффмана