Сортировка и поиск - рецептурный справочник


Сравнение методов


В данном разделе мы сравним описанные алгоритмы сортировки: вставками, Шелла и быструю сортировку. Есть несколько факторов, влияющих на выбор алгоритма в каждой конкретной ситуации:

·         Устойчивость. Напомним, что устойчивая сортировка не меняет взаимного расположения элементов с равными ключами. Сортировка вставками – единственный из рассмотренных алгоритмов, обладающих этим свойством.

·         Память. Сортировке на месте не требуется дополнительная память. Сортировка вставками и Шелла удовлетворяют этому условию. Быстрой сортировке требуется стек для организации рекурсии. Однако, требуемое этому алгоритму место можно сильно уменьшить, повозившись с алгоритмом.

·         Время. Время, нужное для сортировки наших данных, легко становится астрономическим (см. таблицу 1.1). Таблица 2.2 позволяет сравнить временные затраты каждого из алгоритмов по количеству исполняемых операторов..

Method

statements

average time

worst-case time



insertion sort

9

O(n2)

O(n2)

shell sort

17

O(n1.25)

O(n1.5)

quicksort

21

O(n lg n)

O(n2)

Таблица 2.2:Сравнение методов сортировки

·         Время, затраченное каждым из алгоритмов на сортировку случайного набора данных, представлено в таблице 2.3.

count

insertion

shell

quicksort

16

39 ms

45 ms

51 ms

256

4,969 ms

1,230 ms

911 ms

4,096

1.315 sec

.033 sec

.020 sec

65,536

416.437 sec

1.254 sec

.461 sec

Таблица 2.3: Время сортировки


Вероятность иметь ссылку уровня 2 равна j. В общем, количество ссылок на узел равно




·         Время. Алгоритм должен быть эффективным. Это особенно важно, когда ожидаются большие объемы данных. В таблице 3.2 сравниваются времена поиска для каждого алгоритма. Обратите внимание на то, что наихудшие случаи для хеш-таблиц и разделенных списков чрезвычайно маловероятны. Экспериментальные данные описаны ниже.

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

метод

операторы

среднее время

время в худшем случае

хеш-таблицы

26

O(1)

O(n)

несбалансированные деревья

41

O(lg n)

O(n)

красно-черные деревья

120

O(lg n)

O(lg n)

разделенные списки

55

O(lg n)

O(n)

      Таблица 3.2: Сравнение алгоритмов ведения словарей

      В таблице 3.3 приведены времена, требуемые для вставки, поиска и удаления 65536 (216) случайных элементов. В этих экспериментах размер хеш-таблицы равнялся10009, для разделенных списков допускалось до 16 уровней ссылок. Конечно, в реальных ситуациях времена могут отличаться от приведенных здесь, однако, таблица дает достаточно информации для выбора подходящего алгоритма.

метод

вставка

поиск

удаление

хеш-таблицы

18

8

10

несбалансированные деревья

37

17

26

красно-черные деревья

40

16

37

разделенные списки

48

31

35

Таблица 3.3: Среднее время (мсек) для 65536 случайных элементов

      В таблице 3.4 приведены средние времена поиска для двух случаев: случайных данных, и упорядоченных, значения которых поступали в возрастающем порядке. Упорядоченные данные являются наихудшим случаем для несбалансированных деревьев, поскольку дерево вырождается в обычный односвязный список.


Приведены времена для “одиночного” поиска. Если бы нам понадобилось найти все 65536 элементов, то красно-черныму дереву понадобилось бы 6 секунд, а несбалансированному – около 1 часа.

Элементов

хеш-таблицы

несбалансированные деревья

красно-черные деревья

разделенные списки

16

4

3

2

5

случайные

256

3

4

4

9

данные

4,096

3

7

6

12

65,536

8

17

16

31

16

3

4

2

4

упорядоченные

256

3

47

4

7

данные

4,096

3

1,033

6

11

65,536

7

55,019

9

15

Таблица 3.4: Среднее время поиска (мсек)


Содержание раздела