Перейти к содержимому

алгоритм сжатия, алгоритм 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 простой
3.7/5 - (3 голоса)
Спасибо что пользуетесь сайтом best-exam. Поделитесь сайтом с друзьями!