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




Двоично - троичные справочники - часть 7


                в2( Д1, М2, НД2а), Мб, в2( НД2б, М3, Д3) ) :-
                больше( X, М2), больше( М3, X),
                встав( Д2, X, НД2а, Мб, НД2б).

        встав( в3( Д1, М2, Д2, М3, Д3), X,
                в3( Д1, М2, Д2, М3, НД3) ) :-
                больше( X, М3),
                встав( Д3, X, НД3).

        встав( в3( Д1, М2, Д2, М3, Д3), X,
                в2( Д1, М2, Д2), М3, в2( НД3а, Мб, НД3б) ) :-
                больше( X, М3),
                встав( Д3, X, НД3а, Мб, НД3б).

line();

Рис. 10. 6.  Вставление элемента в 2-3 справочник. В этой
программе предусмотрено, что попытка повторного
вставления элемента терпит неудачу.

Программа для вставления нового элемента в 2-3 справочник показана полностью на рис. 10.6. На рис. 10.7 показана программа вывода на печать 2-3 деревьев.

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

        встав2( Дер, X, Деревья)

где Деревья - список, состоящий либо из одного, либо из трех аргументов:

        Деревья = [ НовДер], если встав( Дер, X, НовДер)
        Деревья = [ НДа, Мб, НДб],

        если встав( Дер, X, НДа, Мб, НДб)

Теперь отношение доб23 можно переопределить так:

        доб23( Д, X, Д1) :-
                встав( Д, X, Деревья),
                соединить( Деревья, Д1).

Отношение соединить формирует одно дерево Д1 из деревьев, находящихся в списке Деревья.




Содержание  Назад  Вперед