Вопрос 1:
Понятие и свойства алгоритмов. Способы
задания алгоритмов, их характеристика
1. Понятие алгоритма
Для составления программы,
предназначенной для решения на ЭВМ какой-либо
задачи, требуется составление алгоритма
ее решения — точного предписания, которое
определяет процесс, ведущий от исходных
данных к требуемому конечному результату.
Алгоритм - предписание, однозначно задающее
процесс преобразования исходной информации
в виде последовательности элементарных
дискретных шагов, приводящих за конечное
число их применений к результату.
Алгоритмами, например, являются
правила сложения, умножения, решения
алгебраических уравнений, умножения
матриц и т.п. Слово алгоритм происходит
от algoritmi, являющегося латинской транслитерацией
арабского имени хорезмийского математика
IX века аль-Хорезми. Благодаря латинскому
переводу трактата аль-Хорезми европейцы
в XII веке познакомились с позиционной
системой счисления, и в средневековой
Европе алгоритмом называлась десятичная
позиционная система счисления и правила
счета в ней.
Алгоритм - это точная инструкция,
а инструкции встречаются практически
во всех областях человеческой деятельности.
Возможны алгоритмы проведения физического
эксперимента, сборки шкафа или телевизора,
обработки детали. Однако не всякая инструкция
есть алгоритм.
Инструкция становится алгоритмом только
тогда, когда она удовлетворяет определенным
требованиям. Эти требования частично
сформулированы в определении, хотя упомянутые
в определении понятия однозначности
и элементарности сами нуждаются в уточнении.
Алгоритм однозначен, если при
применении к одним и тем же данным он
даст один и тот же результат. Но как по
описанию алгоритма определить, однозначен
он или нет. В каком случае шаги считаются
элементарными.
Применительно к ЭВМ алгоритм
определяет вычислительный процесс, начинающийся
с обработки некоторой совокупности возможных
исходных данных и направленный на получение
определенных этими исходными данными
результатов. Термин вычислительный процесс
распространяется и на обработку других
видов информации, например, символьной,
графической или звуковой
2. Свойства алгоритма
Если вычислительный процесс
заканчивается получением результатов,
то говорят, что соответствующий алгоритм
применим к рассматриваемой совокупности
исходных данных. В противном случае говорят,
что алгоритм неприменим к совокупности
исходных данных. Любой применимый алгоритм
обладает следующими основными свойствами:
Дискретность – последовательное выполнение
простых или ранее определённых (подпрограммы)
шагов. Преобразование исходных данных
в результат осуществляется дискретно
во времени.
Определенность состоит в совпадении получаемых
результатов независимо от пользователя
и применяемых технических средств (однозначность
толкования инструкций).
Результативность означает возможность
получения результата после выполнения
конечного количества операций.
Массовость заключается в возможности
применения алгоритма к целому классу
однотипных задач, различающихся конкретными
значениями исходных данных (разработка
в общем виде).
Для задания алгоритма необходимо описать
следующие его элементы:
набор объектов, составляющих
совокупность возможных исходных данных,
промежуточных и конечных результатов;
правило непосредственной переработки
информации (описание последовательности
действий);
правило извлечения результатов.
Алгоритм всегда рассчитан
на конкретного исполнителя. В нашем случае
таким исполнителем является ЭВМ. Для
обеспечения возможности реализации на
ЭВМ алгоритм должен быть описан на языке,
понятном компьютеру, то есть на языке
программирования.
Понятия алгоритма и программы
разграничены не очень чётко. Обычно программой
называют окончательный вариант алгоритма
решения задачи, ориентированный на конкретного
пользователя.
Таким образом, можно дать следующее
определение программы для ЭВМ:
Программа - это описание алгоритма и данных
на некотором языке программирования,
предназначенное для последующего автоматического
выполнения.
3. Способы описания
алгоритмов
К основным способам описания
алгоритмов можно отнести следующие:
словесно-формульный (на естественном языке);
структурный или блок-схемный;
Перед составлением программ
чаще всего используются словесно-формульный
и блок-схемный способы. Иногда перед составлением
программ на низкоуровневых языках программирования
типа языка Ассемблера алгоритм программы
записывают, пользуясь конструкциями
некоторого высокоуровнего языка программирования.
Удобно использовать программное описание
алгоритмов функционирования сложных
программных систем. Так, для описания
принципов функционирования ОС использовался
Алголо-подобный высокоуровневый язык
программирования.
Словесно - формульный способ.
Этот способ записи алгоритма
основан на задании инструкций о выполнении
конкретных действий с использованием
математических символов и выражений
в сочетании со словесным пояснением.
Блок-схемы.
При блок-схемном описании алгоритм изображается
геометрическими фигурами (блоками), связанными
по управлению линиями (направлениями
потока) со стрелками. В блоках записывается
последовательность действий.
Данный способ по сравнению
с другими способами записи алгоритма
имеет ряд преимуществ. Он наиболее нагляден:
каждая операция вычислительного процесса
изображается отдельной геометрической
фигурой. Кроме того, графическое изображение
алгоритма наглядно показывает разветвления
путей решения задачи в зависимости от
различных условий, повторение отдельных
этапов вычислительного процесса и другие
детали.
Оформление программ должно соответствовать
определенным требованиям. В настоящее
время действует единая система программной
документации (ЕСПД), которая устанавливает
правила разработки, оформления программ
и программной документации. В ЕСПД определены
и правила оформления блок-схем алгоритмов
(ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД).
Операции обработки данных и носители
информации изображаются на схеме соответствующимиблоками.
Большая часть блоков по построению условно
вписана в прямоугольник со сторонами
а и b. Минимальное значение а равно 10 мм,
увеличение а производится на число, кратное
5 мм. Размер b=1,5 мм. Для отдельных блоков
допускается соотношение между а и b, равное
1:2. В пределах одной схемы рекомендуется
изображать блоки одинаковых размеров.
Все блоки нумеруются. Виды и назначение
основных блоков приведены в таблице.
Линии, соединяющие блоки и
указывающие последовательность связей
между ними, должны проводится параллельно
линиям рамки. Стрелка в конце линии может
не ставиться, если линия направлена слева
направо или сверху вниз. В блок может
входить несколько линий, то есть блок
может являться преемником любого числа
блоков. Из блока (кроме логического) может
выходить только одна линия. Логический
блок может иметь в качестве продолжения
одни из двух блоков, и из него выходят
две линии. Если на схеме имеет место слияние
линий, то место пересечения выделяется
точкой. В случае, когда одна линия подходит
к другой и слияние их явно выражено, точку
можно не ставить.
Схему алгоритма следует выполнять как
единое целое, однако в случае необходимости
допускается обрывать линии, соединяющие
блоки.
Если при обрыве линии продолжение
схемы находится на этом же листе, то на
одном и другом конце линии изображается
специальный символ соединитель — окружность
диаметром 0,5 мм. Внутри парных окружностей
указывается один и тот же идентификатор.
В качестве идентификатора, как правило,
используется порядковый номер блока,
к которому направлена соединительная
линия. Если схема занимает более одного
листа, то в случае разрыва линии вместо
окружности используется межстраничный
соединитель. Внутри каждого соединителя
указывается адрес — откуда и куда направлена
соединительная линия. Адрес записывается
в две строки: в первой указывается номер
листа, во второй — порядковый номер блока.
Блок-схема должна содержать
все разветвления, циклы и обращения к
подпрограммам, содержащиеся в программе.
Табл.1 Основные элементы блок-
схем
Словесный способ записи алгоритмов использует
средства обычного языка, но с тщательно
отобранным набором слов, фраз, не допускающим
повторений, синонимов, лишних слов.
С помощью данного способа можно описывать
алгоритмы с произвольной степенью детализации.
Табличный способ предполагает представление
алгоритма в виде таблицы решений и в основном
носит вспомогательный характер.
Базовые алгоритмические
конструкции
Совокупность вычислительных
процессов, которая используется для решения
различного рода задач на ЭВМ , в общем
виде может быть разделена на три основные
группы:
- линейные
- разветвляющиеся
- циклические
Линейный алгоритм – это алгоритм, в котором блоки
выполняются последовательно сверху вниз
от начала до конца. В виде блок схемы лигнейный
вычислительгный процесс можно представить
следующим образом (рис 1):
Рис. 1 Линейный вычислительный
процесс
|
Разветвляющиеся
алгоритмы - это где делается выбор: выполнять |
или не выполнять какую-нибудь
группу команд в зависимости от условия,
т.е. выбирается один из нескольких возможных
путей (вариантов) вычислительного процесса.
Каждый подобный путь называется ветвью
алгоритма. Признаком разветвляющегося
алгоритма является наличие операций
условного перехода, когда происходит
проверка истинности некоторого логического
выражения (проверяемое условие) и в зависимости
от истинности или ложности проверяемого
условия для выполнения выбирается та
или иная ветвь алгоритма. (Рис 2) |
|
Циклический вычислительный
процесс- это процесс, в котором вычисления
выполняются многократно по одним и тем
же математическим формулам. Но при разных
значениях исходных данных. Этот многократно
повторяющийся участок вычислительного
процесса называется циклом. (Рис.2)
Рис.2 Виды алгоритмов
4.Основные характеристики
алгоритмов
Для решения одной и той же задачи, как
правило, можно использовать различные
алгоритмы. В связи с этим, возникает необходимость
сравнивать их между собой, и для этого
нужны определенные критерии качества
алгоритмов.
Временные
характеристики алгоритма определяют
длительность решения или временную сложность.
Длительность решения часто выражается
в единицах времени, но удобнее ее выражать
через количество операций, так как количество
операций не зависит от быстродействия
конкретной машины.
Временной сложностью алгоритма называется
зависимость времени счета, затрачиваемого
на получение результатов от объема исходных
данных.
Временная сложность позволяет определить
наибольший размер задачи, которую можно
решить с помощью данного алгоритма на
ПК. Каждый алгоритм можно характеризовать
функцией f(n), выражающей скорость роста
объема вычислений при увеличении размерности
задачи – n. Если эта зависимость имеет
линейный или полиномиальный характер,
то алгоритм считается "хорошим",
если экспоненциальный – "плохим".
Для сложных задач эта характеристика
имеет большое значение, т.к. ее изменение
значительно сильнее влияет на время решения,
чем изменение быстродействия ПК. Например,
при зависимости f(n)= 2n увеличение
производительности в 10 раз увеличивает
размерность задачи, решаемой за то же
время, всего на 15 %.
Объемные
характеристики алгоритма определяют
его информационную сложность. Информационная
сложность связана со сложностью описания,
накопления и хранения исходных, промежуточных
и результирующих данных при решении определенной
задачи.
Объем текста алгоритма (программы) определяется
количеством операторов, использованных
для записи алгоритма.
Объем внутренней и внешней памяти необходимой
для хранения данных и программ при использовании
данного алгоритма определяется на основании
расчетов или опытным путем. При недостатке
памяти носителей информации используется
сегментация программы.
Сложность структуры алгоритма определяется
количеством маршрутов, по которым может
реализовываться процесс вычислений и
сложностью каждого маршрута.
Очевидно, что при выборе алгоритмов нужно
учитывать не только их характеристики
качества, но и способ реализации алгоритма.
Например, многие итерационные алгоритмы
удобны для ПК, но слишком трудоемки для
человека. Тип используемого ПК также
может влиять на выбор алгоритма (иногда
имеет место и обратный вариант, когда
сначала определяется алгоритм и лишь
затем способ реализации).