- •1.1. Информация и сигналы
- •1.2. Информационные технологии и системы
- •База знаний;
- •Механизм вывода;
- •Интерфейс и пользователь.
- •1.3. Передача и оценка информации
- •1.4. Алгоритмы
- •2.1. Цели создания, назначение и структура еаис
- •2.2. Этапы развития еаис
- •2.3. Ведомственная интегрированная телекоммуникационная сеть
- •3.1. Общие принципы и органы управления
- •3.2. Правовые основы применения электронных документов и информационных технологий в таможенном деле и торговле
- •Глава 1. Общие положения.
- •Глава 2. Условия использования электронной цифровой подписи. Глава 3. Удостоверяющие центры.
- •Глава 4. Особенности использования электронной цифровой подписи. Глава 5. Заключительные и переходные положения.
- •3.3. Основные направления развития
- •4.1. Назначение и классификация вычислительных сетей
- •4.2. Физическая передающая среда для связи компьютеров
- •4.3. Эталонная модель взаимодействия вычислительных систем
- •4.4. Устройства организации взаимодействия в вычислительных сетях
- •4.5. Принципы управления и доступа в вычислительных сетях
- •4.6. Глобальная сеть Интернет
- •4.7. Параметры рабочих станций и вычислительных сетей
- •4.8. Контроль и восстановление
- •4.9. Средства вычислительных сетей таможенных органов
- •5.1. Размещение и организация
- •5.2. Понятия базы данных и системы управления базами данных
- •5.3. Файловая модель
- •5.4. Иерархическая и сетевая модели представления данных
- •5.5. Реляционная модель данных
- •5.6. Системы управления базами данных
- •5.7. Классификация и кодирование
- •5.8. Базы данных еаис
- •5.9. Информационно-поисковые системы
- •Август 14.08.2007
- •Январь 27.01.2007
1.4. Алгоритмы
Понятие алгоритма
Многие процессы в ИС реализуются через программы ЭВМ. Программа - это некоторая инструкция. Она составляется на специальном языке, понятном для ЭВМ, и состоит из ряда типовых выражений - команд. Программа вводится в память ЭВМ. Если запустить программу, то ЭВМ начнет выполнять действия в соответствии с ее командами. Современные ЭВМ могут выполнять сотни разных типов команд. Каждая команда определяет некоторое действие машины. Например, с помощью соответствующей команды в некоторую ячейку памяти ЭВМ можно поместить число 100, другой командой можно вывести содержимое этой ячейки на экран монитора и т.п.
Разработке программы предшествует разработка алгоритма. Программа является одной из форм описания алгоритма решения задачи.
Алгоритм (от латинского algorithmi, algorismus - первоначально транслитерация имени узбекского математика аль-Хорезми) - способ (программа) решения вычислительных и других задач, точно предписывающий последовательность получения результата, однозначно определяемый исходными данными [11].
В технической литературе можно найти другие, но близкие по сути определения этого понятия. Так, в международном стандарте ISO 2382/1-84 приводится следующее определение: «Алгоритм - конечный набор предписаний, определяющий решение задачи посредством конечного количества операций».
Мухаммед ибн Муса аль-Хорезми, живший в 783-850 гг., предложил правила четырех арифметических действий над числами в десятичной системе счисления, которые опубликовал в своей книге «Об индийском счете», переведенной в XII в. на латынь и получившей широкое распространение в Европе. Совокупность введенных аль-Хорезми правил стали называть «алгоризм», а впоследствии - «алгоритм». Сегодня существует и широко изучается теория алгоритмов.
В Большой российской энциклопедии указывается, что содержательные явления, приведшие к образованию понятия «алгоритм», прослеживаются в математике в течение всего времени ее существования. Однако само это понятие сформировалось лишь в XX в. и стало предметом самостоятельного изучения лишь в 20-х гг. XX в. представителями математического интуиционизма Л.Э.Я. Брауэром и Г. Вейлем. Началом разработки теории алгоритмов можно считать 1936 г., когда А. Черч опубликовал первое уточнение понятия вычислимой функции (предложил отождествлять понятие всюду определенной вычислимой функции, имеющей натуральные аргументы и значения, с понятием
47
общерекурсивной функции) и привел первый пример функции, не являющейся вычислимой, a A.M. Тьюринг и Э.Л. Пост дали первые уточнения понятия алгоритма (в терминах идеализированных вычислительных машин Тьюринга и Поста). В дальнейшем теория алгоритмов получила развитие в трудах С.К. Клини, Э.Л. Поста, А.А. Маркова и др. В частности, А.А. Марков предложил уточнить понятие алгоритма с помощью введенного им понятия нормального алгоритма. Наиболее общий подход к уточнению понятия алгоритма предложил А.Н. Колмогоров.
При составлении алгоритма необходимо описать:
- набор объектов, составляющих совокупность возможных исходных данных, промежуточных и конечных результатов;
- правило начала;
- правило непосредственной переработки информации (описание последовательности действий);
-
правило окончания;
-
правило (форму) вывода результата для потребителя информации.
Разработке алгоритма предшествуют постановка задачи и построение формальной модели задачи. Обычно модель представляет собой некоторую систему условий, уравнений, неравенств. Далее эта модель является основой для построения алгоритма.
Способы описания алгоритмов
Алгоритмы чаще всего описывают в виде последовательности пунктов из текста и формул (словесно-формульный вид), графических блок-схем или программ. Возможны и комбинации этих форм.
Например, алгоритм вычисления суммы таможенной пошлины Тп = N х Се х х Кс/Квк при обложении товара по специфическим ставкам (N - количество товара, Се - ставка таможенной пошлины в евро за единицу товара, К, - курс евро к рублю, Кпк - курс валюты контракта к рублю) в словесно-формульном виде можно описать следующим образом:
1) ввести значения N, С , К , К ;
/ ' е' ст вк'
-
вычислить произведение а = N х С х Ке;
-
вычислить Т = а / К ;
-
вывести на печать значение Т .
' п
Возможны различные формы словесно-формульного описания в виде пунктов с текстом, математических выражений, таблиц и др. Описание музыкального произведения в виде нот - также одна из форм словесно-формульного описания алгоритма.
Блок-схемы алгоритмов (схемы) состоят из имеющих заданное значение символов, краткого пояснительного текста и соединяющих линий.
В системе Государственных стандартов (ГОСТ) имеется особая группа стандартов, которые оформлены в виде единой системы программной документа-
48
ции (ЕСПД). Комплекс стандартов ЕСПД устанавливает правила разработки, оформления программ и программной документации. Правила оформления схем алгоритмов, программ, данных и систем устанавливаются, в частности, ГОСТ 19.701-90, который был разработан методом прямого применения международного стандарта ISO 5807-85 [21].
Схемы могут использоваться на различных уровнях детализации, причем число уровней зависит от размеров и сложности задачи обработки данных. Уровень детализации должен быть таким, чтобы различные части и взаимосвязь между ними были понятны в целом.
В стандарте ГОСТ 19.701-90 определены символы (табл. 1.2), предназначенные для использования в блок-схемах, и приведено руководство по условным обозначениям для их применения в схемах:
-
данных;
-
программ;
-
работы системы;
-
взаимодействия программ;
-
ресурсов системы.
Символ предназначен для графической идентификации некоторой функции. При изображении схемы алгоритма символы рекомендуется располагать на листе бумаги равномерно и по возможности одного размера. Символы могут вычерчиваться в любой ориентации, но предпочтительной является горизонтальная; могут перекрываться изображения нескольких символов. Внутри символа заносится текст, указывающий его функцию. Если места под текст не хватает, то он выносится в комментарий.
Линии показывают направления потоков данных или потоков управления. Стандартными считаются направления слева направо либо сверху вниз. Если потоки имеют направления, отличные от стандартных, то для указания направления используют линии-стрелки.
Две или более входящих линии могут объединяться в одну исходящую линию. Однако при этом место объединения должно быть смещено (рис. 1.14 а).
Линии могут разрываться для избежания пересечений (при длинных линиях либо при переносе на другие страницы документации). Тогда используются символы-соединители (см. табл. 1.2). Соединитель в начале разрыва называется внешним, а в конце - внутренним. Соединители одной линии внутри должны иметь один и тот же идентификатор и могут сопровождаться комментариями.
Возможно использование идентификатора символа, который проставляется слева над ним (рис. 1.14 б).
Если в документации для некоторого символа дается более подробное описание, то в его верхней части проводится дополнительная горизонтальная линия (рис. 1.14 в). В полученной полосе помещается идентификатор, указывающий на символы более подробного описания.
Каждый выход из символа «решение» должен сопровождаться соответствующими значениями условий (рис. 1.14 г).
49
50
51
Примечание: знак «+» указывает, что символ используют в данной схеме, «-» - не используют.
52
Символ «предопределенный процесс» применяется для отображения процесса из одной или нескольких операций или шагов программы, которые определены в другом месте схемы.
Символ «параллельные действия» используется для указания необходимости синхронного исполнения нескольких операций. На рис. 1.15 этот символ использу- ется для того, чтобы показать, что операции С, D и Е начинают выполняться одно- временно, а операции В, С и D.
одновременно завершаются.
Схемы данных отображают путь данных при решении задач и определяют этапы обработки, а также различные применяемые носители этих данных.
Схема данных состоит из символов:
-
данных (символы данных могут также указывать вид носителя данных);
-
процесса, который следует выполнить над данными (символы процесса могут также указывать функции, выполняемые вычислительной машиной);
-
линий, указывающих потоки данных между процессами и (или) носителями данных;
- специальных, используемых для облегчения написания и чтения схемы. Символы данных предшествуют и следуют за символами процесса. Схема
данных начинается и заканчивается символами данных (за исключением специальных символов).
53
Схемы программ отображают последовательность операций в программе. Схема программы состоит из:
-
символов процесса, указывающих фактические операции обработки данных (включая символы, определяющие путь, которого следует придерживаться с учетом логических условий);
-
символов линейных, указывающих поток управления;
-
символов специальных, используемых для облегчения написания и чтения схемы.
Схемы работы системы отображают управление операциямии и поток данных в системе.
Схема работы системы состоит из:
-
символов данных, указывающих на наличие данных (символы данных могут также указывать вид носителя данных);
-
символов процесса, указывающих операции, которые следует выполнить над данными, а также определяющих логический путь, которого следует придерживаться;
-
линейных символов, указывающих потоки данных между процессами и (или) носителями данных, а также поток управления между процессами;
-
специальных символов, используемых для облегчения написания и чтения блок-схемы.
Схемы взаимодействия программ отображают путь активаций программ и взаимодействия с соответствующими данными. Каждая программа в схеме взаимодействия программ показывается только один раз (в схеме работы системы программа может изображаться более чем в одном потоке управления).
Схема взаимодействия программ состоит из:
-
символов данных, указывающих на наличие данных;
-
символов процесса, указывающих на операции, которые следует выполнить над данными;
-
линейных символов, отображающих поток между процессами и данными, а также инициации процессов;
-
специальных символов, используемых для облегчения написания и чтения схемы.
Схемы ресурсов системы отображают конфигурацию блоков данных и обрабатывающих блоков, которая требуется для решения задачи или набора задач. Схема ресурсов системы состоит из:
-
символов данных, отображающих входные, выходные и запоминающие устройства вычислительной машины;
-
символов процесса, отображающих процессоры (центральные процессоры, каналы и т.д.);
-
линейных символов, отображающих передачу данных между устройствами ввода-вывода и процессорами, а также передачу управления между процессорами;
-
специальных символов, используемых для облегчения написания и чтения схемы.
54
Выделяют линейные, ветвящиеся и циклические блок-схемы:
-
линейные описывают процессы, в которых операции выполняются последовательно без разветвлений;
-
в ветвящихся блок-схемах имеются разветвления. Как правило, это следствие наличия условных переходов в ходе вычислений;
-
циклические схемы описывают процессы, в которых имеются многократно повторяемые процедуры (циклы). В таких схемах всегда можно выделить один или несколько замкнутых контуров. Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операций, т.е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (т.е. количество вложенных друг в друга циклов) может быть различной.
На рис. 1.16 приведена схема алгоритма расчета таможенной пошлины по рассмотренной ранее формуле Т. Для этого примера блок-схема является линейной.
Если бы мы попытались описать в виде схемы алгоритм расчета таможенных платежей за ввозимые автомобили, то получили бы ветвящуюся схему, так как платежи зависят от года выпуска автомобиля, типа и других данных, что приведет к появлению условных переходов в схеме.
Блок-схема с вложенным циклом приведена на рис. 1.17. Она описывает алгоритм вычисления суммы элементов матрицы размером 4x3. После ввода значений элементов матрицы производится процедура инициализации, в ходе которой устанавливаются начальные значения переменных и индексов циклов (R, i, j). Внешний цикл (индекс j) обеспечивает последовательный выбор строк матрицы. Внутренний цикл (индекс i) позволяет организовать суммирование элементов очередной строки. Результат суммирования накапливается в переменной R. Условие j > 4 является условием завершения алгоритма.
Некоторые особенности появляются при составлении блок-схем, реализующих параллельные вычисления. Обычная ЭВМ выполняет операции
последовательно одну за одной. Однако существуют вычислительные устройства, включающие несколько процессоров. Тогда появляется возможность выполнять несколько операций одновременно. Среди символов процесса есть специальный символ для показа того, что две или более операций выполняются одновременно (см. рис. 1.15).
Алгоритм, предназначенный для исполнения на компьютере, должен быть записан на понятном для компьютера языке. Эта запись не должна допускать
55
неоднозначного толкования. Язык описания алгоритма для его последующего ввода в ЭВМ принято называть языком программирования или алгоритмическим языком, а запись алгоритма на этом языке - программой для компьютера. «Программа для ЭВМ - упорядоченная последовательность команд, подлежащая обработке» (стандарт ISO 2382/1-84).
Как правило, алгоритм записывается сначала в словесно-формульной или графической форме, а только затем на алгоритмическом языке. Зачастую ЭВМ может работать с программами, написанными на нескольких разных языках. Это достигается тем, что перед использованием исходный текст программы с алгоритмического языка преобразуется во внутренний язык ЭВМ. Преобразование выполняют с помощью специальной программы, которую называют транслятором. Естественно, что для разных алгоритмических языков нужны разные трансляторы.
В настоящее время в мире существует несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.
56
Любой алгоритм есть последовательность предписаний, выполнив которые можно за конечное число шагов перейти от исходных данных к результату. В зависимости от степени детализации предписаний определяется уровень языка программирования - чем меньше детализация, тем выше уровень языка. По этому критерию можно выделить следующие уровни языков программирования:
-
машинные;
-
машинно-ориентированные (ассемблеры);
-
машинно-независимые (языки высокого уровня).
Машинные языки и машинно-ориентированные языки - это языки низкого уровня, требующие от программиста указания мелких деталей процесса обработки данных. Операции алгоритма на машинном языке записываются в виде набора числовых кодов.
Каждое действие, которое должна выполнить ЭВМ в процессе выполнения алгоритма, на машинном языке представляется командой. В команде в общем случае должны быть указаны: вид действия (сложить, умножить, занести, перейти и т.п.); один или несколько адресов ячеек памяти или регистров процессора, с содержимым которых надо выполнить действие; адрес занесения результата; адрес следующей команды; способ адресации. На машинном языке каждая команда представляется некоторым структурированным числовым кодом.
Примем, что код 01 задает команду (действие) сложения двух чисел. Пусть слагаемые размещаются в ячейках с адресами 2048 и 4092, а результат надо занести в ячейку с адресом 4096. Тогда команду сложения в машинном коде можно, например, представить в виде: 01 2048 4092 4096.
Типы команд, структура машинной команды и двоичные коды их обозначений зависят от используемой ЭВМ. Программа, записанная на машинном языке, представляет собой последовательность описаний команд.
Язык Ассемблера - это машинно-зависимый язык низкого уровня, в котором короткие мнемонические имена соответствуют отдельным машинным командам. Используется для представления в удобочитаемой форме программ, записанных в машинном коде [2].
Так, основной формат записи команд на языке Ассемблера для IBM PC имеет вид (рис. 1.18):
[метка] команда [операнд (ы)] комментарий.
В примере на рис. 1.18 в качестве имени программы указано PRIMER; под переменную с именем РАМ1 отведено 2 байта (на это указывает операнд DW), в которые занесено шестнадцатеричное число 100 (Н - указатель 16-рич-ной системы счисления); BEGIN - метка, определяющая место начала описания процедуры FINE.
Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека. Языки высокого уровня были разработаны для того, чтобы освободить программиста от учета технических особенностей конкретных компьютеров, их архитектуры. Однако программы на ассемблере, как правило, более быстрые и требуют меньшей памяти для работы.
57
Языки высокого уровня подразделяются на:
процедурные (алгоритмические) (Basic, Pascal, С и др.), которые предназначены для однозначного описания алгоритмов, при этом для решения задачи процедурные языки требуют в той или иной форме записать процедуру ее решения;
логические (Prolog, Lisp и др.), которые ориентированы не на точное изложение алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания;
объектно-ориентированные (Object Pascal, С++, Java и др.), в основе которых лежит понятие объекта, сочетающего в себе данные и действия над нами. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур.
На рисунке 1.19 приведено описание на алгоритмическом языке высокого уровня ПАСКАЛЬ алгоритма ввода двух чисел г и Ь, а также определения и печати максимального значения. Справа от текста даны комментарии, поясняющие действия ЭВМ при выполнении соответствующей строки программы.
Алгоритмы, в которых основную роль играют четыре арифметических действия, принято называть численными алгоритмами. Они играют важную роль в самых разных областях как элементарной, так и высшей математики и задаются обычно в виде словесных предписаний или же разного рода формул и схем. Например, алгоритм решения системы двух уравнений первой степени с двумя неизвестными
а,х + Ь,у - с, а2х + Ь2у = с2
58
Широкое распространение численных алгоритмов обусловливается тем, что к четырем арифметическим действиям можно свести очень многое другое операции.
Уже в рассмотренных примерах довольно отчетливо выступают следующие черты алгоритмов, присущие и любому другому алгоритму [29, 35, 67].
Детерминированность алгоритма. Предполагается, что метод вычисление можно сообщить другому лицу в виде указаний о действиях при решении задачи. Согласно этим указаниям вычисления представляют собой детерминированный процесс, который может быть в любое время повторен и выполнен с тем же успехом и другим лицом.
Иными словами, при наличии алгоритма в процессе решения некоторой задачи не надо думать и следует делать только то, что указано в алгоритме.
Массовость алгоритма. Алгоритм - это единое предписание, определяющее вычислительный процесс, который может начинаться от различных исходных данных и ведет во всех случаях к соответствующему результату. То есть, свойство массовости означает, что алгоритм должен быть применим не к единствен -ному, а к многим вариантам исходных данных. При этом возможно, что исходные данные выбираются из некоторой области, которая называется областью применимости алгоритма. Необходимо отметить, что число операций, предписываемых алгоритмом, заранее может быть неизвестно, выясняться лишь в процессе самого решения и зависеть от конкретных условий задачи.
Результативность - это свойство алгоритма должен завершаться за конечное число операций. Поэтому описание, которое определяет бесконечный процесс, не является алгоритмом.
Говорят, что алгоритм применим к допустимому исходному данному, если с его помощью можно получить искомый результат. Если же результат получить нельзя, то алгоритм к нему не применим. Так, если взять известную процедуру деления в столбик и попытаться разделить 10 на 3, то получим бесконечный процесс. Следовательно, этот алгоритм деления не применим к данным числам (если, конечно, не внести в него какое-либо условие прекращения деления). В то же время деление в столбик является алгоритмом применительно к числам 10 и 2.
Оценка эффективности алгоритмов
Для решения одной и той же задачи можно разработать несколько разных алгоритмов. Поэтому возникает проблема выбора наиболее эффективных алгоритмов. Заметим, что точная оценка эффективности алгоритмов -достаточно сложная задача и в каждом конкретном случае требует проведения специального исследования [4, 30].
Ту часть теории алгоритмов, которая занимается оценкой их характеристик, называют метрической, она, в свою очередь, делится на качественную и количественную [78]. Первая исследует алгоритмы на степень соответствия между исходными данными и результатами. Вторая оценивает сложность как самих алгоритмов, так и задаваемых ими «вычислений», т.е. процессов последовательного преобразования конструктивных объектов. Важно подчеркнуть, что сложность алгоритмов и вычислений может определяться различными способами, причем может оказаться, что при одном способе алгоритм А будет сложнее В, а при другом способе - наоборот.
Чаще всего алгоритмы оцениваются по объему требуемой памяти, числу выполняемых операций, времени решения или погрешности вычислений. Эти характеристики обычно зависят от параметров (размерности) задачи и имеют нелинейный характер. Поэтому в теории алгоритмов предусмотрена интегральная оценка эффективности алгоритмов по асимптотическим составляющим функций требуемой памяти, времени вычисления и т.п. При этом определяется наиболее существенный параметр функции и исследуется ее поведение при возрастании значений параметра. В ходе исследования определяется характер зависимости значений рассматриваемой характеристики алгоритма от параметра. Эта зависимость может быть линейной (пропорциональной параметру п), логарифмической
60
(пропорциональной log п), квадратичной (пропорциональной п2) и т.д. Сравнивая асимптотические оценки алгоритмов, решающих одну и ту же задачу, можно выбрать наболее эффективный алгоритм. Считают, что значение некоторого параметра Т(п) имеет порядок пх, если существуют такие положительные константы к и по, что для всех п>по выполняется неравенство
Предположим, что п - количество числовых данных, поступающих на вход нескольких разных алгоритмов (А,, А2, А3, А4, А.), которые производят вычисления с одинаковой скоростью - 1000 операций в секунду, но имеют разные асимптотические оценки. В таблице 1.3 показаны значения п, которые могут обработать эти алгоритмы за 1 секунду, 1 минуту и 1 час (значения округлены в меньшую сторону до целого числа). Данные этой таблицы наглядно показывают, что производительность алгоритма (число данных, обрабатываемых в единицу времени) существенно зависит от характера функции асимптотической оценки.
Тестирование разработанных алгоритмов обычно проводится при небольших значениях параметра п, что позволяет получить уверенность в работоспособности алгоритма, но вовсе не гарантирует выполнение задачи при больших значениях п. Причиной этого может быть отсутствие необходимого объема памяти ЭВМ или времени для решения поставленной задачи. Асимптотические оценки важны в том смысле, что позволяют оценить достаточность ресурсов ЭВМ для практических вычислений при известных пределах изменения параметра п.
Пусть алгоритм осуществляет последовательное сложение п чисел. Очевидно, для него асимптотическая оценка числа сложений будет линейной функцией. Теперь предположим, что программа осуществляет попарное перемножение из п чисел и затем их сложение. Поскольку число возможных пар произведений равно п(п-1)/2, то нужно выполнить п(п-1)/2 операций умножения и на одну меньше операций сложения. Тогда общее число операций сложения и умножения можно оценить выражением T(n)=n2/2+n/2+n2/2+n/2-l=n2+n-l<2n2. Следовательно, в данном случае асимптотическая оценка числа сложений и умножений имеет порядок п2.
Таблица 1.3
61
Число обрабатываемых данных при разных функциях асимптотической оценки
Аналитическое исследование для получения асимптотических оценок может оказаться очень сложной процедурой, поэтому зачастую на практике применяют более простые способы приближенной оценки эффективности алгоритмов.
Оценка требуемой памяти. Обычно ее объем представляют в виде суммы четырех компонент:
Заметим, что требуемый объем памяти для хранения, например, исходных или промежуточных данных может быть существенно уменьшен при использовании динамического распределения памяти. Тогда одна и та же ячейка памяти может использоваться для хранения нескольких последовательно вводимых данных.
Оценка сложности алгоритма. Оценка сложности алгоритма - одна из наиболее сложных проблем в теории алгоритмов. На практике сложность алгоритма часто определяют по числу команд алгоритмического языка, на котором описан алгоритм. При этом может учитываться число условных и безусловных переходов. При разных исходных данных может быть разное число выполняемых команд. Поэтому в ряде публикаций, посвященных сложности алгоритмов, предлагается оценивать его сложность по среднему числу исполняемых команд при разных (из числа допустимых) исходных данных.
Оценка времени решения. Прямой способ подсчета времени решения задачи вычисляется по формуле
Заметим, что в ЭВМ время выполнения разных операций может существенно различаться. Наиболее быстро выполняются логические операции.
Время выполнения существенно зависит от метода решения, заложенного в алгоритме; может зависеть от значений входных данных. Так, если алгоритм производит вычисление по формуле N - ac+ad+bc+bd, то требуется выполнить четыре операции умножения и три операции сложения. Однако вычисления можно проводить и по другой формуле: N - (a+b)(c+d). Тогда потребуется только две операции сложения и одна умножения.
62
Кроме того, нужно иметь в виду, что в многопроцессорных вычислительных системах и даже в обычных ЭВМ одновременно могут выполняться сразу несколько операций, что также следует учитывать при оценке времени вычислений.
Асимптотические оценки очень часто применяют именно для оценки временных характеристик алгоритмов.
Точность вычислений. Алгоритм может описывать некоторый приближенный метод решения задачи, при выполнении арифметических операций над большими или очень маленькими числами. При этом естественны ошибки округления (вследствие ограничений длины ячеек памяти ЭВМ и возможности сохранения только ограниченного количества значащих знаков числа) и т.д. Все это приводит к тому, что результаты вычислений по заданному алгоритму будут отличаться от действительных.
При оценке точности вычислений обычно учитывают:
- погрешность преобразований аналоговых сигналов в цифровые (при вводе в ЭВМ данных, представленных в аналоговой форме);
-
погрешности из-за выбранного метода решения задачи;
-
ошибки, возникающие из-за округлений и переполнения.
Приведем несколько примеров, иллюстрирующих причины неточностей при вычислениях.
Пусть ЭВМ работает со словами длиной в один байт и целыми числами с фиксированной точкой со знаком. Вычислим сумму 64 + 65: число 64: 01000000, число 65: 01000001, сумма: 10000001.
Напомним, что левый крайний разряд отведен для задания знака числа (0 - положительное, 1 - отрицательное число). При суммировании заданных положительных чисел произошел перенос единицы в знаковый (старший) разряд байта. В результате вместо правильного значения «+129» в байте оказалось отрицательное число «—127».
Вычислим сумму (128+129) в предположении, что байт хранит целые числа с фиксированной точкой без знака:
число 128: 10000000,
число 129: 10000001,
сумма: 00000001.
В данном примере правильный результат суммирования 257. Однако байт может хранить числа только в интервале 0-255. Поэтому за счет переполнения ячейки получено неправильное значение 1.
Если ЭВМ работает с числами с плавающей точкой, то ячейке памяти может не хватить места для хранения всех разрядов мантиссы или порядка. Например, результат деления 10:3 - бесконечная дробь, а мантисса всегда имеет ограниченное число разрядов. Фактически тогда в ячейку помещается округление действительного значения до количества знаков после запятой, определяемых выбранным форматом задания чисел с плавающей точкой.
63
Кроме того, надо иметь в виду, что при некоторых сочетаниях данных или возникновении сбоев в аппаратной части ЭВМ возможны прерывания работы ЭВМ, которые приводят к непредсказуемым последствиям. В частности, прерывание может возникать при делении на «О».
Контрольные вопросы и задания
-
В каком федеральном законе дается определение понятия «информация»?
-
Какая статья Таможенного кодекса РФ разъясняет отношение к информации, получаемой таможенными органами?
-
В чем различие аналоговой и дискретной форм сигнала?
-
К какой форме относятся цифровые сигналы?
-
Сколько бит необходимо для кодирования дискретного сигнала, имеющего шесть возможных уровней?
-
Что такое избыточность информации, в чем ее полезность?
-
В чем сущность тезаурусной оценки количества информации?
-
Формула Хартли для оценки количества информации.
-
Что такое энтропия по Шеннону?
-
Формула Шеннона для оценки количества информации с учетом вероятностей сообщений.
-
Понятие информационной технологии. В чем ее отличие от технологий в материальном производстве?
-
Понятие системы. Основные свойства системы.
-
Понятие информационной системы, ее основные компоненты.
-
Подсистемы автоматизированной системы.
-
Как оценивается экономическая эффективность системы?
-
Понятие надежности. Показатели надежности.
-
Что такое информационная безопасность?
-
Основные элементы сети связи.
-
В чем различие режимов симплексной, дуплексной и полудуплексной связи?
64
-
Как устроена общегосударственная коммутируемая сеть связи?
-
Система нумерации в телефонной сети.
-
Принципы построения сотовой связи.
-
Каким образом в системе сотовой связи обеспечивается связь с движущимся абонентом?
-
Принцип построения и особенности транкинговой связи.
-
Что такое полоса пропускания линии связи?
-
Что такое затухание в линии связи? От чего оно зависит?
-
Если передаются двухсимвольные сообщения из букв алфавита, содержащего 12 букв, каков максимальный объем информации, передаваемой с одним сообщением при равновероятности всех сообщений?
-
Можно ли передать с одним сообщением 6 и более бит информации, если объект имеет 32 возможных состояния? Минимальное число состояний, при котором сообщение принесет 6 бит информации?
-
Допустим, что максимальная энтропия сообщения Н = 6 бит, а в секунду по линии связи передается 100 ООО сообщений. Чему равна пропускная способность линии?
-
Для обеспечения хорошего качества телефонного разговора по линии связи должны передаваться сигналы в диапазоне 300-3400 Гц. Какую полосу пропускания должна обеспечивать линия связи?
-
Пусть каждый сигнал модема несет 4 бита информации. Если полоса пропускания линии связи 4 кГц, то чему равна пропускная способность линии?
-
Какой полосой пропускания должна обладать линия связи, чтобы модем, каждый сигнал которого несет 6 бит информации, мог вести передачу со скоростью 33,6 Кбит/сек.
-
Что такое алгоритм? Какая необходима информация для составления алгоритма?
-
Какими свойствами должен обладать алгоритм?
-
Способы описания алгоритмов.
-
Разработайте алгоритм определения максимального числа в списке из десяти чисел и изобразите его в виде блок-схемы.
-
Какие виды схем при описании алгоритмов выделяет ГОСТ 19.701-90?
-
Основные критерии оценки алгоритмов.
-
В чем сущность асимптотической оценки алгоритмов?
65