Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DiskretMat(lab).doc
Скачиваний:
8
Добавлен:
17.11.2019
Размер:
1.84 Mб
Скачать

Теоретическая часть

Еще одна очень важная трактовка набора из нулей и единиц – это кодирование геометрического изображения. Двухцветная картинка (будем по традиции говорить о черно-белой картинке – черный рисунок на белом фоне) может трактоваться как растр – совокупность отдельных точек, расставленных на прямоугольной решетке. Сопоставляя черным точкам единицы, а белым – нули, мы и кодируем таблицу в виде нулей и единиц. Затем таблицу можно «вытянуть» в одну линию, соединяя ее строки и столбцы.

Пример1: Рассмотрим решетку 16x16 и картинку на ней, изображенные на рис. 1. Кодируя столбцы числами в диапазоне 0:216-1, получаем вектор, который удобнее представить в шестнадцатеричной системе:

0000, 0000, 1800, 2С00, 2604, 7208, 4208, 4605, 2В83, 3С7С, 0C08, 0030, 0020, 0010, 0000, 0000.

Возможность точечного рисования картинок широко используется в вычислительной технике и в обработке изображений. Например, экран дисплея рассматривается как растр, в котором (условно, для какой-то конкретной модели) 960 строк по 1280 точек в каждой, т.е. в общем сложности 1 228 800 точек. Для сохранения такого набора нужно (по 8 точек в одном байте) 150 Кбайтов.

Рис. 1.

Указания к выполнению лабораторной работы.

  1. Заданный шестнадцатеричный вектор F перекодировать в двоичную систему.

  2. Полученный вектор записать в виде матрицы V (по столбцам, начиная с первого). Матрицу вывести на экран.

  3. Построить полученное изображение (желательно, в графическом режиме), интерпретируя 0 как белый квадрат, a 1 – как черный.

Варианты заданий

  1. 03С0, 0420, 03C0, 0420, 8810, 4B08, 3324, 1017,

F017, 1324, 2B08, 4810, 8420, 03C0, 0420, 03C0.

  1. 0100, 0300, 05FF, 0901, 1139, 2129, 4139, 8101,

8101, 413F, 2121, 113F, 7901, 05FF, 0300, 0100.

  1. 00F0, 7108, 8908, 8510, 8294, 83EA, 4231, 3411,

0C11, 3A22, 41DC, 4182, 4142, 4222, 3C1C, 0000.

  1. 2 0000, 0018, 0124, 01E2, 03C4, 04B8, 0250, 0314,

027C, 5650, 6F4C, 0F92, 00A2, 0154, 01C8, 0000.

  1. 6000, 900C, 8812, 47F1, 2811, 11F1, 1215, 13F3,

101B, 11F3, 1215, 13F1, 2811, 47F1, 8812, 700C.

  1. 0000, 0020, 0062, 00A6, 092A, 1A32, 2C22, 4823,

8823, 4823, 2C22, 1A32, 092A, 00A6, 0062, 0020.

  1. 0803, 080C, 1030, 20C0, 4300, FD00, 0180, 0280,

049E, 38E2, 4001, C001, 8001, 8002, 4004, 0000.

  1. 0007, 0185, 0241, 0241, 0221, 0222, 0224, 0028,

0030, 0060, 03A0, 3C20, 4020, 4020, 3FFF, 0020.

  1. 00F0, 7108, 8908, 8510, 8294, 83EA, 4231, 3411,

0C11, 3A22, 41DC, 4182, 4142, 4222, 3C1C, 0000.

  1. 0000, 0020, 0062, 00A6, 092A, 1A32, 2C22, 4823,

8823, 4823, 2C22, 1A32, 092A, 00A6, 0062, 0020.

  1. 0803, 080C, 1030, 20C0, 4300, FD00, 0180, 0280,

049E, 38E2, 4001, C001, 8001, 8002, 4004, 0000.

  1. 0100, 0300, 05FF, 0901, 1139, 2129, 4139, 8101,

8101, 413F, 2121, 113F, 7901, 05FF, 0300, 0100.

Лабораторная работа № 5

Теория кодирования. Алгоритм Хаффмана. Сжатие текста.

Постановка задачи. Реализовать алгоритм кодирования Хаффмана для некоторого заданного текста.

Теоретическая часть

Предварительно наложим некоторое ограничение на код: никакая кодовая последователь­ность не является началом другой кодовой последовательности. Это свойство называется свойством префикса, а код, обладающий таким свойством, называется префиксным кодом.

В предположении, что кодируемые символы появляются в тексте независимо, нужно стремиться уменьшать среднее число битов на один символ, т.е. математическое ожидание длины кодовой комбина­ции случайно выбранного символа, которое равно

где pi — вероятность, а si — длина кодовой последовательности i-го символа.

Сам алгоритм, основанный на доказанных в лекциях леммах, описывается в несколько строк: если в алфавите два символа, то нужно закодировать их 0 и 1, а если больше, то соединить два самых редких символа в один новый символ, решить получившуюся задачу и вновь разделить этот новый символ, приписав 0 и 1 к его кодовой последовательности.

При описании реализации этого метода многие авторы пишут о том, что список символов должен быть упорядочен по вероятностям символов, и это упорядочение нужно обновлять после каждой склейки. Так поступать, конеч­но, неразумно. После начального упорядочения (символы располагаются по возрастанию их вероятностей) дополнительных упорядочений производить не требуется. Достаточно организовать еще один список для новых символов. Добавление идет в конец этого списка, и возрастание вероятностей в нем обеспечивается само по себе. А при выборе двух символов с наименьшими вероятностями мы используем виртуальный список — результат слияния ста­рого и нового списков. Поскольку размер нового списка известен, (на один элемент короче исходного) такой список реализуется обычным массивом.

Указания к выполнению лабораторной работы

  1. Заданную вариантом скороговорку разбить на множество символов, автоматически (программно) подсчитать частоту встречаемости каждого символа, символы упорядочить по убыванию частот. Параллельно данному массиву (списку) хранить также и сам массив (список) частот.

  2. Выполнить алгоритм Хаффмана, сохраняя параллельно двум исходным массивам массив последних кодов (размер данного массива на каждом шаге кодирования уменьшается на единицу). Массивы предыдущих кодов при этом не сохраняются.

  3. Исходную скороговорку и результат занести в текстовые файлы.

  4. Вычислить относительный коэффициент сжатия: , где - размер исходного текстового файла, - размер сжатого текстового файла.

Варианты заданий

  1. Вез корабль карамель, наскочил корабль на мель, и матросы две недели карамель на мели ели.

  2. На дворе дрова, за двором дрова, под двором дрова, над двором дрова, дрова вдоль двора, дрова вширь двора, не вмещает двор дров! Наверно, выдворим дрова с вашего двора обратно на дровяной двор.

  3. Саша шустро сушит сушки. Сушек высушил штук шесть. И смешно спешат старушки

Сушек Сашиных поесть.

  1. Шел Шишонок по шоссе, Шел, шурша штанами. Шаг шагнет, шепнет: "Ошибка", Шевельнет ушами

  2. Пришел Прокоп - кипит укроп, ушел Прокоп - кипит укроп, как при Прокопе кипит укроп, так из без Прокопа кипит укроп.

  3. Даже шею, даже уши ты испачкал в черной туши. Становись скорей под душ. Смой с ушей под душем тушь. Смой и с шеи тушь под душем. После душа вытрись суше.

  4. Баркас приехал в порт Мадрас. Матрос принёс на борт матрас. В порту Мадрас матрас матроса Порвали в драке альбатросы.

  5. Краб крабу продал грабли. Продал грабли крабу краб; Грабь граблями сено, краб!

  6. Когда-то галок поп пугая, В кустах заметил попугая, И говорит тут попугай: "Пугать ты галок, поп, пугай. Но только галок, поп, пугая, Не смей пугать ты попугая!"

  7. Swan swam over the sea, Swim, swan, swim! Swan swam back again Well swum, swan!

  8. Ехал грека через реку. Видит грека - в реке рак. Сунул грека руку в реку. Рак за руку грека - цап!

  9. She sells sea shells by the sea shore. The shells she sells are surely seashells. So if she sells shells on the seashore, I'm sure she sells seashore shells.

Лабораторная работа № 6

Теория кодирования. Волновой метод и метод ДКП сжатия изображений.

Постановка задачи. Сравнить волновой метод и метод дискретного косинус-преобразования для растрового рисунка и рисунка, заданного кодами цветов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]