
- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 1. Роль алгоритмов в науке и технике
- •§ 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. Сознание машин. Алгоритмическое моделирование
§ 7. Распознавание алгебраического тождества
До сих пор исходными данными для рассматриваемых нами алгоритмов были числа или группы чисел. Рассмотрим теперь другие алгоритмы, исходными данными которых являются алгебраические выражения. Ограничимся простейшим случаем целых рациональных алгебраических выражений, т. е. таких, в которых предусмотрены только действия сложения, вычитания, умножения и возведения в целую положительную степень.
Прежде всего строго определим, что мы понимаем под целым рациональным алгебраическим выражением (будем его в данном параграфе для краткости называть просто выражением). Для этого приведем следующее рекурсивное определение:
1) буквой будем называть строчную букву латинского алфавита; числами будем называть общепринятые десятичные дроби (в частности, целые числа) и обыкновенные дроби, как положительные, так и отрицательные;
2) элементарным выражением называется либо буква, либо число, записанное без знака (значит, положительное), либо произвольное выражение, заключенное в скобки (круглые);
3) множителем называется либо элементарное выражение, либо элементарное выражение, возведенное в целую положительную степень;
4) одночленом называется либо множитель, либо одночлен, за которым стоит знак умножения и множитель;
5) многочленом, или выражением называется либо одночлен, либо одночлен, перед которым поставлен знак +, либо одночлен, перед которым поставлен знак –. либо многочлен, после которого приписан знак + или знак —, а затем приписан одночлен.
Это рекурсивное определение устанавливает нам совершенно точно структуру записи, которая называется выражением.
Будем считать, что читатель знает, в чем заключаются операции раскрытия скобок, приведения подобных и упрощения одночленов. Впрочем, скажем об этих операциях несколько слов. Упрощение одночлена производится в том случае, когда внутри этого одночлена нет скобок. Заключается эта операция в том, что входящие в его состав числа (коэффициенты) между собой перемножаются. То же делается с буквенными сомножителями, которые при этом располагаются в порядке алфавита (допустим, что он нам задан) и записываются каждый один раз с соответствующим показателем степени. Коэффициент пишется впереди букв.
Подобными называются уже упрощенные одночлены, отличающиеся, может быть, только коэффициентами. Их приведение заключается в том, что вычисляют алгебраическую сумму коэффициентов и заменяют их одночленом, перед которым стоит знак этой суммы, коэффициент равен ее абсолютному значению, а буквенная часть такая же, как буквенная часть любого из приводимых одночленов. Если алгебраическая сумма окажется равной нулю, то результатом приведения будем считать +0.
Операция раскрытия скобок не требует пояснения.
Алгоритм распознавания тождества двух выражений очень прост.
1. Второе из выражений заключить в скобки, перед открывающей скобкой поставить знак — и все это приписать к первому выражению. Полученное выражение будем называть W. Перейти к п. 2.
2. Просматривать W слева направо и искать такую пару скобок, внутри которой больше нет скобок. Если такая пара найдется, перейти к п. 3, если не найдется, то перейти к п. 6.
3. Проверить, стоит ли вверху справа от закрывающей скобки показатель степени больше 1. Если стоит, перейти к п. 4, иначе перейти к п. 5.
4. Возвести выражение, стоящее в скобках, в соответствующую степень, пользуясь правилом умножения многочленов. Зачеркнуть после этого показатель степени, который стоит после закрывающей скобки. Перейти к п. 5.
5. Раскрыть рассматриваемую пару скобок. Именем W впредь называть получившееся при этом новое выражение. Вернуться к п. 2.
6. Просматривая W слева направо, последовательно упростить все входящие в него одночлены. Перейти к п. 7.
7. Первый одночлен, входящий в W, будем в дальнейшем называть U. Перейти к п. 8.
8. Просматривая W, начиная с одночлена, следующего за U, искать одночлены, подобные U. Отмечать их. После конца просмотра привести их вместе с U, полученный результат записать вместо U и считать обозначенным этой буквой. Помеченные одночлены вместе с принадлежащими им знаками зачеркнуть. Выражение, которое после этого получится, впредь именовать W. Перейти к п. 9.
9. Если U не является предпоследним или последним в W, то перейти к п. 10, иначе к п. 11.
10. Найти в W многочлен, непосредственно следующий за U, и в дальнейшем называть его именем U. Вернуться к п. 8.
11. Если W состоит из нуля или является алгебраической суммой нулей, то перейти к п. 12, иначе к п. 13.
12. Сравниваемые многочлены между собой тождественны. Конец процесса.
13. Сравниваемые многочлены между собой не тождественны. Конец процесса.
Интересной особенностью данного алгоритма является наличие в нем двух «концевых» пунктов.
Рассмотренный алгоритм решает задачу распознавания тождества алгебраических целых рациональных выражений. О задачах, для решения которых существует алгоритм, говорят, что они разрешимы. До сих пор мы рассматривали только разрешимые задачи (так как каждый раз нам удавалось найти решающий алгоритм).
Корректность алгоритма вытекает из того, что действия, которые выполнялись над выражением W, не изменяли ни для каких возможных значений букв значения выражения W.