
- •Э.Н.Гордеев теория информации и сложность алгоритмов
- •Гордеев Эдуард Николаевич теория информации и сложность алгоритмов.
- •Раздел 1. Информация и Алгоритм. Коды объектов. 6
- •Раздел 2. Сжатие информации. 11
- •Раздел 1. Информация и Алгоритм. Коды объектов. 5
- •2.2 Основной вывод: информация и алгоритм – взаимообусловленные понятия. 8
- •Раздел 2. Сжатие информации. 11
- •Раздел 1. Информация и Алгоритм. Коды объектов.
- •Введение
- •Предмет курса
- •Основная цель курса
- •Что такое информация?
- •Подходы к определению информации.
- •Описательный подход
- •Использование аналогии и эквивалентности
- •Основной вывод: информация и алгоритм – взаимообусловленные понятия.
- •Представление (кодирование) информации.
- •Раздел 2. Сжатие информации.
- •Кодирование информации. Количество информации. Сжатие информации.
- •Энтропия по Хартли.
- •Энтропия по Шеннону.
- •Математическая модель: алфавитное кодирование случайного источника.
- •Энтропия по Шеннону и энтропия по Хартли.
- •Свойства энтропии.
- •Алгоритмы кодирования
- •Алгоритм Шеннона (Фано).
- •Алгоритм Хаффмана
- •Блочное кодирование Хаффмена.
- •Замечание. О длине блока и сложности кодирования.
- •Блочное кодирование и теорема Шеннона.
- •Раздел 3. Передача информации. Защита от искажений.
- •Передача информации по каналу с шумом.
- •Передача информации по двоичному симметричному каналу с шумом
- •Корректирующие способности кодов. Границы мощности.
- •Теорема Шеннона для канала с шумом.
- •Факты из теории вероятности.
- •XI → канал → y
- •Вероятностное доказательство теоремы.
- •Комбинаторное доказательство теоремы.
- •Примеры кодов, исправляющих ошибки. Линейные коды.
- •Спектр кода.
- •Линейные коды.
- •Теорема об эквидистнантных кодах
- •Рекомендованная литература
Алгоритмы кодирования
Алгоритм Шеннона (Фано).
Передаваемые символы располагаются в порядке убывания (или возрастания) вероятностей. Назовем верхней частью этой получившейся последовательности ту, которая начинается минимального номера. Эта упорядоченная последовательность фиксируется, затем идут шаги алгоритма. Каждый шаг – это деление пополам этой последовательности, а затем получившихся на предыдущем этапе частей. Деление происходит так, чтобы в каждой половине суммы вероятностей отличались бы на минимально возможную величину (при нескольких варианта берется, например, с избытком часть с наименьшими номерами букв).
При каждом делении к коду верхней части добавляется 0, а нижней – 1.
Так происходит до тех пор, пока в каждой из получившихся частей не останется по одному элементу. Тогда приписанные части последовательности нулей и единиц и будут кодами этих элементов.
Алгоритм Хаффмана
Алгоритм дает результат не хуже, чем метод Шеннон-Фано.
Для случая двоичного кодирования код строится при помощи бинарного корневного дерева. (В случае произвольного q используется q-арное дерево). Из каждой вершины выходит два ребра: правое помечаем 1, левое – 0. Листья такого дерева кодируются последовательностью пометок от корня к листу. Как было показано выше, множество соответствующих этим листьям слов образует префиксный код.
Вначале мы строим вершины дерева (листья), соответствующие передаваемым буквам. Они помечаются значениями вероятностей. Затем на каждом шаге берутся две вершины с наименьшими пометками. Они образуют родительский узел, пометка которого равна сумме пометок вершин, и исключаются из дальнейшего рассмотрения. Шаги продолжаются до появления корня.
Блочное кодирование Хаффмена.
Алгоритм Хаффмена применяется не к самим буквам а к их блокам Тогда теорема Шеннона распространяется уже не буквы, а на блоки. В качестве вероятности блока берется произведение вероятностей, входящих в него букв. Если стоимость блока поделить на количество букв в нем, то «получим стоимость кодирования на одну букву».
Замечание. О длине блока и сложности кодирования.
Выше мы говорили об опасном стремлении минимизировать затраты на представление информации. Проиллюстрируем это.
Говорят, что сложность вычисления tT(n) f(n)-ограничена, если tT(n)f(n).
Отсюда такие термины, как полиномиально ограниченная (полиномиальная) сложность (т.е. f(n) - некоторый полином) или экспоненциально ограниченная(экспоненциальная) сложность (f(n) - некоторая экспонента).
С ростом длины блока k количество блоков растет экспоненциально. Сложность алгоритма Хаффмена пропорциональна количеству кодируемых слов, т.е. не меньше O(2k). Следующие две таблицы показывают разницу между экспоненциальными и полиномиальными алгоритмами.
Первая таблица позволяет оценить скорость роста некоторых полиномиальных и экспоненциальных функций.
|
Значение n |
||||||
Функция сложности |
10 |
20 |
30 |
40 |
50 |
60 |
|
n |
0.00001 сек |
0.00002 сек |
0.00003 сек |
0.00004 сек |
0.00005 сек |
0.00006 сек |
|
n2 |
0.0001 сек |
0.0004 сек |
0.0009 сек |
0.0016 сек |
0.0025 сек |
0.0036 сек |
|
n3 |
0.001 сек |
0.008 сек |
0.027 сек |
0.064 сек |
0.125 сек |
0.216 сек |
|
n5 |
0.1 сек |
3.2 сек |
24.3 сек |
1.7 мин |
5.2 мин |
13 мин |
|
2n |
0.001 сек |
1 сек |
17.9 мин |
12.7 дней |
35.7 лет |
366 веков |
|
3n |
0.059 сек |
58 мин |
6.5 лет |
3855 веков |
2х108 веков |
1.3х1013веков |
В следующей таблице отражено влияние совершенствования ЭВМ на возможности алгоритмов.
|
Размеры наибольшей задачи, решаемой за один час |
||
Функция сложности |
На современных ЭВМ |
На ЭВМ, в 100 раз более быстрых |
На ЭВМ, в 1000 раз более быстрых |
n |
a |
100a |
1000a |
n2 |
b |
10b |
31.6b |
n3 |
c |
4.64c |
10c |
n5 |
d |
2.5d |
3.98d |
2n |
e |
e+6.64 |
e+9.97 |
3n |
f |
f+4.19 |
f+6.29 |
Эти таблицы, в частности, иллюстрируют различие между полиномиальными и экспоненциальными алгоритмами. Тем самым аргументируется внимание к разделению алгоритмов на классы по трудоемкости.
На практике используются адаптивные алгоритмы. Предположим закодированная блочным кодом Хаффмена информация куда-то передается. Среда передачи – канал- характеризуется некоторой скоростью передачи (см. ниже) v (количество символов в единицу времени), В то же време компьютер, который использует кодер имеет производительность, позволяющую ему кодировать со скоростью u (количество символов в единицу времени). Хорошее сжатие информации позволяет увеличить первую скорость, но уменьшает вторую. Адаптивный алгоритм подбирает такую длину блока k, чтобы v и u примерно равнялись друг другу, но при этом u>v. В противном случае канал будет простаивать из-за задержек с выполнением кодирования.