Чтобы ответить на ваши вопросы:
- C подходит.
- Это зависит от алгоритма или того, как вы думаете о «сжатии».
Мое мнение будет, сначала решите, хотите ли вы сделать lossless compression
или lossy compression
, а затем выберите алгоритм для реализации.Вот несколько указателей:
Для без потерь некоторые очень интуитивно понятны, например, кодировка run-length
, например, если есть 11 a
s и 5 b
s, вы просто кодируетеих как 11a5b
.Некоторые алгоритмы используют dictionary
, пожалуйста, обратитесь к LZW encoding
.Наконец, я рекомендую Huffman
кодирование, поскольку оно очень простое, простое и полезное для получения опыта в алгоритме обучения (для ваших учебных целей).
Для алгоритмов с потерями: Discrete Fourier Transform (DFT)
или wavelet
, используется в сжатии JPEG.Это полезно для понимания сжатия мультимедиа.
Википедия страница является хорошей отправной точкой.