Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / 3

.pdf
Скачиваний:
118
Добавлен:
29.01.2021
Размер:
252.12 Кб
Скачать

Рассмотрим эту технику на примере вычисления произведения 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(М34)), то потребуется 125000 операций, тогда как вычисления в порядке (М1x(М23))xМ4 занимает лишь 2200 операций.

рекурсия.

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

§. Базовые понятия языка Пролог: термы и предикаты.

Объекты данных в Прологе называются термами. Терм может быть константой, переменной или структурой (составным термом). Константа может быть либо атомом, либо числом.

Атомы бывают трех типов:

1.последовательность букв, цифр и знака "подчёркивание", обязательно начинающаяся со строчной буквы (маленькой буквы);

2.последовательность спецзнаков ":-", "?-", "=", ">=", "--" и др.;

3.заключённая в апострофы (одинарные кавычки) последовательность любых символов.

Примеры атомов: abcD, a_gear, '17-256', xyz100.

Переменная – имя, начинающееся с большой (прописной) буквы или знака подчеркивания. Когда значение переменной несущественно, то в качестве имени переменной используется знак подчеркивания. Такая переменная называется анонимной.

Структура представляется на языке ПРОЛОГ с помощью указания её функтора и компонент в следующем виде:

функтор(компонента-1, ...., компонента-N)

где в качестве функтора должен выступать атом, а компонентой может быть любой терм (в том числе и структура). Число компонент в структуре называется арностью структуры. Структуры используются для представления предикатов.

Базу фактов в программе на языке ПРОЛОГ составляют утверждения, описывающее факты предметной области в виде структур, функторами которых являются атомы - имена отношений (предикатные буквы), а компонентами - предметные константы. При описании фактов переменные не используются.

Правило задает новый предикат через предикаты, определенные ранее. Правило состоит из головы (предиката) и тела – последовательности предикатов. Голова отделяется от тела значком :- , который можно интерпретировать как слово «Если». Таким образом, заключение является головой правила, а тело правила состоит из набора посылок. Использование правил

является основным способом представления знаний в интеллектуальных системах. Смысл правила состоит в том, что цель, являющаяся головой, будет истинной, если интерпретатор ПРОЛОГа сможет показать, что все выражения (подцели) в теле правила являются истинными. В правилах буква X (или любая другая заглавная буква, или любое слово, начинающееся с заглавной буквы) обозначает переменную, которая может принимать разные значения.

Так, правило situ (X, europe):- situ (X, poland) означает, что любой польский город является одновременно европейским городом.

В ПРОЛОГе реализован механизм поиска с возвратом (backtracking), при котором система пытается отыскать все возможные решения задачи. Механизм вывода программы запоминает те точки процесса унификации, в которых не были использованы все альтернативные решения, а затем возвращается в эти точки и ищет решение по иному пути. Однако поиск с возвратом выполняется автоматически только в тех случаях, когда программа решает задачу в результате диалога с пользователем. Если же цель указана в разделе goal программы, то поиск оканчивается после нахождения первого решения задачи. В этом случае для вывода всех решений используется предикат fail, который называют откатом после неудачи. Он вызывает искусственное неуспешное завершение поиска, что позволяет получить все возможные решения задачи.

Соседние файлы в папке Лекции