Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных / Си структуры данных2.doc
Скачиваний:
113
Добавлен:
23.02.2015
Размер:
1.36 Mб
Скачать

8.2.2. Кривые Серпинского

Аналогично, путем наложения друг на друга нескольких кривых, получается рисунок из кривых Серпинского. Первые две из них С1 и С2 показаны на рис. 8.4.

C1

C2

Рис. 8.4. Кривые Серпинского

Главное отличие кривой Серпинского от кривой Гильберта в том, что первая кривая замкнута. Значит, основная рекурсивная схема должна давать разомкнутую кривую, четыре части которой соединяются линиями, не принадлежащими самому рекурсивному образу. Четыре составляющих образа обозначим через A, B, C, D.

Соединительные прямые будем обозначать стрелками, указывающими соответствующее направление. Будем предполагать, что направление задается целым параметром i как i·45 градусов. Кроме направлений, описанных в предыдущем примере, понадобятся ещё:

Основной образ кривых Серпинского задается схемой: S: A BCD

Рекурсивные составляющие по схемам:

A: A BDA

B: B C A B

C: C D B C

D: D A C D

Заметим, что горизонтальные и вертикальные отрезки - двойной длины. Если использовать ту же процедуру рисования линии, что и в случае кривых Гильберта, то приведенные рекурсивные схемы записываются в рекурсивный алгоритм:

procedure A(i,s: integer);

BEGIN

if i>0 then

begin

A(i-1,s); Line(7,s);

B(i-1,s); Line(0,2*s);

D(i-1,s); Line(1,s);

A(i-1,s);

end;

END;

Аналогично получаются процедуры для B, C, D. Главная программа строится по образу S. Ее задача - установить начальные значения для координат рисунка и задать единичную длину линий.

9. Алгоритмы Сжатия информации

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

Сжатие сокращает объем пространства, которое требуетсядля хранения файлов в ЭВМ, и количество времени, необходимоедля передачи информации по каналу установ­ленной ширины пропускания. Это есть форма кодирования. Другими целями кодиро­вания являются поиск и исправление ошибок, а также шифрование. Процесс поиска и исправления ошибок противоположен сжатию - он увеличивает избыточность дан­ных, когда их не нужно представлять в удобной для восприятия человеком форме. Удаляя из текста избыточность, сжатие способствует шифрованию, что затрудняет поиск шифра доступным для взломщика статистическим методом.

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

Одним из самых ранних и хорошо известных методов сжатия является алгоритм Хаффмана, который был и остается предметом многих исследований. Однако, в конце 70-х годов благодаря двум важным переломным идеям он был вытеснен. Од­на заключалась в открытии метода арифметического кодирования, имеющего схожую с кодированием Хаффмана функцию, но обладающего не­сколькими важными свойствами, которые дают возможность достичь значительного превосходства в сжатии. Другим новшеством был метод Зива-Лемпела, да­ющий эффективное сжатие и применяющий подход, совершенно отличный от хаффма­новского и арифметического. Обе эти техники со времени своей первой публикации значительно усовершенствовались, развились и легли в основу практических высо­коэффективных алгоритмов.