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

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

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

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

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

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

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

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

Суммарно по всем значениям k от 1 до n  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).

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

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

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

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

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

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

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

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

При этом внутренние узлы имеют веса x1 + x2, x3 + x4, …, x2n 3 + x2n 2 = x2n 1.

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

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

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

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