Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы информатики

.pdf
Скачиваний:
26
Добавлен:
26.03.2015
Размер:
2.94 Mб
Скачать

Кирьянов Б.Ф. Основы информатики. 91

с такой структурой, использующей все типовые примитивы (алгоритм Герона, рис. 4.2). За 100 лет до нашей эры Герон старший предложил следующий метод вычисления значения квадратного корня из положительного числа а, предусматривающий последовательное (итерационное) приближение решения xn к точному решению с каждым шагом n (за x0 можно принять любое положительное число большее нуля, например, единицу):

 

 

 

 

 

 

a

 

 

 

 

 

a x

n 1

0,5 x

n

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

xn

В более сложных алгоритмах может быть много вычислительных блоков, последовательность которых определяет порядок вычислений. На выходах блоков условного перехода (анализа условия переходов) вместо слов ―Да‖ и ―Нет‖ можно соответственно указывать ―1‖ и ―0‖, где 1 означает

―Да‖, а ―0‖ – ―Нет‖.

Рис. 4.2. Блок-схема алгоритма Герона

Представление алгоритмов в виде блок-схем очень наглядно и удобно для не очень больших алгоритмов.

Кирьянов Б.Ф. Основы информатики. 92

Задание. Подготовить ответы на вопросы:

В чѐм состоит разница между алгоритмом, программой и процессом?

Как нужно правильно представлять на блок-схемах алгоритмов выход в примитив ―Конец‖ из двух и большего числа разных примитивов?

Примеры функций (и числа π), значения которых вычисляются с помощью итерационных алгоритмов:

Отметим, что значения функций с помощью функциональных рядов можно вычислить лишь в случае сходимости этих рядов. Так, последний из приведѐнных рядов сходится только при x (0,5, 1,5).

Задания. 1) Нарисовать блок-схему реализации одного из приведенных

алгоритмов.

 

2)00Определите значения a и b, по-

 

лучаемые с помощью алгоритма,

 

приведѐнного на рис. 4.3.

 

3)00Обоснуйте правильность выво-

 

да: если в блоке проверки условия

 

вместо n = 3 принять n = 99, то по-

 

лучаемые значения a и b не изме-

 

нятся.

 

4)0 Приведѐнный выше алгоритм

 

(ряд) для вычисления значения sin x

 

сходится при x (- , ). Пусть

 

нужно вычислить значение sin(6) с

 

погрешностью не более 0,001. Од-

 

нако члены приведѐнного алгорит-

 

ма с ростом n вначале увеличива-

Рис. 4.3. Алгоритм преобразования

ются, а затем начинают медленно

чисел a и b

Кирьянов Б.Ф. Основы информатики. 93

уменьшаться. Погрешность вычисления не превышает модуля первого отбрасываемого члена ряда. Поэтому для достижения заданной точности (например, погрешность не более 0,001) придѐтся сложить очень большое число членов ряда.

Предложите алгоритм вычисления значения sin(6) с малым числом членов ряда, определите число этих членов, необходимых для определения указанного значения с 6-ю точными цифрами после запятой (значение sin(6) с 7-ю точными знаками после запятой равно -0,2794155).

Общие сведения о стохастических алгоритмах. Стохастические (веро-

ятностные) алгоритмы получили широкое применение в более поздние годы (в последние десятилетия прошлого века). Все они являются циклическими, итерационными. При их применении нарушается однозначность каждого шага в отдельности, но в итоге имеет место ―практически однозначное решение‖.

Рассмотрим пример построения стохастического алгоритма вычисления значения интеграла z от функции f (x) = 4x sin(πx/220)/e0,01x на отрезке [a, b]. Аналитически этот интеграл не берѐтся. На каждом цикле алгоритма выполняется следующее (рис. 4.4):

с помощью стандартной программы random, генерируется n случайных точек (x, y) с равномерным распределением в прямоугольнике с основанием ab и высотой c, где c f (x)max;

если на i-м шаге алгоритма точка (xi , yi ) попадѐт в область, ограниченную функцией f(x), то есть будет выполняться условие yi fi, то число m точек, попавших в указанную область, увеличивается на единицу.

Если значение n достаточно велико, то можно принять, что значение I искомого интеграла равно:

I = (b a)cm/n.

Этот6результат7является7приближѐнным77(оценкой77интеграла). Ношточность0решения,0получаемого с помощью моделирования, неограниченно09увеличивается00с увеличением n.

Рис. 4.4. Реализация стохастического алгоритма интегрирования

Кирьянов Б.Ф. Основы информатики. 94

4.5. Понятие рекурсивного алгоритма. Алгоритмы сортировки

Другим классом алгоритмов, который рассмотрим более подробно, являются рекурсивные алгоритмы. Рекурсивные алгоритмы являются частным случаем циклических алгоритмов. Если в циклическом алгоритме каждое повторное выполнение цикла (или шага) зависит от результатов предыдущих циклов (или шагов, то такой метод называется рекурсией.

К рекурсивным алгоритмам относятся, например, алгоритмы сортировки, большинство алгоритмов поиска, много вычислительных алгоритмов и алгоритмы моделирования.

Пример. Преобразование последовательности независимых случайных величин Xt в последовательность случайных величин Yt с вероятностной зависимостью от Yt−1, Yt−2, … Ytn, Xt, (например, для управления вибростендами):

Yt = A1Yt-1 + A2Yi-2 + ∙ ∙ ∙ + At-n + BXt.

В данном примере на каждом цикле получаются величины Yt, где t – номер цикла, а Ai и B – соответствующие коэффициенты. При этом значение величины Yt зависит от n значений этой величины, полученных на предыдущих циклах, и от значения Xt. Следовательно, данный алгоритм является рекурсивным.

Алгоритмы сортировки. В качестве примера алгоритмов сортировки рассмотрим упорядочение (сортировку) списка имѐн. Аналогично производится сортировка перечня файлов, пофамильных или поимѐнных списков, наименований продаваемых фирмой изделий, списков литературы в библиотечных каталогах, списков студентов в учебной документации по баллам, полученным ими на ЕГЭ и т.д.

Известно несколько алгоритмов сортировки, отличающихся сложностью

иоперативностью. Среди них:

сортировка простым перебором или многократным просмотром списка из n объектов с одного конца с возможной перестановкой соседних объектов, то есть с взаимной заменой их адресов в ОЗУ (простейший алгоритм, требующий не более Сn2 просмотров, где С – коэффициент, зависящий от начальной расстановки объектов);

сортировка с помощью алгоритмов, использующих различный порядок сравнения объектов: типа дерева, пирамидальная, быстрая и другие разновидности сортировки; цель появления указанных алгоритмов – стремление повысить оперативность выполнения сортировки;

Кирьянов Б.Ф. Основы информатики. 95

сортировка методом вставок – простой, наиболее популярный в настоящее время алгоритм сортировки, который для перемещения объектов использует лишь одну дополнительную ячейку ОЗУ.

Ниже поясняются два алгоритма сортировки. Студентам рекомендуется провести сравнительный анализ этих методов по оперативности их работы в случае обработки больших массивов информации.

В первом примере на каждом шаге программа просматривает соседние пары имѐн сверху вниз (аналогично это можно выполнять и снизу вверх) и при выполнения критерия необходимости их перестановки меняет их местами. Данный способ при простоте его алгоритма при больших массивах данных является наиболее длительным.

№ шага

0

 

1

 

2

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Павел

 

 

Анна

 

 

Анна

 

 

Алла

 

Пример сортировки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Анна

 

 

Павел

 

 

Алла

 

 

Анна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

списка имѐн методом

 

 

Семѐн

 

 

Алла

 

 

Иван

 

 

Иван

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

простого перебора

 

 

Алла

 

 

Иван

 

 

Павел

 

 

Павел

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Иван

 

 

Семѐн

 

 

Семѐн

 

 

Семѐн

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рассмотрим алгоритм сортировки методом вставок. Работа алгоритма по шагам поясняется приводимым ниже примером.

Кирьянов Б.Ф. Основы информатики. 96

Задания. Выполнить сортировки тех же имѐн методом простого перебора и методом вставок при начальной расстановке имѐн, обратной конечной.

Отметим, что при выполнении сортировки любым методом для определения первоочерѐдности букв программы используют таблицу алфавита, хранимую в оперативной памяти.

4.6. Алгоритмы поиска

К задачам поиска относятся задачи определения корней и экстремальных значений функций, поиск литературы по задаваемому еѐ признаку, поиск в интернете каких-либо сведений по их характеристике и т.д. Массив, в котором ведѐтся поиск, может быть упорядочен или не упорядочен. При этом отыскиваться может не один элемент массива, а целая группа элементов, характеризующихся задаваемым признаком.

Специальная память ЭВМ, в которой хранятся такие элементы, почти до конца прошлого столетия называлась ассоциативной. Обращение к ассоциативной памяти осуществляется не по адресу, а по признаку. В последующие годы указанная память и еѐ части с соответствующими однотипными сведениями стали называться базами данных.

Алгоритмы поиска в крупном плане делятся на алгоритмы последовательного поиска и алгоритмы двоичного поиска. В первом случае производится перебор элементов массива. При этом упорядоченность массива в среднем даѐт такую же скорость поиска, как и неупорядоченность.

Алгоритмы двоичного поиска позволяют значительно сократить время поиска только в упорядоченных массивах. На каждом шаге эти алгоритмы позволяют в 2 раза уменьшить часть массива, начиная со всего массива, в которой на находится искомый элемент массива. Типичный пример – отыскание корня функции на некотором отрезке, рассматриваемый ниже.

На рис. 4.5 приведѐн график функции f (x) = 35[x ∙ ln(x) − e−0,6x – 0,03x]. Необходимо найти корень уравнения f (x) = 0 на отрезке [1, 5]. На первом шаге алгоритма двоичного поиска отрезок [1, 5] делится пополам, в точке x = 3 (середина указанного отрезка) определяется знак функции, и поскольку он совпадает с еѐ знаком в точке x = 5, то отрезок [3, 5] из дальнейшего рассмотрения исключается. Следовательно, на следующем шаге будет анализироваться отрезок [1, 3], в результате чего из рассмотрения будет исключѐн отрезок [1, 2] и т.д. Подобное приближение к корню решаемого уравнения продолжают пока длина

Кирьянов Б.Ф. Основы информатики. 97

отрезка, на котором находится корень, не будет превышать допустимой погрешности решения.

Рис. 4.5. Пример выполнения трѐх первых шагов итерационного алгоритма поиска корня функции

Аналогично решаются задачи поиска слова в упорядоченном массиве, поиск нужного личного дела служащего в картотеке работающих на предприятии и др. Эти примеры требуют выполнения циклического алгоритма, число шагов которого заранее не известно. Повторение цикла осуществляется при выполнении или при невыполнении определѐнного условия. Поэтому соответствующие алгоритмы являются рекурсивными.

Рассмотрим три метода реализации рекурсивного алгоритма вычисления значения не берущегося аналитически интеграла

Будем считать, что значение этого интеграла вычисляется путѐм последовательных приближений y1, y2, y3, . . . к точному его значению до тех пор, пока абсолютное значение приращения yn yn-1 ещѐ будет превышать некоторую величину , например, 0,0001.

a) С использованием операторов repeat (повторение) и until (пока, до тех пор пока), то есть повторение пока не выполнится указанное условие).

Int2:=0; n:=50; repeat

Int1:=Int2;

Кирьянов Б.Ф. Основы информатики. 98

n:=2*n;

dx:=8/n;

for I:=1 to n do Int2:=Int2+sin(dx*I+1)/(dx*I+1)*dx;

until abs(Int2-Int1)<=0.0001; // цикл с постусловием

В этом методе не требуются операторы begin и end.

b) С использованием операторов while (до тех пор пока верно указанное условие) и do (выполнить).

Int2:=0; n:=50;

while abs(Int2-Int1)>0.0001 do begin // цикл с предусловием Int1:=Int2;

n:=2*n;

dx:=8/n;

for I:=1 to n do Int2:=Int2+sin(dx*I+1)/(dx*I+1)*dx; end;

c)

С использованием операторов if then goto … (если верно … то пе-

рейти к …).

 

Int2:=0; n:=50;

 

Met: Int1:=Int2;

 

 

n:=2*n;

 

 

dx:=8/n;

 

 

for I:=1 to n do Int2:=Int2+sin(dx*I+1)/(dx*I+1)*dx;

if

abs(Int2-Int1)<=0.0001 then goto Met;

// цикл с постусловием

При использовании этого метода в ―шапке‖ программы или процедуры задаѐтся label Met.

Задачи. 1) Какое максимальное количество элементов списка нужно рассмотреть (проверить), если алгоритм двоичного поиска применяется к списку, состоящему из 200 элементов? Из 100000 элементов?

2) Подготовить программу поиска максимума функции двух переменных f(x,y), заданной на прямоугольнике x [a, b], y [c, d] методом покоординатного поиска (поочерѐдно делается проверка целесообразности выполнения шага по каждой координате).

Кирьянов Б.Ф. Основы информатики. 99

4.7. Алгоритмы моделирования

Понятия модели и моделирования. Слово ―модель‖ происходит от греческого слова modulus. Примеры моделей из истории: геоцентрическая система (модель) мира Клавдия Птолемея (2-й век до н.э.), гелиоцентрическая система (модель) мира Николая Коперника (16-й век н.э., helio – приставка, означающая солнце), карты мореплавателей. В 20-м веке с появлением ЭВМ появилась возможность использовать их для разработки исследований математических моделей. Задачи этого класса являются наиболее большим классом задач, решаемых с использованием ЭВМ.

Примеры моделей из современной жизни: самолето- и кораблестроение (при их проектировании моделирование используют для оценки работы различных устройств и строящихся объектов в целом в рабочих условиях), здравоохранение (испытание новых лекарств на подопытных животных, военное дело (розыгрыш военных действий), милиция (фотороботы преступников), строительстве (планы застройки городов), ателье мод (варианты моделей одежды) и др.

Общие определения модели и моделирования

А. А. Ляпунов: Моделирование – это опосредованное практическое или теоретическое исследование объекта, при котором непосредственно изучается не сам интересующий нас объект, а некоторая вспомогательная искусственная или естественная система (модель).

Советов Б.Я. и Яковлев С.А.: Модель – это объект-заместитель объектаоригинала, обеспечивающий изучение некоторых свойств оригинала.

Задачи и разновидности моделирования. Цель моделирования: изучение объ-

ектов и явлений с помощью их моделей. Основные его разновидности: физическое и математическое. Иногда выделяют административное моделирование.

Задание: Привести пример административного моделирования.

Определения математической модели и математического моделирования

Самарский А.А. и Михайлов А.П.: Математическая модель – это «эквивалент объекта, отражающий в математической форме важнейшие его свойства – законы, которым он подчиняется, связи, присущие составляющим его частям».

Севостьянов0А.Г.: Математической моделью называется0совокупность математических соотношений, уравнений, неравенств и т.п., описывающих

Кирьянов Б.Ф. Основы информатики. 100

основные закономерности, присущие исследуемому процессу, объекту или системе.

Скворцова М.: Математическая модель – это приближенное описание какого-либо класса явлений или объектов реального мира на языке математики. Основная задача математического моделирования – не только исследовать эти объекты,0но0и0предсказать0результаты0будущих0наблюдений.

В общем случае модель может не учитывать некоторые свойства оригинала, если они не являются существенными для рассматриваемой задачи. Например, модель может иметь меньшее количество входов или выходов, чем оригинал (рис. 4.6).

Рис. 4.6. Абстрактная система оригинал – модель

аа

Моделирование исследуемых систем

Физическое

 

Математическое

 

 

 

Аналитическое Имитационное

Рис. 4.7. Способы моделирования систем

Моделирование (рис. 4.3) предполагает разработку и исследование модели. При физическом моделировании модель имеет физическую природу. При имитационном моделировании в модели воспроизводятся и исследуются процессы, происходящие в оригинале. Для реализации имитационного моделирования имеется даже специализированное программное обеспечение, которое