
- •160001, Г. Вологда, ул. Челюскинцев, 3.
- •Предисловие
- •Введение
- •Раздел 1. Теория информации
- •Глава 1. Исходные понятия информатики
- •1.1. Начальные определения
- •1.2. Формы представления информации
- •1.3. Преобразование сообщений
- •Контрольные вопросы и задания
- •Глава 2. Понятие информации в теории Шеннона
- •2.1. Понятие энтропии
- •2.1.1. Энтропия как мера неопределенности
- •2.1.2. Свойства энтропии
- •2.1.3. Условная энтропия
- •2.2. Энтропия и информация
- •2.3. Информация и алфавит
- •Контрольные вопросы и задания
- •Глава 3. Кодирование символьной информации
- •3.1. Постановка задачи кодирования, Первая теорема Шеннона
- •3.2. Способы построения двоичных кодов
- •3.2.1. Алфавитное неравномерное двоичное кодирование сигналами равной длительности. Префиксные коды
- •3.2.2. Равномерное алфавитное двоичное кодирование. Байтовый код
- •3.2.3. Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •3.2.4. Блочное двоичное кодирование
- •Контрольные вопросы и задания
- •Глава 4. Представление и обработка чисел в компьютере
- •4.1. Системы счисления
- •4.2. Представление чисел в различных системах счисления
- •4.2.1. Перевод целых чисел из одной системы счисления в другую
- •4.2.2. Перевод дробных чисел из одной системы счисления в другую
- •4.2.3. Понятие экономичности системы счисления
- •4.2.4. Перевод чисел между системами счисления 2 ↔ 8 ↔ 16
- •4.2.5. Преобразование нормализованных чисел
- •4.3. Кодирование чисел в компьютере и действия над ними
- •4.3.1. Кодирование и обработка в компьютере целых чисел без знака
- •4.3.2. Кодирование и обработка в компьютере целых чисел со знаком
- •4.3.3. Кодирование и обработка в компьютере вещественных чисел
- •Контрольные вопросы и задания
- •Глава 5. Передача информации
- •5.1. Общая схема передачи информации в линии связи
- •5.2. Характеристики канала связи
- •5.3. Влияние шумов на пропускную способность канала
- •5.4. Обеспечение надежности передачи и хранения информации
- •5.4.1. Постановка задачи
- •5.4.2. Коды, обнаруживающие ошибку
- •5.4.3. Коды, исправляющие одиночную ошибку
- •5.5. Способы передачи информации в компьютерных линиях связи
- •5.5.1. Канал параллельной передачи
- •5.5.2. Последовательная передача данных
- •5.5.3. Связь компьютеров по телефонным линиям
- •Контрольные вопросы и задания
- •Глава 6. Хранение информации
- •6.1. Классификация данных. Проблемы представления данных
- •6.2. Представление элементарных данных в озу
- •6.3. Структуры данных и их представление в озу
- •6.3.1. Классификация и примеры структур данных
- •6.3.2. Понятие логической записи
- •6.3.3. Организация структур данных в озу
- •6.4. Представление данных на внешних носителях
- •6.4.1. Иерархия структур данных на внешних носителях
- •6.4.2. Особенности устройств хранения информации
- •Контрольные вопросы и задания
- •Раздел 2. Алгоритмы. Модели. Системы
- •Глава 7. Элементы теории алгоритмов
- •7.1. Нестрогое определение алгоритма
- •7.2. Рекурсивные функции
- •7.3. Алгоритм как абстрактная машина
- •7.3.1. Общие подходы
- •7.3.2. Алгоритмическая машина Поста
- •7.3.3. Алгоритмическая машина Тьюринга
- •7.4. Нормальные алгоритмы Маркова
- •7.5. Сопоставление алгоритмических моделей
- •7.6. Проблема алгоритмической разрешимости
- •7.7. Сложность алгоритма
- •Контрольные вопросы и задания
- •Глава 8. Формализация представления алгоритмов
- •8.1. Формальные языки
- •8.1.1. Формальная грамматика
- •8.1.2. Способы описания формальных языков
- •8.2. Способы представления алгоритмов
- •8.2.1. Исполнитель алгоритма
- •8.2.2. Строчная словесная запись алгоритма
- •8.2.3. Графическая форма записи
- •8.2.4. Классификация способов представления алгоритмов
- •8.3. Структурная теорема
- •Контрольные вопросы и задания
- •Глава 9. Представление о конечном автомате
- •9.1. Общие подходы к описанию устройств, предназначенных для обработки дискретной информации
- •9.2. Дискретные устройства без памяти
- •9.3. Конечные автоматы
- •9.3.1. Способы задания конечного автомата
- •9.3.2. Схемы из логических элементов и задержек
- •9.3.3. Эквивалентные автоматы
- •Контрольные вопросы и задания
- •Глава 10. Модели и системы
- •10.1. Понятие модели
- •10.1.1. Общая идея моделирования
- •10.1.2. Классификация моделей
- •Модели структурные и функциональные
- •Модели натурные и информационные
- •Модели проверяемые и непроверяемые
- •Модели по назначению
- •10.1.3. Понятие математической модели
- •10.2. Понятие системы
- •10.2.1. Определение объекта
- •10.2.2. Определение системы
- •10.2.3. Формальная система
- •10.2.4. Значение формализации
- •10.3. Этапы решения задачи посредством компьютера
- •10.4. Об объектном подходе в прикладной информатике
- •Контрольные вопросы и задания
- •Заключение
- •Приложение а. Элементы теории вероятностей
- •А.1. Понятие вероятности
- •А.2. Сложение и умножение вероятностей
- •A.3. Условная вероятность
- •Контрольные вопросы и задания
- •Приложение б. Некоторые соотношения логики
- •Глоссарий
- •Список литературы
- •Содержание
- •Глава 4. Представление и обработка чисел в компьютере 45
- •Глава 5. Передача информации 69
- •Глава 6. Хранение информации 83
- •Раздел 2. Алгоритмы. Модели. Системы 98
- •Глава 7. Элементы теории алгоритмов 99
- •Глава 8. Формализация представления алгоритмов 120
- •Глава 9. Представление о конечном автомате 134
- •Глава 10. Модели и системы 147
8.2. Способы представления алгоритмов
Предыдущие рассуждения позволяют заключить, что свойство определенности алгоритма требует использования для его описания формальных языков. Однако степень формализации, т.е. то, насколько строгим должен быть синтаксис языка, а также возможные способы представления алгоритмов определяются тем, кто (или что) предполагается в качестве его исполнителя. В информатике сложились вполне определенные традиции в представлении алгоритмов, рассчитанных на различных исполнителей. Если алгоритм предназначен для исполнителя-человека, то запись его может быть не полностью формализована; существенными в представлении оказываются понятность и наглядность - по этим причинам для записи алгоритма может быть использован естественный язык или язык графический. В представлении алгоритмов, предназначенных для исполнения техническими устройствами, важнейшими качествами оказываются однозначность понимания и исполнения, a также ограниченность допустимых грамматических конструкций, что требует использования строго формализованных языков. Помимо этого, особенности устройств ввода и возможности интерпретации входной информации техническим устройством допускают запись алгоритма только в словесной форме.
Далее более подробно рассматриваются различные формы представления алгоритмов. Однако сначала уточним понятие «исполнитель алгоритма», введенное в п.7.1.
8.2.1. Исполнитель алгоритма
При построении алгоритмической теории понятие исполнителя алгоритма в явном виде не вводится. Механизм исполнения предлагается лишь в моделях Тьюринга и Поста, поскольку с ним связана суть модели. В остальных моделях обсуждаются лишь элементарные шаги алгоритма и правила построения сложных действий из элементарных. За рамками обсуждения остается вопрос: кем (или чем) данный алгоритм будет выполняться. Точнее, принимается по умолчанию, что для выполнения алгоритма в той или иной модели необходимо уметь понимать принятую форму записи и осуществлять необходимые действия.
Введем понятие формального исполнителя:
Формальный исполнитель - субъект или устройство, способные воспринимать и анализировать указания алгоритма, изменять в соответствии с ним свое состояние, а также обладающие механизмом исполнения, способным производить пошаговую обработку информации.
Исполнитель алгоритма считается заданным, если для него установлены:
система команд (элементарных действий алгоритма, которые способен выполнить исполнитель);
формы представления входной и выходной информации;
система допустимых внутренних состояний;
язык представления алгоритма.
Таким образом, в решении задач практики первичными оказываются не особенности алгоритма, а возможности исполнителя. В частности, элементарность шагов определяется не тем, какая модель использована для представления алгоритма, а системой команд конкретного исполнителя. Форма представления исходных (входных) данных для любого алгоритма также должна быть ориентирована на конкретного исполнителя. Наконец, никакая логическая структура алгоритма не должна переводить исполнителя в запрещенное состояние (т.е. выводить за рамки допустимых состояний).
Помимо непосредственного выполнения действий конкретный исполнитель осуществляет и контроль правильности разработки алгоритма. Причинами невыполнения алгоритма при некотором наборе исходных данных (т.е. не достигается результативного окончания его работы) могут быть:
ошибки синтаксиса, т.е. нарушение формальных правил записи алгоритма;
выход начальных данных за пределы допустимого множества;
несоответствие алгоритма возможностям исполнителя.
Если в роли исполнителя выступает компьютер, а алгоритм представляется в виде программы, синтаксический контроль осуществляется на этапе ее компиляции, т.е. до того, как начнется исполнение программы. В том случае, когда ошибки имеют смысловой (семантический) характер; для их локализации и исправления прибегают к тестированию программы. Тестирование состоит в проверке работоспособности алгоритма (программы) при таких значениях исходных данных, которые охватили бы все возможные пути обработки информации. На практике, однако, осуществить такую проверку для сложных алгоритмов весьма затруднительно -слишком велико оказывается число возможных вариантов. Обычно делается попытка обработки предельных (больших и малых) входных значений, обработки недопустимых значений (их ввод не должен приводить к нерезультативной остановке исполнителя; точнее результатом должно быть сообщение исполнителя о невозможности выполнения действий или просто отсутствие действия). Поскольку перебрать все сочетания входных данных чаще всего невозможно, следует сознавать, что тестирование может обнаружить ошибку, но не доказывает их полное отсутствие.
Из приведенных рассуждений может сложиться впечатление, что на практике всегда формулировка и способ представления алгоритма оказываются зависящими от возможностей исполнителя и, следовательно, должны быть ориентированы на учет этих возможностей. Это справедливо, если рассматриваем какой-то конкретный алгоритм. Однако если имеется некоторое множество алгоритмов, то их единообразное представление становится обязательным только в том случае, когда исполнитель единственный - именно такой была ситуация на начальных этапах развития вычислительной техники - решение любой задачи требовало представления алгоритма в виде программы на входном языке компьютера. Ситуация изменялась по мере развития техники и специализированного программного обеспечения; в настоящее время можно считать, что компьютер через свое программное обеспечение предоставляет пользователю множество исполнителей, из которых следует выбрать оптимальный, т.е. наиболее соответствующий задаче и алгоритму.