- •Предисловие
- •Введение
- •Раздел I основания математики Глава 1. Элементы теории множеств
- •1.1. Понятие множества
- •1.2. Операции над множествами
- •1.3. Аксиомы и теоремы алгебры множеств
- •Глава 2. Числа
- •2.1. Системы счисления
- •2.2. Классы чисел
- •2.3. Элементы статистической обработки данных
- •2.4. Алгоритмы решения вычислительных задач
- •Глава 3. Элементы математической логики
- •3.1. Понятие высказывания
- •3.2. Операции над высказываниями
- •2.3. Аксиомы и теоремы алгебры логики
- •Раздел II основы математического анализа Глава 4. Функции
- •4.1. Понятие функции
- •4.2. Аппроксимация функций
- •4.3. Предел функции
- •Глава 5. Основы дифференциального исчисления
- •5.1. Производная функции
- •5.2. Свойства дифференцируемых функций
- •5.3. Дифференциал функции
- •Глава 6. Основы интегрального исчисления
- •6.1. Определенный интеграл
- •6.2. Машинные алгоритмы вычисления определенных интегралов
- •Раздел III основы теории вероятностей Глава 7. Понятие вероятности
- •7.1. Элементы комбинаторики
- •7.2. Случайные события
- •7.3. Классическое определение вероятности
- •7.4. Теорема умножения вероятностей
- •7.5. Основные формулы теории вероятностей
- •Глава 8. Случайные величины
- •8.1. Понятие случайной величины
- •8.2. Законы распределения случайных величин
- •8.3. Числовые характеристики случайных величин
- •8.4. Канонические распределения случайных величин
- •8.5. Энтропия и информация
- •Раздел IV. Основные способы и методы защиты информации Глава 9. Основы криптографической защиты информации
- •9.1. Принципы и основные понятия криптографической защиты информации
- •9.2. Основные понятия и определения
- •Глава 10. Методы криптографической защиты информации
- •10.1. Методы перестановки
- •10.2. Метод гаммирования
- •Ответы к задачам
- •Раздел I.
- •Глава 1. Элементы теории множеств
- •Глава 2. Числа
- •Глава 3. Элементы математической логики
- •Раздел II. Основы математического анализа
- •Глава 4. Функции
- •Глава 5. Основы дифференциального исчисления
- •Глава 6. Основы интегрального исчисления
- •Раздел III. Основы теории вероятностей
- •Глава 7. Понятие вероятности
- •Глава 8. Случайные величины
- •Глава 9. Основы криптографической защиты информации
- •Глава 10. Методы криптографической защиты информации
- •Приложение тесты
- •Тест 1. Элементы теории множеств
- •Тест 4. Функции
- •Тест 5. Основы дифференциального исчисления
- •Определенный интеграл
- •Тест 7. Понятие вероятностй
- •Тест 8. Случайные величины
- •Тест 10. Методы криптографической защиты информации
- •Литература
- •Сведения об авторах
- •Королёв Владимир Тимофеевич, Ловцов Дмитрий Анатольевич,
- •Математика и информатика Часть первая
2.4. Алгоритмы решения вычислительных задач
Приступая к решению любой задачи, человек планирует последовательность действий, выполнение которых приводит к достижению поставленной цели. Подобный план действий называют алгоритмом. Вообще человек живет в мире алгоритмов. Так, имея намерение позвонить в другой город, мы в кабине междугороднего телефона находим инструкцию, следуя которой можно это сделать. Своего рода сборником алгоритмов является УПК (скажем, Глава 26. Допрос. Очная ставка. Опознание. Проверка показаний). Но все такого рода алгоритмы не являются предметом нашего внимания. В математике имеют дело с вычислительными алгоритмами.
Вычислительным алгоритмом называется строгое описание эффективной процедуры решения математической задачи.
Конечно, такое определение алгоритма отнюдь не научное. Не ясно, что значит «строгое описание» или «эффективная процедура». Но интуитивно понятно, что здесь имеется в виду. И нам этого вполне достаточно.
Поясним смысл сказанного примером. Пусть заданы натуральные числа A и B. Требуется найти их наибольший общий делитель НОД. Древнегреческий математик Евклид в III веке до н.э. составил остроумный алгоритм решения этой задачи. Приведем описание этого алгоритма в современной интерпретации:
Положить X равным A, а Y равным B.
Если X больше Y, то перейти к п.4.
Если X меньше Y, то перейти к п.5.
Положить НОД равным X и перейти к п.6.
Положить X равным XY и перейти к п.1.
Положить Y равным YX и перейти к п.1.
Закончить вычисления (СТОП).
Таблица 2.5 |
||
Шаг |
Пункт алгоритма |
Результат действия |
0 |
0 |
X12, Y18. |
1 |
1 |
XY? – Нет. |
2 |
2 |
XY? – Да. |
3 |
5 |
YYX6. |
4 |
1 |
XY? – Да. |
5 |
4 |
XXY6. |
6 |
1 |
XY? – Нет. |
7 |
2 |
XY? – Нет. |
8 |
3 |
НОД6. |
9 |
6 |
СТОП. |
Назовем основные требования, которым должны отвечать алгоритмы.
Конечность. Это требование состоит в том, что запущенный в работу алгоритм за конечное число шагов должен завершиться получением искомого результата.
Определенность. На любом шаге вычислений должно быть ясно, что делать дальше (перейти к следующему пункту, вернуться к тому или иному из предыдущих пунктов, или закончить работу).
Каждому алгоритму ставится в соответствие множество числовых величин, допустимых для него в качестве исходных данных. Точно так определено и множество допустимых для этого алгоритма результатов вычислений. Скажем, для алгоритма Евклида исходные величины А и В, результат его работы НОД относятся к классу натуральных чисел. Применение алгоритма к величинам, которые не являются для него допустимыми, чревато, как минимум, получением абсурдных результатов, но, скорее всего, алгоритм на этих данных не будет отвечать требованиям конечности и определенности. В этом убеждает применение алгоритма Евклида к отрицательным целым числам.
Алгоритм Евклида был задан своим словесным описанием. Ясно, что так можно описать решение сравнительно простой задачи. Более или менее сложная задача потребует громоздкого, запутанного словесного описания. И все равно, в самом подробном таком описании многое останется между строк, в контексте. Например, в алгоритме Евклида мы не указали явно, что после пункта 0 должен выполняться пункт 1, а при невыполнении условия X больше Y в пункте 1 следует перейти к пункту 2. Все это – нарушение требования определенности алгоритма. В естественном языке имеются синонимы, а есть и многозначные слова. Поэтому получить строгое задание алгоритма средствами естественного языка нельзя.
Рассмотрим самый удобный и наглядный способ задания алгоритмов, свободный от указанных недостатков словесного описания. Это представление его в форме графа алгоритма. Так, на рис.2.3 показан граф алгоритма вычисления НОД по Евклиду. Сравнив рис 2.3 с вербальным описанием этого алгоритма, легко убедиться в том, что они практически идентичны. Отметим, кстати, что такое указание вербального алгоритма как «Положить XXY!» на графе задается конструкцией: X:XY, которую называют оператором присваивания.
Опишем
подробнее средства графического
представления алгоритмов.
На том или ином шаге вычислений выполняют действия двух типов. Первый тип действий – содержательная обработка информации: задание исходных данных, вычисление значения переменной, (например, Y:=YX), фиксация результатов вычислений и т.п. Второй тип действий – анализ результатов, полученных на предыдущих шагах, и выбор дальнейшего пути развития вычислительного процесса (скажем, проверка условия XY и переход по результату проверки на тот или иной пункт алгоритма). В соответствии с этим, для графического представления алгоритмов используем два символа:
прямоугольник, внутри которого записывается действие первого типа, выполняемое на данном шаге вычислений,
ромб (или шестиугольник, полученный усечением ромба, как на рис.2.3), внутри которого записывается проверяемое условие.
Эти символы называют вершинами графа: прямоугольник – операторной вершиной, а ромб (шестиугольник) – условной вершиной.
Вершины графа соединяют дугами (стрелками) в соответствии с логикой развития вычислительного процесса.
Операторная вершина может иметь один или несколько входов (к ней подходят одна или несколько стрелок), но у нее должен быть один и только один выход (из нее выходит лишь одна стрелка).
Условная вершина, как и операторная, может иметь один или несколько входов. Проверяемое условие в момент его проверки может выполняться (да), а может и не выполняться (нет). Поэтому условная вершина имеет два выхода. Один из них отвечает тому направлению хода вычислений, которое имеет место при выполнении условия. Этот выход отмечается символом 1. Второй выход соответствует тому направлению развития вычислительного процесса, которое имеет место, когда условие в ромбе не выполняется. Этот выход отмечается символом 0.
Среди операторных вершин две – особые: начальная и конечная. Начальная вершина не имеет входов, конечная вершина не имеет выхода. На рис. 2.3. начальная вершина – Ввод X,Y, а конечная – Вывод НОД.
Корректно разработанный граф (тот, который отвечает требованиям конечности и определенности) отличается тем, что:
он должен иметь одну и только одну начальную вершину, одну и только одну конечную вершину,
из любой вершины графа должен быть путь в конечную вершину.
Для того чтобы в поясняющем тексте можно было сослаться на ту или иную вершину графа, ее снабжают меткой. Обычно в качестве метки используют число, записываемое в разрыв контура вершины. На рис. 2.3 вершины графа отмечены символами, которые отвечают пунктам словесного алгоритма Евклида.
Вопросы и задачи для самоконтроля
Определить понятие «позиционная система счисления».
Выполнить последовательный перевод из десятичной системы счисления в двоичную, а из нее в шестнадцатеричную, после чего вернуться в десятичную для чисел:
130, 251, 617, 976, 1920, 5295, 12908.
С какими классами чисел оперируют на практике и в математике? Дать характеристику каждому из классов чисел и отношениям между классами.
Пояснить смысл операции (A)mod M. Найти (A)mod M для
A{1000, 73,7} и M{19, 10, 6}.
Сформулировать алгоритм округления десятичных дробей. Округлить число
3.14159265358979323846264338327950
до шести, до двух знаков, до целого.
Разработать граф алгоритма округления правильной дроби до k разрядов после точки.
Представить в стандартной форме числа
0.000765402, 76540.2
Данные о количестве судей в городах Гончаров и Тургенев сведены в табл. 2.6. В каком из городов ситуация с судьями сложнее?Таблица 2.6
город
по штату
некомплект
Гончаров
145
55
Тургенев
352
98
Выполнить ДКЗ: Тест 2. ЧИСЛА.
