- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 1. Роль алгоритмов в науке и технике
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 2. Как возникают алгоритмы
- •§ 3. Алгоритмы в математике
- •§ 4. Алгоритм Евклида
- •§ 5. Решето Эрагосфена
- •§ 6. Алгоритм разложения на простые множители. Определение наименьшего кратного двух чисел
- •§ 7. Распознавание алгебраического тождества
- •§ 8. Задачи на построение алгоритмов
- •Глава 3 кризис математики в начале XX века
- •§ 1. Арифметизация математики
- •§ 2. Теория множеств
- •§ 3. Кардинальные числа
- •§ 4. Антиномии
- •§ 5. Выводы из антиномий
- •Глава 4 логические теории алгоритмов
- •§ 1. Рекурсивные функции
- •§ 2. Машины Тьюринга
- •§ 3. Нормальные алгоритмы Маркова
- •§ 4. Эквивалентность описанных теорий
- •Глава 5
- •§ 1. Массовые проблемы. Неразрешимость проблем
- •§ 2. Экстраалгоритм и три неразрешимые проблемы
- •§ 3, Некоторые замечания
- •Глава 6 электронные вычислительные машины и программирование
- •§ 1. Устройство эвм
- •§ 2. Процессоры эвм. Рабочий цикл
- •§ 3. Что такое программа
- •§ 4. Особенности современных эвм
- •§ 5. Входные языки программирования
- •§ 6. Необходимость содержательной теории алгоритмов. Какой она должна быть
- •Г л а в а 7 формальные языки
- •§ 1. Анализ естественного языка
- •§ 2. Искусственные языки. Формальные языки
- •§ 3. Буквы, связи, оболочки, конструкции
- •§ 4. Формальные грамматики
- •§ 5. Нотация Бекуса. Тезаурусы
- •§ 1. Что такое операция?
- •§ 2. Натуральные операции
- •§ 4. Первичные алгоритмы
- •§ 5. Натуральные алгоритмы
- •§ 6. Ограничения на структуру исходных данных сняты
- •§ 8. Соотношение с алгоритмами в интуитивном смысле
- •§ 10. Исследование тупиков (клинчей)
- •§ 11. Формальная семантика формального языка
- •Глава 9 математическое обеспечение эвм
- •§ 1. Анализ эвм и программ
- •§ 2. Что такое математическое обеспечение эвм
- •§ 3. Функциональная классификация программ математического обеспечения эвм
- •§ 4. Операционные системы
- •И автоматизация процессов
- •§ I. Использование эвм для управления
- •§ 2. Информационные системы
- •§ 3. Алгоритмизация процессов
- •§ 4. Язык алгоритмизации процессов
- •§ 5. Наука и искусство алгоритмизации
- •Заключение
- •§ 1. Может ли машина мыслить? Может ли человек решить алгоритмически неразрешимую проблему?
- •§ 2. Детерминированность машин. Самообучение
- •§ 3. Сознание машин. Алгоритмическое моделирование
§ 4. Первичные алгоритмы
Предположим, что задан некоторый формальный язык, назовем его L, и некоторое число операций, причем среди них есть и такие, которые применимы к предложениям языка L. Предположим, что, кроме того, задано некоторое число предикатов, представляющих собой утверждения о конструкциях. Язык L будем называть языком операндов.
Пусть, кроме языка L, задан еще один язык L*, предложения которого называются записями первичного алгоритма. Язык L* очень прост. Его можно задать с помощью нотации Бекуса. Применяемые при этом формулы могут иметь вид
<Запись первичного алгоритма> ::== <приказ> | <Запись первичного алгоритма> <приказ>
Эта формула означает, что запись первичного алгоритма есть строка, образованная из приказов.
Следующая формула разъясняет приказ (их бывает два вида):
<приказ> ::= <условный приказ> | <безусловный приказ>
Мы могли бы и далее продолжить описание предложений языка L*, пока не дошли бы до перечня букв — алфавита этого языка.
Но формальное описание языка занимает много места и не очень подходит для чтения, хотя и обладает наибольшей возможной точностью. Опишем язык L* на русском языке, лишь изредка прибегая к формулам Бекуса. Каждый безусловный приказ состоит из расположенных друг за другом метки, разделителя-1, знака действия, раздели-теля-2, безусловной отсылки и разделителя-3. Его структура может быть передана так:
<метка> <разделитель-1> <знак действия> <разделитель-2> <безусловная отсылка> <разделитель-3>
Условный приказ вместо знака действия имеет знак условия, может иметь другие внутренние разделители и вместо безусловной отсылки имеет условную отсылку. Его структура такова:
<метка> <разделитель-4> <знак условия> <разделитель-5> <условная отсылка> <разделитель-3>
Будем считать, что структура безусловной отсылки такая же, как и метки:
<безусловная отсылка> ::= <метка>
Условная отсылка представляет собой две метки, разделенные разделителем-6. Ее структура имеет вид
<метка> <разделитель-6> <метка>
У нас ничего не сказано о таких метатерминах, как разделители, метки, знаки действий и знаки условий. Мы их не определили умышленно, чтобы по приведенной схеме можно было строить разные языки.
Заметим только, что все эти элементы приказов являются словами в алфавите языка L*. Но эти слова должны удовлетворять некоторым условиям. Они должны быть такими, чтобы каждый приказ расчленялся на них единственным способом.
Предположим теперь, что мы выбрали алфавит языка L* и определили каждый из классов морфем (метки, 6 видов разделителей, столько знаков действия, сколько нелогических операций, и столько знаков условий, сколько предикатов). Теперь мы имеем вполне конкретный язык, предложениями которого являются вполне конкретные записи первичных алгоритмов. Но предложения языка L* пока что не имеют никакого смысла. Давайте наделим их семантикой и сделаем это по следующему правилу.
Правило выполнения первичного алгоритма.
1. Найти первый приказ в записи первичного алгоритма. Перейти к п. 2.
2. Определить, является ли приказ безусловным или условным. В первом случае перейти к п. 3; во втором — к п. 5.
3. Найти в приказе знак действия. Выполнить отвечаю щую ему операцию над преобразуемым объектом. Безусловную отсылку принять за отсылку. Перейти к п. 4.
4. Найти в записи алгоритма, двигаясь от его начала к концу, приказ, метка которого одинакова с выбранной отсылкой. Вернуться к п. 2.
5. Найти в приказе знак условия. Определить, удовлетворяет ли ему преобразуемый объект. Если да, то перейти к п. 6, если нет, то перейти к п. 7.
6. Первую из меток, входящих в состав условной отсылки данного приказа, принять за отсылку. Перейти к п. 2.
7. Вторую из меток, входящую в состав условной отсылки данного приказа, принять за отсылку. Перейти к п. 2.
Хотя правило выполнения первичного алгоритма написано на естественном языке, но оно является совершенно точным при условии, что задан набор действий и условий. Для формулировки этого правила выбран такой подъязык русского языка, который, по существу, является формальным.
Теперь наш язык L* наделен семантикой. Будем этот наделенный семантикой язык называть первичным алгоритмическим языком. Его наделенные смыслом предложения называются первичными алгоритмами.
Можно сказать иначе: запись первичного алгоритма, рассматриваемая вместе о правилом выполнения первичного алгоритма, называется первичным алгоритмом. Вторая формулировка точнее первой, но более громоздка.
Забегая вперед, будем иметь в виду, что первичные алгоритмы являются алгоритмами. Если читателя удивляет такое заявление (например, потому, что это будто бы сама собой разумеется: ведь слова «первичный алгоритм» уже значат, что это алгоритм), то автор приведет пример из другой области: «морская свинка» совсем не «свинка».
