- •Раздел 1 основы теоретической информатики Лекция 1 Основные понятия и определения информатики
- •Терминалогия и объект информации
- •Предметная область информатики
- •Историческая справка развития вычислительной техники
- •Лекция 2 Научные основы информатики
- •2.1 Категории информатики
- •2.2 Аксиоматика информатики
- •2.3 Виды и свойства информации
- •2.4 Методы измерения информации
- •Лекция 3 Системы счисления
- •3.1 Основные понятия
- •3.2 Двоичная система счисления
- •3.3 Смешанные системы счисления
- •3.4 Перевод чисел в системах счисления
- •4.1 Перевод целых чисел из р-итой системы счисления в q-ичную.
- •3.4.2 Перевод дробной части
- •Лекция 4 Основы элементной базы цифровых автоматов
- •4.1 Логические элементы
- •4.2 Основы построения логических элементов
- •4.2.1 Образование и свойства электронно-дырочного перехода
- •4.2.2 Биполярные и полевые транзисторы
- •4.3 Элементы интегральных схем
- •Лекция 5 Формы представления и преобразования информации
- •5.1 Общие принципы представления информации. Числовая система эвм
- •5.2 Числовая система эвм
- •5.2.1 Представление целых чисел без знака и со знаком
- •5.2.2 Индикаторы переноса и переполнения в эвм
- •5.3 Представление символьной информации в эвм
- •5.4 Форматы данных
- •Раздел 2 Техническая база современной информатики Лекция 6 Общие принципы организации и работы компьютеров
- •6.1 Классификация и характеристики эвм
- •6.1.1 Классификация эвм по принципу действия
- •6.1.2 Классификация эвм по назначению
- •6.2.1 Устройства пк
- •6.2.2 Основные принципы построения компьютеров.
- •6.3 Элементарные команды эвм
- •Лекция 7 Архитектура и структура компьютера
- •7. 1 Архитектура и структура компьютера
- •7.2 Устройство центрального процессора
- •7.2.1 Структура микропроцессора
- •7.2.1.1 Операционная часть
- •Алгоритм работы уу следующий:
- •Алу предназначено для выполнения арифметических и логических операций преобразования информации.
- •Алгоритм работы алу следующий:
- •7.2.1.2 Интерфейсная часть мп
- •7.2.2 Типы микропроцессоров
- •7.3 Устройства памяти
- •7.3.1 Оперативная память
- •7.3.3 Специальная память
- •Лекция 8 Организация ввода-вывода информации
- •8.1 Устройства ввода и отображения текстовой и графической информации
- •8.1.1 Видеотерминальные устройства
- •8.2 Внешние запоминающие устройства
- •8.3 Печатающие устройства
- •8.3.1 Матричные принтеры
- •8.3.2 Струйные принтеры
- •8.3.3 Литерные принтеры
- •8.3.4 Лазерные принтеры
- •9.2 Основные способы передачи данных
- •9.3 Аппаратная реализация способов передачи данных
- •Лекция 10 Организация межкомпьютерной связи
- •10.1 Основные способы организации межкомпьютерной связи
- •10.2 Понятие топологии сети и базовых топологий
- •10.2.1 Топология типа «шина»
- •10.2.2 Топология типа «звезда»
- •10.2.3 Топология типа «кольцо»
- •10.2.4 Комбинированные топологии
- •Лекция 11 Классификация компьютерных сетей
- •11.1 Классификация вычислительных сетей
- •11.2 Способы соединения между собой локальных и глобальных вычислительных сетей
- •Лекция 12 Основы теории интернет
- •12.1 Сетевые протоколы
- •12.2 Система ip-адресации
- •12.3 Сервисы, предоставляемые сетевыми технологиями
- •12.3.1.Сервис Электронная почта (e-mail)
- •12.3.2 Сервис Сетевые новости Usenet
- •12.3.3 Сервис Списки рассылки (Maillists)
- •12.3.4 Сервис ftp - передача файлов
- •Лекция 13 Мультимедиа и мультимедийные технологии
- •13.1 Основные понятия мультимедиа
- •13.2 Аппаратные средства мультимедиа
- •13.3 Технологии мультимедиа
- •13.3.1 Образование
- •13.3.2 Техника
- •13.3.3 Промышленность
- •14.1.2 Свойства алгоритмов
- •14.1.3 Правила построения алгоритма
- •14.2 Формы записи алгоритма
- •14.2.1 Словесная форма записи алгоритмов
- •14.2.2 Графическая форма записи алгоритмов
- •14.2.3 Псевдокод
- •14.2.4 Программная форма записи алгоритма
- •14.3 Базовые алгоритмические структуры
- •14.3.1 Типы базовых алгоритмических структур
- •14.3.2 Линейная базовая структура ("последовательность")
- •П Рисунок 14.1 ример. Вычислить высоты треугольника со сторонами а, b, с, используя формулы:
- •14.3.3 Базовая структура "ветвление".
- •14.3.5 Базовая структура "цикл"
- •Лекция 15 Языки программирования и их уровни
- •15.1 Языки программирования
- •15.1.1 Машинный язык
- •15.1.1.1.Недостатки машинного языка.
- •15.1.2 Язык ассемблер
- •15.1.3 Языки программирования высокого уровня
- •15.2 Компоненты, образующие алгоритмический язык
- •15.2.1 Отличительные особенности алгоритмических языков
- •15.2.2 Компиляторы и интерпретаторы
- •15.2.3 Преобразование алгоритма в программу
- •15.2.4 Три составляющие алгоритмического языка
- •15.3 Общая характеристика языка Турбо Паскаль
- •15.4 Общая характеристика языка Си
- •16.1.1.2 Составные элементы Паскаль–программы
- •Операторы
- •Идентификаторы и имена
- •Описания
- •Переменные
- •Функции и процедуры
- •16.1.1.3 Синтаксис языка.
- •16.1.2 Структура программы на языке Паскаль
- •16.1.3 Классификация типов данных языка Паскаль
- •16.1.3.1 Простые типы Целые типы
- •Логический тип
- •Символьный тип
- •Перечисляемый тип
- •16.1.3.2 Структурированные типы Массив
- •Порядок использования строк.
- •Множество
- •Порядок использования множеств
- •Порядок использования типа файл:
- •16.2.1.2 Основные элементы Си-программы
- •Функции
- •Типы переменных
- •Целочисленные типы
- •Тип char
- •Вещественные типы
- •16.2.1.3 Синтаксис языка Идентификаторы
- •Предопределённые константы
- •Ключевые слова
- •16.2.2 Структура программы на языке Си.
- •16.2.3 Классификация типов данных языка Си.
- •16.2.3.1 Целочисленный (целый) тип данных (тип int)
- •16.2.3.2 Вещественный (данные с плавающей точкой) тип данных (типы float и double)
- •Лекция 17 Основные конструкции языка Turbo Pascal и c
- •17.1 Основные конструкции языка Turbo Pascal
- •17.1.1 Константы
- •17.1.2 Переменные
- •17.1.3 Функции
- •17.1.3.1 Стандартные функции
- •Математические функции
- •Функции преобразования типа
- •Функции для величин порядкового типа.
- •17.1.3.2 Функции, создаваемые пользователем
- •17.1.4 Знаки операций
- •17.1.4.1 Арифметические операции
- •17.1.4.2 Логические операции
- •17.1.4.3 Операции с битами информации
- •17.1.4.4 Операции отношения
- •17.1.5 Круглые скобки.
- •17.1.6 Порядок вычисления выражений
- •17.2 Основные конструкции языка c
- •17.2.1 Константы
- •17.2.1.1 Целочисленные константы
- •17.2.1.2 Вещественные константы
- •17.2.1.3 Символьные константы
- •17.2.1.4 Строковые константы
- •17.2.2 Переменные
- •17.2.3 Функции
- •17.2.3.1 Рекурсивные функции
- •17.2.3.2 Математические функции
- •17.2.4 Знаки операций
- •17.2.4.1 Операция присваивания
- •17.2.4.2 Операции отношения
- •17.2.4.3 Арифметические операции
- •17.2.4.4 Логические операции
- •17.2.4.5 Сдвиговые операции
- •17.2.4.6 Круглые скобки
- •17.2.4.7 Порядок вычисления выражений
- •Лекция 18 Операторы языка Turbo Pascal и c
- •18.2.2 Оператор goto
- •18.2.2.1 Назначение
- •18.4.2 Оператор switch
- •18.4.2.1 Назначение
- •18.4.2.2 Форма записи:
- •19.1.2 Порядок создания и использования процедур
- •19.1.3 Порядок создания и использования функций
- •19.1.4 Механизм формальных параметров
- •19.1.4.1 Параметры-значения
- •19.1.4.2 Параметры-переменные
- •19.1.4.3 Параметры-константы
- •19.1.4.4 Параметры без типа
- •19.1.4.5 Массивы и строки открытого типа
- •19.1.4.6 Параметры-процедуры и параметры-функции
- •19.1.5 Использование модулей в Турбо Паскаль
- •19.1.5.1 Стандартные модули Турбо Паскаль
- •Модуль System
- •Модуль Strings
- •Модуль Crt
- •Модуль Graph
- •Модуль Overlay
- •19.1.5.5 Исполнительная часть модуля
- •19.1.5.6 Секция инициализации
- •19.1.5.7 Использование модуля в основной программе
- •19.1.5.8 Использование идентификаторов элементов модуля
- •19.2 Подпрограммы в языке c
- •19.2.1 Характеристика подпрограмм
- •19.2.2 Порядок создания и использования функций
- •19.2.2.1 Определение функции
- •19.2.2.2 Вызов функции
- •19.2.2.3 Возврат в вызывающую функцию
- •19.2.3 Механизм формальных параметров
- •Лекция 20 Программное обеспечение и его основные характеристики
- •20.1 Основные понятия программного обеспечения
- •20.2 Классификация программного обеспечения
- •20.3 Системное программное обеспечение
- •20.4 Инструментальное программное обеспечение
- •20.5 Прикладное программное обеспечение
- •20.5.1 Универсальное прикладное по
- •20.5.2 Специализированное прикладное по
- •Лекция 21 Операционные системы
- •21.1 Назначение и основные функции операционных систем
- •21.1.1 Средства проверки дисков
- •21.1.2 Средства управления виртуальной памятью
- •21.1.3 Средства кэширования дисков
- •21.1.4 Средства резервного копирования данных
- •21.2 Понятие файловой системы
- •21.2.1 Обзор файловой системы fat
- •21.2.2 Обзор файловой системы ntfs
- •21.3 Взаимодействие с аппаратными средствами
- •Лекция 22 Операционная система windows
- •22.1 История развития ос Windows
- •22.2 Характеристика операционной системы Windows
- •22.2.2 Многозадачность и многопоточность
- •22.2.3 Графический пользовательский интерфейс
- •22.2.4 Использование виртуальной памяти
- •22.3.1 Объекты файловой системы
- •22.3.1.1 Объект – файл
- •22.3.1.2 Объект – папка
- •22.3.1.3 Объект – ярлык
- •22.3.2 Иерархическая структура подчиненности папок
- •22.3.3 Объекты пользовательского уровня – приложение и документ
- •22.3.4 Основные понятия графического интерфейса Windows
- •22.3.4.1 Формы указателя мыши при работе с объектами
- •22.3.4.2 Окна – объекты графического интерфейса
- •22.4.3.3 Калькулятор
- •22.4.4.1 Проверка диска
- •22.4.4.2 Дефрагментация диска
- •22.4.4.3 Мастер обслуживания дисков
- •22.5 Управляющая программа Total Commander
- •Лекция 23 Другие распространенные операционные системы
- •23.1 Характеристика операционной системы unix
- •23.2 Характеристика операционной системы Linux
- •23.3 Характеристика операционной системы Mac os
- •Лекция 24 Текстовый редактор Microsoft Word
- •24.1 Офисные системы
- •24.2 Текстовые редакторы
- •24.2.1 Основные версии Microsoft Word
- •24.2.2 Рабочее окно процессора Microsoft Word
- •24.2.2.1 Режимы отображения документов
- •24.2.2.2 Приемы работы с командами строки меню
- •24.2.2.3 Панели инструментов Microsoft Word
- •24.3 Приемы работы с текстами в процессоре Microsoft Word
- •24.3.1 Работа с текстом
- •Использование Тезауруса.
- •Средства автоматизации проверки правописания.
- •Средства рецензирования текста
- •24.3.1.4 Форматирование текста
- •24.3.2 Приемы и средства автоматизации разработки документов
- •24.3.2.1 Работа со стилями
- •24.3.2.2 Шаблоны
- •24.3.2.3 Темы
- •24.3.3 Создание комплексных документов
- •24.3.3.1 Работа с графическими объектами
- •25.2 Основные понятия электронных таблиц Excel
- •25.2.2 Ввод, редактирование и форматирование данных
- •25.2.2.1 Ввод текста и чисел.
- •25.2.2.2 Форматирование содержимого ячеек.
- •25.2.2.3.Копирование содержимого ячеек
- •25.3 Применение электронных таблиц для расчетов
- •25.3.1 Вычисления в электронных таблицах
- •25.3.1.1 Формулы
- •25.3.1.2 Ссылки на ячейки
- •25.3.1.3 Абсолютные и относительные ссылки
- •25.3.1.4 Автоматизация ввода
- •25.3.1.5 Использование стандартных функций
- •25.3.1.6 Палитра формул.
- •25.3.1.7 Использование мастера функций.
- •25.3.2 «Итоговые вычисления»
- •25.3.2.1 Суммирование.
- •25.3.2.2 Функции для итоговых вычислений.
- •25.4 Построение диаграмм и графиков
- •25.4.1 Тип диаграммы
- •25.4.2 Выбор данных
- •25.4.3 Оформление диаграммы.
- •25.4.4 Размещение диаграммы.
- •25.4.5 Редактирование диаграммы
- •25.4.6 Виды используемых диаграмм
- •Лекция 26 Система управления базой данных
- •26.1 Основные понятия
- •26.1.1 Классификация баз данных
- •26.1.1.1 Файл-сервер
- •26.1.1.2 Клиент-сервер
- •26.1.2 Структурные элементы базы данных
- •26.1.3 Объекты базы данных
- •26.1.4 Типы данных
- •26.1.5 Виды моделей данных
- •26.1.6 Иерархическая модель данных
- •26.1.7 Сетевая модель данных
- •26.1.8 Реляционная модель данных
- •26.2 Реляционный подход к построению инфологической системы
- •26.2.1 Понятия информационного объекта
- •26.2.2 Нормализация отношений
- •26.2.2.1 Первая нормальная форма
- •26.2.2.2 Вторая нормальная форма
- •26.2.2.3 Третья нормальная форма
- •26.2.3 Типы связей
- •26.2.4 Построение инфологической модели
- •26.2.4.1 Архитектура субд
- •К Внешние модели. Онцептуальная модель
- •26.2.4.2 Понятие информационно-логической модели
- •27.1.2 Предметные области для экспертных систем
- •27.1.2.1 Медицинская диагностика
- •27.1.2.2 Прогнозирование
- •27.1.2.3 Планирование
- •27.1.2.4 Интерпретация
- •27.1.2.5 Контроль и управление
- •27.1.2.6 Диагностика неисправностей в механических и электрических устройствах
- •27.1.2.7 Обучение
- •27.2 Классификация экспертных систем
- •27.3 Структура экспертных систем. Средства построения экспертных систем
- •Лекция 28 Искусственный интеллект
- •28.1 Понятие об искусственном интеллекте. История развития систем искусственного интеллекта
- •28.1.1 Появление предпосылок создания искусственного интеллекта (1943-1955)
- •28.1.2 Рождение искусственного интеллекта (1956)
- •28.1.3 Ранний период развития (1952 — 1969)
- •28.1.4 Первые практические реализации систем искусственного интеллекта (1966-1973)
- •28.1.5 Системы, основанные на знаниях (1969 — 1979)
- •28.1.6 Превращение ии в индустрию (1980 — настоящее время)
- •28.1.7 Возвращение к нейронным сетям (1986 — настоящее время)
- •28.1.8 Превращение ии в науку (1987 — настоящее время)
- •28.1.9 Появление подхода с использованием интеллектуальных агентов (1995 — настоящее время)
- •28.2 Представление знаний в системах искусственного интеллекта
- •28.3 Инструментарий программирования искусственного интеллекта
- •29.1.1.2 Методо–ориентированные ппп
- •29.1.1.3 Ппп общего назначения
- •29.1.1.4 Интеллектуальные системы
- •29.1.1.5 Ппп автоматизированного проектирования
- •29.1.1.6 Офисные ппп
- •29.1.1.7 Программные средства мультимедиа
- •29.1.1.8 Настольные издательские системы
- •29.2 Системы подготовки документации
- •29.3 Системы для проектирования и обработки данных
- •Лекция 30 Компьютерное математическое моделирование
- •30.1 Общие понятия о математическом моделировании
- •30.2 Цели и этапы компьютерного математического моделирования
- •30.3 Системы компьютерного математического моделирования
- •Лекция 31 Контроль передачи информации
- •31.1 Основные способы контроля передачи информации
- •31.1.1. Многократная передача кодовых комбинаций
- •31.1.2 Одновременная передача по параллельно работающим каналам
- •31.1.3 Использование корректирующих кодов
- •31.1.4 Системы передачи данных с обратной связью
- •31.2 Принципы помехоустойчивого кодирования
- •31.2.1 Циклические коды
- •31.3 Сжатие информации
- •Лекция 32 Угрозы безопасности информации в автоматизированных системах
- •32.1 Непреднамеренные угрозы безопасности информации
- •32.2 Преднамеренные угрозы безопасности информации
- •32.3 Классификация вредоносного программного обеспечения
- •32.3.1 Классификация вирусов
- •32.3.2 Загрузочные вирусы
- •32.3.3 Файловые вирусы
- •32.3.4 Загрузочно-файловые вирусы
- •32.3.5 Полиморфные вирусы
- •32.3.6 Стелс-вирусы
- •32.3.7 Троянские кони, программные закладки и сетевые черви
- •Лекция 33 Обеспечение достоверности, сохранности и конфиденциальности информации в автоматизированных системах
- •33.1 Правила обеспечения достоверности, сохранности и конфиденциальности информации
- •33.2 Технические средства обеспечения достоверности, сохранности и конфиденциальности информации
- •33.3 Программные средства обеспечения достоверности, сохранности и конфиденциальности информации
31.2.1 Циклические коды
Основные свойства и само название циклических кодов связаны с тем, что все разрешенные комбинации двоичных символов в передаваемом сообщении могут быть получены путем операции циклического сдвига некоторого исходного слова:
(a0 a1 a2 … an-2 an-1)
(an-1 a0 a1 … an-3 an-2)
(an-2 an-1 a0 … an-4 an-3)
Обычно кодовые комбинации циклического кода рассматривают не в виде последовательности нолей и единиц, а в виде полинома некоторой степени. Любое число в любой позиционной системе счисления можно представить в общем виде как:
F(x)=an-1xn-1 +an-2xn-2 +…+ a1x + a0 ,
где х — основание системы счисления;
ai — цифры данной системы счисления;
n-1, n-2, ... — показатель степени, в которую возводится основание, и одновременно порядковые номера, которые занимают разряды.
Идея построения циклического кода сводится к тому, что полином, представляющий информационную часть кодовой комбинации, нужно преобразовать в полином степени не более n-1, который без остатка делится на образующий полином Р(х). Существенно при этом, что степень последнего соответствует числу разрядов проверочной части кодовой комбинации. В циклических кодах все разрешенные комбинации, представленные в виде полиномов, обладают одним признаком: делимостью без остатка на образующий полином Р(х). Построение разрешенной кодовой комбинации сводится к следующему:
представляем информационную часть кодовой комбинации длиной k в виде полинома Q(x);
умножаем Q(x) на одночлен хr и получаем Q(x)xr, т. е. производим сдвиг k-разрядной кодовой комбинации на r разрядов;
делим многочлен Q(x)xr на образующий полином Р(х), степень которого равна r.
Обнаружение ошибок при циклическом кодировании сводится к делению принятой кодовой комбинации на тот же образующий полином, который использовался при кодировании (его вид должен быть известен на приеме). Если ошибок в принятой кодовой комбинации нет (или они такие, что данную передаваемую кодовую комбинацию превращают в другую разрешенную), то деление на образующий полином будет выполнено без остатка. Если при делении получится остаток, то это и свидетельствует о наличии ошибки.
31.3 Сжатие информации
В общем случае под сжатием данных понимают процесс преобразования большого объема данных в меньший объем. Существует большое количество методов сжатия. Для оценки их эффективности используют показатель — степень сжатия, определяющий отношение объема несжатых данных к объему сжатых.
Алгоритмы сжатия подразделяют на две категории: симметричные и асимметричные. Метод симметричного сжатия основан примерно на тех же алгоритмах и позволяет выполнять почти такой же объем работы, что и распаковка. В программах обмена данными, использующих сжатие и распаковку, обычно для большей эффективности применяют именно симметричные алгоритмы.
При асимметричном сжатии в одном направлении выполняется значительно больший объем работы, чем в другом. Обычно на сжатие затрачивается намного больше времени и системных ресурсов, чем на распаковку. Так, при создании базы данных изображений графические данные сжимаются для хранения всего однажды, зато распаковываться с целью отображения данные могут неоднократно. В этом случае большие затраты времени на сжатие, чем на распаковку, вполне оправданы и такой алгоритм, можно считать эффективным.
Алгоритмы, асимметричные «в обратном направлении» (т. е. когда на сжатие затрачивается меньше времени, чем на распаковку), применяются значительно реже. В частности, при резервном копировании информации, когда большинство скопированных файлов никогда не будет прочитано, уместен алгоритм, выполняющий сжатие значительно быстрее, чем распаковку.
Широко распространены методы сжатия данных, базирующиеся на словарях (когда для кодировки входных данных используются специальные словари). Среди данных методов выделяют адаптивные, полуадаптивные и неадаптивные.
Алгоритмы сжатия, спроектированные специально для обработки данных только определенных типов, называют неадаптивными. Такие неадаптивные кодировщики содержат статический словарь предопределенных подстрок, о которых известно, что они появляются в кодируемых данных достаточно часто. Адаптивные кодировщики не зависят от типа обрабатываемых данных, поскольку строят свои словари полностью из поступивших (рабочих) данных. Они не имеют предопределенного списка статических подстрок, а, наоборот, строят фразы динамически, в процессе кодирования. Адаптивные компрессоры настраиваются на любой тип вводимых данных, добиваясь в результате максимально возможной степени сжатия, в отличие от неадаптивных компрессоров, которые позволяют эффективно закодировать только входные данные строго определенного типа, для которого они были разработаны.
Метод полуадаптивного кодирования основан на применении обоих словарных методов кодирования. Полуадаптивный кодировщик работает в два прохода. При первом проходе он просматривает все данные и строит свой словарь, при втором — выполняет кодирование. Этот метод позволяет построить оптимальный словарь, прежде чем приступать к кодированию.
Наряду с методами сжатия, не уменьшающими количество информации в сообщении, применяются методы сжатия, основанные на потере малосущественной информации.
Среди простых алгоритмов сжатия наиболее известен алгоритм RLE (Run Length Encoding), позволяющий сжимать данные любых типов. Этот алгоритм сжатия основан на замене цепочки из одинаковых символов символом и значением длины цепочки. Например, символьная группа из восьми символов АААААААА, занимающая восемь байт, после RLE-кодирования будет представлена всего двумя символами 8А и будет занимать, соответственно, два байта. При этом будет обеспечена степень сжатия 4:1. Данный метод эффективен при сжатии растровых изображений, но малополезен при кодировании текста.
При передаче информации широко используются и методы разностного кодирования — предсказывающие (предиктивные) методы.
При методе разностного кодирования разности амплитуд отсчетов представляются меньшим числом разрядов, чем сами амплитуды. Разностное кодирование реализовано в методах дельта-модуляции и ее разновидностях. Предсказывающие (предиктивные) методы основаны на экстраполяции значений амплитуд отсчетов.
Методы MPEG (Moving Pictures Experts Group) используют предсказывающее кодирование изображений (для сжатия данных о движущихся объектах вместе со звуком). Так, если передавать только изменившиеся во времени пиксели изображения, то достигается сжатие в несколько десятков раз. Данные методы становятся стандартами для цифрового телевидения.
Для сжатия данных об изображениях используют методы типа JPEG (Joint Photographic Expert Group), основанные на потере малосущественной информации (не различимые для глаза оттенки кодируются одинаково, коды могут стать короче). В этих методах сжимаемая последовательность пикселей делится на блоки, в каждом блоке производится преобразование Фурье и устраняются высокие частоты. Изображение восстанавливается по коэффициентам разложения для оставшихся частот.
Другой принцип воплощен во фрактальном кодировании, при котором изображение, представленное совокупностью линий, описывается уравнениями этих линий.
Широко известный метод Хаффмена относится к статистическим методам сжатия. Идея метода — часто повторяющиеся символы нужно кодировать более короткими цепочками битов, чем цепочки редких символов. Строится двоичное дерево, листья соответствуют кодируемым символам, код символа представляется последовательностью значений ребер (эти значения в двоичном дереве суть 1 и 0), ведущих от корня к листу. Листья символов с высокой вероятностью появления находятся ближе к корню, чем листья маловероятных символов.
Распознавание кода, сжатого по методу Хаффмена, выполняется по алгоритму, аналогичному алгоритмам восходящего грамматического разбора.
Кодирование по алгоритму Хаффмена широко используется для факсимильной передачи изображений по телефонным каналам и сетям передачи данных. Этот алгоритм не является адаптивным. В нем, как правило, применяется фиксированная таблица кодовых значений, которые выбираются специально для представления документов, подлежащих факсимильной передаче.
Кроме упомянутых методов сжатия, широкое распространение получили адаптивные методы сжатия без потерь, основанные на алгоритме LZ (Лемпеля-Зива). В частности, метод сжатия на основе LZ применен в модемном протоколе V.42bis.
В LZ-алгоритме используется следующая идея: если в тексте сообщения появляется последовательность из двух ранее уже встречавшихся символов, то эта последовательность объявляется новым символом, для нее назначается код, который при определенных условиях может быть значительно короче исходной последовательности. В дальнейшем в сжатом сообщении вместо исходной последовательности записывается назначенный код. При декодировании повторяются аналогичные действия и поэтому становятся известными последовательности символов для каждого кода.
Так, в модемном протоколе V.42bis заменяет конкретные, наиболее часто встречающиеся последовательности символов (строк) на более короткие кодовые слова. Алгоритм использует словарь для сохранения наиболее часто встречающихся строк вместе с кодовыми словами, которые их представляют. Словарь строится и модифицируется динамически. Размер словаря может быть различным, стандартизировано только минимальное значение — 512 элементов (строк). Конкретное значение выбирается обоими модемами при установлении соединения. Кроме того, согласовывается максимальная длина строки, которая может быть сохранена в словаре, в диапазоне от шести до 250 символов.
Словарь может быть представлен как набор (лес) деревьев, в котором корню каждого дерева соответствует символ алфавита и, наоборот, каждому символу соответствует дерево в словаре. Каждое дерево представляет набор известных (уже встретившихся) строк, начинающихся с символа, соответствующего корню. Каждый узел дерева соответствует набору строк в словаре. И, наконец, каждый листьевой узел соответствует одной известной строке.
В самом начале каждое дерево в словаре состоит только из корневого узла, которому присвоено уникальное кодовое слово. При поступлении нового символа выполняется процедура отождествления накопленной (отождествленной) к предыдущему шагу строки и текущего символа. Фактически эта процедура сводится к поиску строки, дополненной текущим символом, в словаре. Эта процедура начинается с единственного символа и в этом случае всегда завершается успешно, так как в словаре всегда есть односимвольные строки, соответствующие каждому символу алфавита. Если отождествленная на предыдущем шаге строка плюс символ соответствует элементу словаря (найдена в нем), и этот элемент не был создан при предыдущем выполнении процедуры отождествления строки, строка дополняется текущим символом и будет использована при следующем вызове процедуры отождествления. Процесс продолжается до тех пор, пока:
строка не достигает максимально возможной длины (согласованной модемами при установлении соединения);
либо дополненная строка не найдена в словаре;
либо она была найдена, но этот элемент был создан при предыдущем вызове. В этом случае присоединенный к строке символ удаляется из нее и называется «неотождествленным», строка кодируется кодовым словом, и на следующем шаге будет состоять только из неотождествленного символа.
Во время процесса сжатия словарь динамически дополняется новыми элементами (строками), которые соответствуют подстрокам, встречающимся в потоке данных. Новые строки образуются добавлением неотождествленного символа к существующей строке, и это означает создание нового узла дерева.
Словари должны быть модифицированы в обоих модемах — передающем и принимающем. При этом передатчик всегда находится на один шаг (на одну строку) впереди приемника в цикле модификации словаря. Таким образом, в принимающем модеме первый символ принятого кодового слова (который будет равен D) должен быть использован для модификации словаря приемника. Приемник V.42bis всегда полагает, что первый символ каждой строки (соответствующей принятому кодовому слову) должен быть использован для дополнения предыдущей строки и создания нового элемента словаря.
Наиболее важными особенностями алгоритма, реализованного в протоколе V.42bis являются следующие:
если в потоке данных часто встречаются те подстроки, которые уже есть в словаре, то новые элементы словаря создаются редко и словарь переполняется медленно;
для представления максимального номера элемента (строки) словаря требуется 9 бит для словаря в 512 элементов, 10 — для словарей, содержащих до 1024 элементов, 11 — до 2048 элементов и т. д. Однако не все номера должны быть представлены максимальным количеством бит, и этот механизм означает, что размер кодового слова увеличивается с 9 до максимального значения по мере заполнения словаря. Это уменьшает объем данных на первоначальных этапах;
если на вход передатчика поступает хорошо перемешанный (в статистическом смысле) поток символов, то высока вероятность, что каждый следующий символ будет «неотождествленным» (такая же ситуация существует сразу после инициализации словаря — он еще пуст). Для этого случая предназначен прозрачный режим работы передатчика, т. е. режим без сжатия, когда передача кодовых слов не осуществляется, а каждый приходящий на вход передатчика символ транслируется в линию и далее в приемник.
