Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

%

% Деревья и графы представлены списками

% своих ребер, например:

% Граф = [а-b, b-с, b-d, c-d]

остдерево( Граф, Дер) :- % Дер - остовное дерево Граф'а

 принадлежит( Ребро, Граф),

 расширить( [Ребро], Дер, Граф).

расширить( Дер1, Дер, Граф) :-

 добребро( Дер1, Дер2, Граф),

 расширить(
Дер2, Дер, Граф).

расширить( Дер, Дер, Граф) :-

 not добребро( Дер, _, Граф).

% Добавление любого ребра приводит к циклу

добребро( Дер, [А-В | Дер], Граф) :-

 смеж( А, В, Граф), % А и В - смежные вершины

 вершина( А, Дер). % А содержится в Дер

 not вершина( В, Дер). % А-В не порождает цикла

смеж( А, В, Граф) :-

 принадлежит ( А-В, Граф);

 принадлежит ( В-А, Граф).

вершина( А, Граф) :- % А содержится в графе, если

 смеж( А, _, Граф). % А смежна какой-нибудь вершине

Pис. 9.22. Построение остовного дерева: алгоритмический подход. Предполагается, что

Граф
 — связный граф.

Интересно, что можно написать программу построения остовного дерева совершенно другим, полностью декларативным способом, просто формулируя на Прологе некоторые математические определения. Допустим, что как графы, так и деревья задаются списками своих ребер, как в программе рис. 9.22. Нам понадобятся следующие определения:

(1) T является остовным деревом графа G, если

 • T — это подмножество графа G и

 • T — дерево и

 • T "накрывает" G, т.е. каждая вершина из G содержится также в T.

(2) Множество ребер T есть дерево, если

 • T — связный граф и

 • T не содержит циклов.

Эти определения можно сформулировать на Прологе (с использованием нашей программы

путь
из предыдущего раздела) так, как показано на рис. 9.23. Следует, однако, заметить, что эта программа в таком ее виде не представляет практического интереса из-за своей неэффективности.

% Построение остовного дерева

% Графы и деревья представлены списками ребер.

остдерево( Граф, Дер) :-

 подмнож( Граф, Дер),

 дерево( Дер),

 накрывает( Дер, Граф).

дерево( Дер) :-

 связи( Дер),

 not имеетцикл( Дер).

связи( Дер) :-

 not ( вершина( А, Дер), вершина( В, Дер),

 not путь( А, А, Дер, _ ) ).

имеетцикл(
Дер) :-

 смеж( А, В, Дер),

 путь( А, В, Дер, [А, X, Y | _ ). % Длина пути > 1

накрывает( Дер, Граф) :-

 not ( вершина( А, Граф), not вершина( А, Дер) ).

подмнож( [], []).

подмнож( [ X | L], S) :-

 подмнож( L, L1),

 ( S = L1; S = [ X | L1] ).

Рис. 9.23. Построение остовного дерева: "декларативный подход".

Отношения

вершина
и
смеж
см. на рис. 9. 22.

Упражнение

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

Резюме

В данной главе мы изучали реализацию на Прологе некоторых часто используемых структур данных и соответствующих операций над ними. В том числе

• Списки:

варианты представления списков

сортировка списков:

сортировка методом "пузырька"

сортировка со вставками

быстрая сортировка

эффективность этих процедур

• Представление множеств двоичными деревьями и двоичными справочниками:

поиск элемента в дереве

добавление элемента

удаление элемента

добавление в качестве листа или корня

сбалансированность деревьев и его связь с эффективностью этих операций

отображение деревьев

• Графы:

представление графов

поиск пути в графе

построение остовного дерева

Литература

В этой главе мы занимались такими важными темами, как сортировка и работа со структурами данных для представления множеств. Общее описание структур данных, а также алгоритмов, запрограммированных в данной главе, можно найти, например, в Aho, Hopcroft and Ullman (1974, 1983) или Baase (1978). В литературе рассматривается также поведение этих алгоритмов, особенно их временная сложность. Хороший и краткий обзор соответствующих алгоритмов и результатов их математического анализа можно найти в Gonnet (1984).

Прологовская программа для внесения нового элемента на произвольный уровень дерева (раздел 9.3) была впервые показана автору М. Ван Эмденом (при личном общении).

Aho А. V., Hopcroft J. E. and Ullman J. D. (1974). The Design and Analysis of Computer Algorithms. Addison-Wesley. [Имеется перевод: Ахо А., Хопкрофт Дж. Построение и анализ вычислительных алгоритмов. Пер. с англ. — М.: Мир, 1979.]

Aho А. V., Hopcroft J. E. and Ullman J. D. (1983). Data Structures and Algorithms. Addison-Wesley.

Поделиться:
Популярные книги

Измена. Я отомщу тебе, предатель

Вин Аманда
1. Измены
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Измена. Я отомщу тебе, предатель

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Мимик нового Мира 6

Северный Лис
5. Мимик!
Фантастика:
юмористическая фантастика
попаданцы
рпг
5.00
рейтинг книги
Мимик нового Мира 6

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Темный Патриарх Светлого Рода 4

Лисицин Евгений
4. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 4

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Архил…? Книга 3

Кожевников Павел
3. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
7.00
рейтинг книги
Архил…? Книга 3

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Лорд Системы 11

Токсик Саша
11. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 11

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2