Главная страница

курсовая6. Курсовая работа Кредитный рынок и его место в системе макроэкономического кругооборота


Скачать 340.59 Kb.
НазваниеКурсовая работа Кредитный рынок и его место в системе макроэкономического кругооборота
Дата14.05.2019
Размер340.59 Kb.
Формат файлаdocx
Имя файлакурсовая6.docx
ТипКурсовая
#76997
страница7 из 7
1   2   3   4   5   6   7


Адаптивная модель, пpи угpозе пpевышения общей суммой накопленных частот значение max_frequency, уменьшает все счетчики. Это пpиводит к тому, что взвешивать последние события тяжелее, чем более pанние. Т.о. показатели имеют тенденцию пpослеживать изменения во входной последовательности, котоpые могут быть очень полезными.


Заключение



Данные хранятся в форме, которая обеспечивает их наиболее тривиальное использование, скажем: обычные книжные тексты, ASCII коды текстовых редакторов, двоичные коды данных ЭВМ, отдельные отсчеты сигналов в системах сбора данных и т.д. Тем не менее, такое наиболее простое в использовании представление данных спрашивает вдвое - втрое, а иногда и в сотни раз больше места для их сохранения и полосу частот для их передачи, чем на самом деле нужно. Потому сжатие данных – это одно из наиболее злободневных направлений современной радиотехники. 
Таким образом, цель сжатия данных - обеспечить компактное представление данных, производимых источником, для их более экономного сохранения и передачи по каналам связи. 
В данной курсовой работе также были рассмотрены вопросы архивации данных различными методами: сжатие без потерь и с потерями данных. 

В практической части был реализован алгоритм арифметического кодирования и создана программа «Архиватор» со всеми необходимыми функциями.

Для реализации использовался язык C# и визуальная среда программирования Microsoft Visual Studio. В результате программное обеспечение очень компактно, интуитивно понятно и эффективно в работе.



Список литературы:


1. Нечта И.В. Введение в информатику [Электронный ресурс]: учебно-методическое пособие/ И.В. Нечта— Электрон. текстовые данные.— Новосибирск: Сибирский государственный университет телекоммуникаций и информатики, 2016.

2.Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. — Диалог-МИФИ, 2009.

3.Алгоритмы архивации данных  http://www.getinfo.ru/article473.html

4.Т.О. Сундукова, Г. В. Ваныкина Структуры и алгоритмы компьютерной обработки данных http://www.iprbookshop.ru/57384.html?replacement=1

5.Метод Xаффмана и родственные методы http://www.compression.ru/arctest/descript/huffmans.htm

6.Д. Сэломон. Сжатие данных, изображения и звука. — М.: Техно-сфера, 2010.

7.Работа со сжатыми данными https://studfiles.net/preview/4299290/page:2/

8.Семенов Ю.А. Сжатие данных с использованием преобразования Барроуза-Вилера https://knowledge.allbest.ru/programming/d-2c0a65625a2bd69b4c43a89421316c27.html

9.Сжатие с потерями https://spravochnick.ru/informatika/kodirovanie_informacii/szhatie_informacii_s_poteryami/


Приложение 1 . Программный код


// Количество бит для кода

const int bits_in_register = 16;

// Максимально возможное значение кода

const int top_value = (int)(((long)1 << bits_in_register) - 1);

// Диапазоны

const int first_qtr = (top_value / 4 + 1);

const int half = (2 * first_qtr);

const int third_qtr = (3 * first_qtr);

// Количество символов алфавита

const int no_of_chars = 256;

// Специальный символ Конец файла

const int eof_symbol = (no_of_chars + 1);

// Всего символов в модели

const int no_of_symbols = (no_of_chars + 1);

// Порог частоты для масштабирования

const int max_frequency = 16383;

// Таблицы перекодировки

public int[] index_to_char = new int[no_of_symbols];

public int[] char_to_index = new int[no_of_chars];

// Таблицы частот

public int[] cum_freq = new int[no_of_symbols + 1];

public int[] freq = new int[no_of_symbols + 1];

// Регистры границ и кода

public static long low, high;

public static long value;

// Поддержка побитовых операций с файлами

public static long bits_to_follow;

// Буфер

public static int buffer;

// Количество бит в буфере

public static int bits_to_go;

// Количество бит после конца файла

public static int garbage_bits;

// Указатель на входной файл

FileStream datain;

// Указатель на выходной файл

FileStream dataout;

//--------------------------------------------------------------

// Инициализация адаптивной модели

public void start_model ()

{

int i;

// Установки таблиц перекодировки

for ( i = 0; i < no_of_chars; i++)

{

char_to_index [i] = i + 1;

index_to_char [i + 1] = i;

}

// Установка счетчиков накопленных частот

for ( i = 0; i <= no_of_symbols; i++)

{

freq [i] = 1;

cum_freq[i] = no_of_symbols - i;

}

freq [0] = 0;

}

//------------------------------------------------------------

// Обновление модели очередным символом

void update_model(int symbol)

{

// Новый индекс

int i;

int ch_i, ch_symbol;

int cum;

// Проверка на переполнение счетчика частоты

if (cum_freq[0] == max_frequency)

{

cum = 0;

/* Масштабирование частот при переполнении (если счетчики частот достигли своего максимума, то делим на пополам) */

for (i = no_of_symbols; i >= 0; i--)

{

freq[i] = (freq[i] + 1) / 2;

cum_freq[i] = cum;

cum += freq[i];

}

}

/* Обновление перекодировочных таблиц в случае перемещения символа */

for (i = symbol; freq[i] == freq[i - 1]; i--) ;

if (i < symbol)

{

ch_i = index_to_char[i];

ch_symbol = index_to_char[symbol];

index_to_char[i] = ch_symbol;

index_to_char[symbol] = ch_i;

char_to_index[ch_i] = symbol;

char_to_index[ch_symbol] = i;

}

// Увеличить значение счетчика частоты для символа

freq[i] += 1;

// Обновление значений в таблицах частот

while (i > 0)

{

i -= 1;

cum_freq[i] += 1;

}

}

//------------------------------------------------------------

// Инициализация побитового ввода

void start_inputing_bits ()

{

bits_to_go = 0;

garbage_bits = 0;

}

//------------------------------------------------------------

// Ввод очередного бита сжатой информации

int input_bit ()

{

int t;

// Чтение байта если буфер пуст

if (bits_to_go == 0)

{

buffer = datain.ReadByte();

if (buffer == -1)

{

/* Помещение битов после конца файла, с проверкой небольшого их количества */

garbage_bits += 1;

if (garbage_bits > bits_in_register - 2)

{

Application.Exit();

}

eof = buffer;

}

bits_to_go = 8;

}

// Выдача очередного бита с правого конца

t = buffer & 1;

buffer >>= 1;

bits_to_go -= 1;

return t;

}

//------------------------------------------------------------

// Инициализация побитового вывода

public void start_outputing_bits ()

{

buffer = 0;

bits_to_go = 8;

}

//------------------------------------------------------------

// Вывод очередного бита сжатой информации

public void output_bit(int bit)

{

// Бит - в начало буфеpа

buffer >>= 1;

if (bit == 1)

buffer |= 0x80;

bits_to_go -= 1;

// Вывод полного буфера

if (bits_to_go == 0)

{

dataout.WriteByte((byte)buffer);

bits_to_go = 8;

}

}

//------------------------------------------------------------

// Очистка буфера побитового вывода

public void done_outputing_bits ()

{

dataout.WriteByte((byte)(buffer >> bits_to_go));

}

//------------------------------------------------------------

// Вывод указанного бита и отложенных ранее

public void output_bit_plus_follow(int bit)

{

output_bit(bit);

while (bits_to_follow > 0)

{

output_bit(bit + 2);

bits_to_follow--;

}

}

//------------------------------------------------------------

// Инициализация регистров границ и кода перед началом сжатия

public void start_encoding()

{

// Полный кодовый интервал

low = 0L;

high = top_value;

bits_to_follow = 0L;

}

//------------------------------------------------------------

// Очистка побитового вывода

public void done_encoding ()

{

/* Вывод двух бит, определяющих четверть, лежащую в текущем интервале */

bits_to_follow++;

if (low < first_qtr)

output_bit_plus_follow (0);

else

output_bit_plus_follow (1);

}

//------------------------------------------------------------

/* Инициализация регистров перед декодированием.

Загрузка начала сжатого сообщения*/

void start_decoding ()

{

int i;

int a;

value = 0L;

// Воод бит для заполнения значения кода

for (i = 1; i <= bits_in_register; i++)

{

a = input_bit();

value = 2 * value + a;

}

// Текущий интервал равен исходному

low = 0L;

high = top_value;

}

//------------------------------------------------------------

// Кодирование очередного символа

public void encode_symbol(int symbol)

{

// Ширина текущего кодового интервала

long range;

range = (long)(high - low) + 1;

// Пересчет значений границ

high = low + (range*cum_freq[symbol - 1]) / cum_freq[0] - 1;

low = low + (range*cum_freq[symbol]) / cum_freq[0];

// Вывод битов

for ( ; ; )

{

// Если в нижней половине

if (high < half)

output_bit_plus_follow(0);

// Если в верхней половине

else if (low >= half)

{

output_bit_plus_follow(1);

low -= half;

high -= half;

}

/* Если текущий интервал содержит середину, то вывод еще одного обратного бита позже */

else if (low >= first_qtr && high < third_qtr)

{

bits_to_follow += 1;

low -= first_qtr;

high -= first_qtr;

}

else

break;

// Расширить текущий рабочий кодовый интервал

low = 2 * low;

high = 2 * high + 1;

}

}

//------------------------------------------------------------

// Декодирование очередного символа

int decode_symbol ()

{

// Ширина интервала

long range;

// Накопленная частота

int cum;

// Декодируемый символ

int symbol;

int a;

// Определение текущего масштаба частот

range = (long) (high - low) + 1;

// Hахождение значения накопленной частоты для value

cum=(int)((((long)(value-low)+1)*cum_freq[0]-1)/ range);

// Поиск соответствующего символа в таблице частот

for (symbol = 1; cum_freq [symbol] > cum; symbol++);

// Пересчет границ

high = low + (range*cum_freq[symbol - 1]) / cum_freq[0] - 1;

low = low + (range * cum_freq [symbol]) / cum_freq [0];

// Удаление очередного символа из входного потока

for (;;)

{

// Расширение нижней половины

if (high < half)

{

}

// Расширение верхней половины

else if (low >= half)

{

value -= half;

low -= half;

high -= half;

}

// Расширение середины

else if (low >= first_qtr && high < third_qtr)

{

value -= first_qtr;

low -= first_qtr;

high -= first_qtr;

}

else

break;

// Увеличение масштаба интервала

low = 2 * low;

high = 2 * high + 1;

// Добавить новый бит

a = input_bit();

value = 2 * value + a;

}

return symbol;

}

//--------------------------------------------------------------

// Собственно адаптивное арифметическое кодирование

public void encode(string infile, string outfile)

{

int ch, symbol;

try

{

dataout = new FileStream(outfile, FileMode.Create);

}

catch (IOException exc)

{

return;

}

try

{

datain = new FileStream(infile, FileMode.Open);

}

catch (FileNotFoundException exc)

{

return;

}

start_model();

start_outputing_bits();

start_encoding();

// Цикл обработки символов

for ( ; ; )

{

try

{

// Чтение исходного символа

ch = datain.ReadByte();

}

catch (Exception exc)

{

return;

}

// Выход при достижении конца файла

if (ch == -1)

break;

// Найти рабочий символ

symbol = char_to_index[ch];

// Закодировать символ

encode_symbol(symbol);

// Обновить модель

update_model(symbol);

}

// Закодировать символ конца файла

encode_symbol(eof_symbol);

// Завершение кодирования

done_encoding();

done_outputing_bits();

dataout.Close();

datain.Close();

}

//------------------------------------------------------------

// Собственно адаптивное арифметическое декодирование

void decode(string infile, string outfile)

{

int ch, symbol;

try

{

dataout = new FileStream(outfile, FileMode.Create);

}

catch (IOException exc)

{

return;

}

try

{

datain = new FileStream(infile, FileMode.Open);

}

catch (FileNotFoundException exc)

{

return;

}

start_model ();

start_inputing_bits ();

start_decoding ();

// Цикл обработки сиволов

for (;;)

{

// Получаем индекс символа

symbol = decode_symbol ();

if (symbol == eof_symbol)

break;

// Получаем декодированный символ

ch = index_to_char [symbol];

// Записываем в выходной файл

dataout.WriteByte((byte)ch);

// Обновляем модель

update_model (symbol);

}

dataout.Close();

datain.Close();

}









Приложение 2. Интерфейс программы






Примечание. Для работы программы необходим Microsoft .NET Framework 2.0.

Список литературы:


1. Нечта И.В. Введение в информатику [Электронный ресурс]: учебно-методическое пособие/ И.В. Нечта— Электрон. текстовые данные.— Новосибирск: Сибирский государственный университет телекоммуникаций и информатики, 2016.

2.Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. — Диалог-МИФИ, 2009.

3.Алгоритмы архивации данных  http://www.getinfo.ru/article473.html

4.Т.О. Сундукова, Г. В. Ваныкина Структуры и алгоритмы компьютерной обработки данных http://www.iprbookshop.ru/57384.html?replacement=1

5.Метод Xаффмана и родственные методы http://www.compression.ru/arctest/descript/huffmans.htm

6.Д. Сэломон. Сжатие данных, изображения и звука. — М.: Техно-сфера, 2010.

7.Работа со сжатыми данными https://studfiles.net/preview/4299290/page:2/

8.Семенов Ю.А. Сжатие данных с использованием преобразования Барроуза-Вилера https://knowledge.allbest.ru/programming/d-2c0a65625a2bd69b4c43a89421316c27.html

9.Сжатие с потерями https://spravochnick.ru/informatika/kodirovanie_informacii/szhatie_informacii_s_poteryami/
1   2   3   4   5   6   7


написать администратору сайта