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

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

Жанры

Неизвестно

Шрифт:

разбиение( X, L, Больш, Меньш).

Временная сложность нашего алгоритма зависит от того, насколько нам повезет при разбиении сортируемого списка. Если списки всегда разбиваются на два списка примерно равной длины, то процедура сортировки имеет временную сложность порядка nlogn, где n– длина исходного списка. Если же, наоборот, разбиение всегда приводит к тому, что один из списков оказывается значительно больше другого, то сложность

будет порядка n2. Анализ показывает, что, к счастью, средняя производительность быстрой сортировки ближе к лучшему случаю, чем к худшему.

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

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

быстрсорт( [X | Хвост], УпорСпис) :-

разбиение( 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, использующая разностное представление. Эти две процедуры связаны между собой, соотношением

быстрсорт( L, S) :-

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

Упражнения

9. 5. Напишите процедуру слияния двух упорядоченных списков в один третий список. Например:

?- слить( [2, 5, 6, 6, 8], [1, 3, 5, 9], L).

L = [1, 2, 3, 5, 5, 6, 6, 8, 9]

9. 6. Программы сортировки, показанные на рис. 9.2 и 9.3, отличаются друг от друга способом представления списков. Первая из них использует обычное представление, в то время как вторая - разностное представление. Преобразование из одного представления в другое очевидно и может быть автоматизировано. Введите в программу рис. 9.2 необходимые изменения, чтобы преобразовать ее в программу рис. 9.3.

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

9. 8. Существует еще одна хорошая идея относительно механизма сортировки списков, позволяющая избавиться от недостатков программы быстрсорт, а именно: разбить список на два меньших списка, отсортировать их, а затем слить вместе. Итак, для того, чтобы отсортировать список L, необходимо

разбить L на два списка L1 и L2 примерно одинаковой длины;

произвести сортировку списков L1 и L2,получив списки S1 и S2;

слить списки S1 и S2, завершив на этом сортировку списка L.

Реализуйте этот принцип сортировки и сравните его эффективность с эффективностью программы быстрсорт.

Посмотреть ответ

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

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

9. 2. Представление множеств двоичными деревьями

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

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6

Ведьмы из Броккенбурга. Барби 2

Соловьев Константин Анатольевич
3. Ведьмы из Броккенбурга
Фантастика:
фэнтези
5.00
рейтинг книги
Ведьмы из Броккенбурга. Барби 2

В лапах зверя

Зайцева Мария
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
В лапах зверя

Ореховый посох

Скотт Роберт
1. Eldarn Trilogy
Фантастика:
фэнтези
6.25
рейтинг книги
Ореховый посох

Кодекс Охотника. Книга XXXVII

Винокуров Юрий
37. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVII

Большая энциклопедия консервирования

Семикова Надежда Александровна
Дом и Семья:
кулинария
6.00
рейтинг книги
Большая энциклопедия консервирования

Ружья, микробы и сталь. Судьбы человеческих обществ

Даймонд Джаред
Научно-образовательная:
история
культурология
7.00
рейтинг книги
Ружья, микробы и сталь. Судьбы человеческих обществ

Поварское искусство

Зеленко П. М.
Дом и Семья:
кулинария
6.25
рейтинг книги
Поварское искусство

Свет в ночи

Эндрюс Вирджиния
2. Лэндри
Любовные романы:
современные любовные романы
7.50
рейтинг книги
Свет в ночи

Я еще царь. Книга XXX

Дрейк Сириус
30. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.75
рейтинг книги
Я еще царь. Книга XXX

История россии 1917–2009

Вдовин Александр Иванович
Научно-образовательная:
история
6.25
рейтинг книги
История россии 1917–2009

Суворов и Кутузов (сборник)

Раковский Леонтий Иосифович
Лица. Эпизоды. Факты
Проза:
военная проза
историческая проза
5.00
рейтинг книги
Суворов и Кутузов (сборник)

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

"Фантастика 2024-66". Компиляция. Книги 1-24

Ландсберг Галина
Фантастика 2024. Компиляция
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-66. Компиляция. Книги 1-24