Хвост], УпорСпис) :-

                разбиение( X, Хвост, Меньш, Больш),

                быстрсорт( Меньш, УпорМеньш),

                быстрсорт( Больш, УпорБольш),

                конк( УпорМеньш, [X | УпорБольш], УпорСпис).

        разбиение( X, [ ], [ ], [ ] ).

        разбиение( X, [Y | Хвост], [Y | Меньш], Больш ) :-

                больше( X, Y),  !,

                разбиение( X, Хвост, Меньш, Больш).

        разбиение( X, [Y | Хвост], Меньш, [Y | Больш] ) :-

                разбиение( X, Хвост, Меньш, Больш).

        конк( [ ], L, L).

        конк( [X | L1], L2, [X | L3] ) :-

                конк( L1, L2, L3 ).

Рис. 9. 2.  Быстрая сортировка.

становится тривиальной операцией после применения разностного представления списков, введенного в гл. 8. Для того, чтобы использовать эту идею в нашей процедуре сортировки, нужно представить встречающиеся в ней списки в форме пар вида A-Z следующим образом:

        УпорМеньш имеет вид A1-Z1

        УпорБольш имеет вид A2-Z2

Тогда конкатенации списков

        УпорМеньш и [ Х | УпорБольш]

будет соответствовать конкатенация пар

        A1-Z1    и     [ Х | A2]-Z2

В результате мы получим

        А1-Z2,     причем    Z1 = [ Х | А2]

Пустой список представляется парой Z-Z. Систематически вводя изменения в программу рис. 9.2, мы получим более эффективный способ реализации процедуры быстрсорт, показанный на рис. 9.3 под именем

        быстрсорт( Спис, УпорСпис) :-

                быстрсорт2( Спис, УпорСпис-[ ] ).

        быстрсорт2( [ ], Z-Z).

        быстрсорт2( [X | Хвост], A1-Z2) :-

                разбиение( X, Хвост, Меньш, Больш),

                быстрсорт2( Меньш, А1-[Х | A2] ),

                быстрсорт2( Больш, A2-Z2).

Рис. 9. 3.  Более эффективная реализация процедуры быстрсорт

с использованием разностного представления списков. Отношение

разбиение( Х, Спис, Меньш, Больш) определено, как на рис. 9.2.

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

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату