Сжатие файлов с помощью C++
Я хочу сделать свою собственную программу сжатия текстовых файлов. Я мало знаю о программировании на C++, но я изучил все основы и написание/чтение файла. Я много искал в google о сжатии и видел много разных методов сжатия файла, таких как LZW и Huffman. Проблема в том, что большинство из них не имеют исходного кода или имеют очень сложный. Я хочу спросить, знаете ли вы хорошие веб-страницы, где я могу учиться и делать программу сжатия себя?
изменить: Я оставлю эту тему открытой еще на некоторое время, так как планирую изучить ее в ближайшие несколько дней, и если у меня возникнут вопросы, я задам их здесь.
4 ответов
большинство алгоритмов довольно сложны. Но все они имеют общее, что они берут данные, которые повторяются, и хранят их только один раз и имеют систему знания, как их распаковывать (возвращая повторяющиеся сегменты на место)
вот простой пример, вы можете попробовать реализовать.
У нас есть этот файл данных
XXXXFGGGJJ
DDDDDDDDAA
XXXXFGGGJJ
здесь мы имеем символы, которые повторяются, и две строки, которые повторяются. Таким образом, вы можете начать с поиска способа уменьшить размер файла.
вот простой алгоритм сжатия.
4XF3G2J
8D2A
4XF3G2J
Итак, у нас есть 4 из X, один из F, 3 из G и т. д.
вы можете попробовать этот страница Он содержит четкую прогулку по основам сжатия и первым принципам.
сжатие-не самая простая задача. Я учился в колледже, чтобы изучить алгоритмы сжатия, такие как LZW и Huffman, и я могу сказать вам, что они не так просты. Если C++ - ваш первый язык,и вы только начинаете в этом роде, я бы не рекомендовал пытаться написать свой собственный алгоритм сортировки. Если вы более опытны, то я бы попытался написать Источник без какого - либо кода, предоставляемого вам-это показывает, что вы действительно понимаете сжатие алгоритм.
вот как меня учили - профессор объяснил алгоритм в очень широких терминах, а затем либо мы его реализуем (на Java, заметьте), либо мы ответим на вопросы о том, как алгоритм будет вести себя при определенных обстоятельствах. Если бы мы могли сделать любой из них, то мы действительно знали алгоритм - без него, показывая нам какой-либо источник вообще-это хороший навык для развития;)
дерево кодирования Хаффмана не слишком сложны, я бы начал с них. Вот ссылка: Пример: Деревья Кодирования Хаффмана