Групповое кодирование или алгоритм сжатия RLE



алгоритм сжатия rle простой простейший алгоритм

Здравствуйте, дорогие пользователи. Сегодня я хотел бы  начать цикл статей, посвященных алгоритмам сжатия данных. Я планирую рассмотреть три основных алгоритма сжатия, а именно алгоритм сжатия rle, алгоритм хаффмана и lzw.

Сегодня я начну рассказывать о простейшем из них: алгоритме rle. Его суть заключается в кодировании повторов. То есть мы берем, например последовательность “CCCCCCCCDDDDEEE” и преобразовываем ее к виду “8C4D3E”.

Простейший алгоритм сжатия RLE:

1. Считываем символы последовательности до тех пор, пока символы повторяются.

2.Считаем количество повторяющихся символов.

3. Записываем в выходной файл количество повторяющихся символов.

4.Затем записываем символ, который повторялся.

Пример реализации функции кодирования последовательности алгоритмом rle на с++  :

void kod_rle(ifstream& inpf, ofstream& outf)
{
char sym;//символ, который мы будем считывать
	int kol=1;// количество повторяющихся символов
	while(!inpf.eof())
	{
		inpf.get(sym);//считываем символ
		if(sym!=inpf.peek())// если символ не совпадает со слеующим
			// символом в файле
		{
			outf<<kol<<sym;// записываем результаты в выходной файл
			kol=0;
		}
		kol++;
	}

}

Функция декодирования rle:

void de_kod_rle(ifstream& inpf, ofstream& outf)
{
char sym1,sym2;// предыдущий и последующий символы
	while(inpf.peek()!=EOF)
	{
		inpf>>sym1>>sym2;// считываем символы
		for(int i=0;i<sym1-48;i++)outf<<sym2;

	}

}

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

И напоследок приведу пример, где можно применять алгоритм rle для сжатия это простые графические изображения(иконки,графические рисунки)

пример картинки для сжатия алгоритм rle простой
Групповое кодирование или алгоритм сжатия RLE
Пожалуйста оцените качество материала

Помогая проекту BEST-EXAM, вы делаете образование более доступным для каждого человека, внесите и вы свой вклад -
поделитесь этой статьей в социальных сетях!
кнопка вверх картинка