Лекции / 3
.pdfРассмотрим эту технику на примере вычисления произведения n матриц М=М1 x М2 x...x Мk , где Mi-матрица с ri-1 строками и ri столбцами. Порядок, в котором эти матрицы перемножаются, может существенно сказаться на общем числе операций, требуемых для вычисления М, независимо от алгоритма, применяемого для умножения матриц.
Пример 4.1.
Будем считать, что умножение (р x q)-матрицы на (q x r)-матрицу требует pqr операций, и рассмотрим произведение (в квадратных скобках указаны размерности матриц).
М= М1 x М2 x М3 x М4 [10 x 20] [20 x 50] [50 x 1] [1 x 100]
Если вычислять М в порядке М1x (М2x(М3xМ4)), то потребуется 125000 операций, тогда как вычисления в порядке (М1x(М2xМ3))xМ4 занимает лишь 2200 операций.
рекурсия.
Процедура, которая прямо или косвенно обращается к себе, называют рекурсивной. Рекурсивное программирование базируется на разбиении задач на аналогичные подзадачи меньшей размерности. Рекурсивные вызовы образуют древовидную структуру, количество вершин в которой определяет эффективность алгоритма, обычно выражаемую через сложность. Разница между различными типами алгоритмов состоит в способе получения подзадач, их размерности, способе соединения полученных результатов.
§. Базовые понятия языка Пролог: термы и предикаты.
Объекты данных в Прологе называются термами. Терм может быть константой, переменной или структурой (составным термом). Константа может быть либо атомом, либо числом.
Атомы бывают трех типов:
1.последовательность букв, цифр и знака "подчёркивание", обязательно начинающаяся со строчной буквы (маленькой буквы);
2.последовательность спецзнаков ":-", "?-", "=", ">=", "--" и др.;
3.заключённая в апострофы (одинарные кавычки) последовательность любых символов.
Примеры атомов: abcD, a_gear, '17-256', xyz100.
Переменная – имя, начинающееся с большой (прописной) буквы или знака подчеркивания. Когда значение переменной несущественно, то в качестве имени переменной используется знак подчеркивания. Такая переменная называется анонимной.
Структура представляется на языке ПРОЛОГ с помощью указания её функтора и компонент в следующем виде:
функтор(компонента-1, ...., компонента-N)
где в качестве функтора должен выступать атом, а компонентой может быть любой терм (в том числе и структура). Число компонент в структуре называется арностью структуры. Структуры используются для представления предикатов.
Базу фактов в программе на языке ПРОЛОГ составляют утверждения, описывающее факты предметной области в виде структур, функторами которых являются атомы - имена отношений (предикатные буквы), а компонентами - предметные константы. При описании фактов переменные не используются.
Правило задает новый предикат через предикаты, определенные ранее. Правило состоит из головы (предиката) и тела – последовательности предикатов. Голова отделяется от тела значком :- , который можно интерпретировать как слово «Если». Таким образом, заключение является головой правила, а тело правила состоит из набора посылок. Использование правил
является основным способом представления знаний в интеллектуальных системах. Смысл правила состоит в том, что цель, являющаяся головой, будет истинной, если интерпретатор ПРОЛОГа сможет показать, что все выражения (подцели) в теле правила являются истинными. В правилах буква X (или любая другая заглавная буква, или любое слово, начинающееся с заглавной буквы) обозначает переменную, которая может принимать разные значения.
Так, правило situ (X, europe):- situ (X, poland) означает, что любой польский город является одновременно европейским городом.
В ПРОЛОГе реализован механизм поиска с возвратом (backtracking), при котором система пытается отыскать все возможные решения задачи. Механизм вывода программы запоминает те точки процесса унификации, в которых не были использованы все альтернативные решения, а затем возвращается в эти точки и ищет решение по иному пути. Однако поиск с возвратом выполняется автоматически только в тех случаях, когда программа решает задачу в результате диалога с пользователем. Если же цель указана в разделе goal программы, то поиск оканчивается после нахождения первого решения задачи. В этом случае для вывода всех решений используется предикат fail, который называют откатом после неудачи. Он вызывает искусственное неуспешное завершение поиска, что позволяет получить все возможные решения задачи.