Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
семинар 4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
168.96 Кб
Скачать

4. 5. 4. Заключительные замечания

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

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

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

Возникает естественный вопрос: " Какая из трех программ наиболее эффективна?" В этом отношение программа 2 значительно хуже двух других, а эти последние - одинаковы. Причина в том, что основанная на перестановках программа 2 строит все перестановки, тогда как две другие программы способны отбросить плохую перестановку не дожидаясь, пока она будет полностью построена. Программа 3 наиболее эффективна. Она избегает некоторых арифметических вычислений, результаты которых уже сразу заложены в избыточное представление доски, используемое этой программой.

Упражнения

4. 1.    Напишите вопросы для поиска в базе данных о семьях.

(а)        семей без детей;

(b)        всех работающих детей;

(с)        семей, где жена работает, а муж нет,

(d)        всех детей, разница в возрасте родителей которых составляет не менее 15 лет.

4. 2.    Определите отношение

        близнецы( Ребенок1, Ребенок2)

для поиска всех близнецов в базе данных о семьях.

4. 3.    Завершите определение отношения nребенок, определив отношение

        n_элемент( N, Список, X)

которое выполняется, если Х является N-м элементом списка Список.

4. 4.    Почему не могло возникнуть зацикливание модели исходного автомата на рис. 4.3, когда в его графе переходов не было "спонтанного цикла"?

4. 5.    Зацикливание при вычислении допускается можно предотвратить, например, таким способом: подсчитывать число переходов, сделанных к настоящему моменту. При этом модель должна будет искать пути только некоторой ограниченной длины. Модифицируйте так отношение допускается. Указание: добавьте третий аргумент - максимально допустимое число переходов:

        допускается( Состояние, Цепочка, Макс_переходов)

4. 6.    При поиске решения программа, приведенная на рис. 4.7, проверяет различные значения Y-координат ферзей. В каком месте программы задается порядок перебора альтернативных вариантов? Как можно без труда модифицировать программу, чтобы этот порядок изменился? Поэкспериментируйте с разными порядками, имея в виду выяснить, как порядок перебора альтернатив влияет на эффективность программы.

4. 7.    Пусть поля доски представлены парами своих координат в виде X/Y, где как X, так и Y принимают значения от 1 до 8.

(а)        Определите отношение ходконя( Поле1, Поле2), соответствующее ходу коня на шахматной доске. Считайте, что Поле1 имеет всегда конкретизированные координаты, в то время, как координаты поля Поле2 могут и не быть конкретизированы. Например:

        ?- ходконя( 1/1, S).

        S = 3/2;         S = 2/3;

        no             (нет)

(b)        Определите отношение путьконя( Путь), где Путь - список полей, представляющих соответствующую правилам игры последовательность ходов коня по пустой доске.

(с)        Используя отношение путьконя, напишите вопрос для нахождения любого пути, состоящего из 4-х ходов, и начинающегося с поля 2/1, а заканчивающегося на противоположном крае доски (Y= 8). Этот путь должен еще проходить после второго хода через поле 5/4.

ОТВЕТЫ

4. 1

(a)    ?-  семья(членсемьи( _, Фамилия, _, _ ), _, [ ]).

(b)    ?-  ребенок( членсемьи( Имя, Фамилия, _, работает( _, _ ) )).

(c)    семья(членсемьи( _, Фамилия, _, неработает), членсемьи( _, _, _, работает( _, _ ) ),_ ).

(d)    ?-  семья( Муж, Жена, Дети), датарождения( Муж, дата( _, _, Год1) ),             датарождения( Жена, дата( _, _, Год2) ), ( Год1 - Год2 >= 15; Год2 - Год1 >= 15 ),             принадлежит( Ребенок, Дети).

4. 2

близнецы( Ребенок1, Ребенок2) :-семья( _, _, Дети), удалить( Ребенок1, Дети, ДругиеДети),                             % Выделить первого ребенка     принадлежит( Ребенок2, ДругиеДети), принадлежит( Ребенок1, Дата),     принадлежит( Ребенок2, Дата).

4. 3

n_элемент( 1, [X | L], X).                            % X - первый элемент списка [X | L]

n_элемент( N, [Y | L], X) :- N1 is N - 1, n_элемент( N1, L, X).     % X - n-й элемент [Y | L]

4. 4 Входная цепочка укорачивается на каждом неспонтанном цикле, а укорачиваться бесконечно она не может.

4. 5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]