Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры сиаод.docx
Скачиваний:
3
Добавлен:
02.08.2019
Размер:
962.05 Кб
Скачать

Реализация с массивом

Структура данных SW – массив (сортировка: около n log2 n операций).

Основные затраты связаны с операцией Insert.

Бинарный поиск места вставки на i-м шаге в массиве

из = n  i  1 элементов требует не более log2(+ 1) операций.

Как легко показать, суммарно за все  1 шагов алгоритма это даст около n log2 n операций.

Вставка элемента в найденное место в массиве из k элементов требует в среднем около k/2 операций.

Суммарно по всем значениям k от 1 до  1 это даст около n2/4 операций.

Итак, реализация алгоритма с использованием упорядоченного массива имеет сложность порядка n2.

Реализация со списками

Сначала создается упорядоченный список весов (на это требуется около n log2 n операций).

Всего около n log2 n

Реализация алгоритма Хаффмана с использованием пирамиды

Имеет сложность порядка n log2n.

Использует реализацию структуры SW на базе так называемой пирамиды

(бинарного дерева, обладающего свойством пирамидальности и размещенного в массиве – рассмотрим позднее).

В этом случае и операция извлечения минимального элемента, и операция вставки имеют сложность

порядка log2n.

Суммарно по всем шагам это дает сложность

порядка n log2n

  1. Кодирование информации по Хаффману. Оптимальность метода. (Лек 6)

  1. Энтропийная оценка оптимальной длины кода. (Лек 6)

  1. Динамическое кодирование по Хаффману. Постановка задачи и идея алгоритма. (Лек 6)

Недостатки статического метода Хаффмана :

  • двухпроходность алгоритма (сначала вычисляются веса , затем строится дерево (код));

  • необходимость передавать кодовое дерево вместе с последовательностью закодированных сообщений.

Алгоритм перестроения дерева Хаффмана

Пусть дерево Хаффмана (ДХ) строится так, что левый сын имеет вес не больший, чем правый.

При этом ДХ, вообще говоря, не единственно.

Пример: заданы веса W4 = (5, 4, 3, 2).

Дерево Хаффмана является строго бинарным и содержит ровно 2 1 узлов, n из которых являются листьями.

Действительно, пусть в строго бинарном дереве содержится n листьев (внешних узлов) и s внутренних узлов.

Тогда число исходящих из внутренних узлов веток есть 2s.

Подсчет этих же веток, как входящих во все узлы дерева, кроме корня, дает n + s  1.

Таким образом, 2= n + s  1.

Отсюда следует = n  1

и общее число узлов + s = 2 1.

В общем случае неубывающая последовательность весов x1  x2  x3    x21, получаемых в порядке взвешенного сочетания узлов в алгоритме Хаффмана, инвариантна для всех деревьев Хаффмана с заданными весами w1  w2    wn  1  wn.

При этом внутренние узлы имеют веса x1 + x2x3 + x4, …, x23 + x22 = x21.

Строго бинарное упорядоченное дерево

А) n внешних узлов (листьев) получили веса (w1, w2, …, wn) в каком-то порядке, и каждый внутренний узел получил вес, равный сумме своих сыновей;

  • Б) 2 1 узлов (внутренних и внешних) можно перечислить в такой последовательности (y1, y2, …, yn  1, yn), что если xi вес узла yi, то x1  x2    x21; узлы y21 и y2j братья (сыновья одного отца).

  • упорядоченное дерево дерево Хаффмана