Программирование начинающего: как программировать мой собственный алгоритм сжатия данных?
Это лето, и поэтому я решил взять на себя обязательство написать программу сжатия данных, предпочтительно в C-коде. У меня есть достойные новички, которые понимают, как работает сжатие. У меня просто несколько вопросов:
1) Будет ли подходящий язык программирования для выполнения этой задачи?
2) Должен ли я работать в байте с входным файлом? Или на двоичном уровне?
Если кто-то может просто подтолкнуть меня в правильном направлении, я бы очень признателен. Я хотел бы сам это кодировать, но не использовать ранее существовавшую библиотеку сжатия или что-то в этом роде.
Ответы
Ответ 1
1) Будет ли подходящий язык программирования для выполнения этой задачи?
Да.
2) Должен ли я работать в байте с входным файлом? Или как-то на двоичном уровне?
Они одинаковы, поэтому вопрос не имеет смысла.
не использовать ранее существовавшую библиотеку сжатия
Можно ли использовать ранее существовавший алгоритм сжатия? Существуют десятки, а "алгоритм сжатия" - при использовании с Google - покажет много полезной информации.
Ответ 2
Вы можете начать с просмотра кодировки Хаффмана. Многие компьютерные науки classes реализуют это как проект, поэтому он должен быть управляемым. C было бы подходящим для кодирования Хаффмана, но было бы проще сделать это сначала на языке более высокого уровня, чтобы вы поняли понятия. Есть слайды, подсказки и примерный проект доступно в Java для проекта уровня мастера в Университете Пенсильвании (найдите "huff" на этой странице).
Ответ 3
-
C - отличный вариант для написания программы сжатия. Вы также можете использовать множество других языков.
-
Возможно, ваш компьютер не может напрямую адресовать единицы памяти меньше байта (по большому счету по определению), поэтому работа с байтами, вероятно, является хорошим выбором. Некоторые из способов работы с данными будут зависеть от выбранного алгоритма сжатия.
Удачи!
Ответ 4
-
Да, C хорошо подходит для такого рода работ.
-
Будете ли вы работать с байтами или битами, будет зависеть от алгоритма, который вы решите реализовать. Например, кодирование Хаффмана по сути является битоориентированным, тогда как многие другие алгоритмы сжатия не являются.
Ответ 5
Чтобы ответить на ваши вопросы:
- C подходит.
- Это зависит от алгоритма или того, как вы думаете об "сжатии".
Мое мнение будет, сначала решить, хотите ли вы сделать lossless compression
или lossy compression
, а затем выбрать алгоритм для реализации. Вот несколько указателей:
Для без потерь некоторые из них очень интуитивно понятны, например кодирование run-length
например, если существует 11 a
и 5 b
s, вы просто кодируете их как 11a5b
.
В некоторых алгоритмах используется dictionary
, см. LZW encoding
.
Наконец, я рекомендую кодировку Huffman
, поскольку она очень проста, проста и полезна для получения опыта в алгоритме обучения (для вашей образовательной цели).
Для потерянных, Discrete Fourier Transform (DFT)
или wavelet
, используется при сжатии JPEG. Это полезно для понимания сжатия мультимедиа.
Википедия страница является хорошей отправной точкой.