Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структуры данных.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.14 Mб
Скачать

2.10Сравнение сортировок

Ранее были приведены точные аналитические формулы для определения числа сравнений и перестановок в случае простых алгоритмов сортировок. Для усовершенствованных сортировок такие формулы отсутствуют. Известны приблизительные верхние оценки затрат на сортировку такими методами.

Таблица 1.2

Тип сортировки

Количество действий

ShellSort

C*n1.2

HeapSort

C*n*log2 n

QuickSort

C*n*log2 n

где С – некоторые коэффициенты, в общем случае, превышающие 1.

Для более наглядного сравнения сортировок ниже приводятся относительные затраты времени, полученные на некотором компьютере, для разных методов сортировки, которые обрабатывают одни и те же массивы:

  • упорядоченный по возрастанию;

  • заполненный произвольным методом;

  • упорядоченный по убыванию.

Поля таблицы можно рассматривать как значения, взятые в некоторых условных единицах (на самом деле в миллисекундах для конкретного компьютера), которые отражают скорость работы разных методов сортировки.

Таблица 1.3

М А С С И В

Наименование

упорядоченный по возрастанию

случайный порядок

упорядоченный по убыванию

при n=256

StraightInsertion

0.02

0.82

1.64

ShellSort

0.10

0.24

0.28

StraightSelection

0.94

0.96

1.18

HeapSort

0.20

0.20

0.20

BubbleSort

1.26

2.04

2.80

QuickSort

0.08

0.12

0.08

при n=2048

StraightInsertion

0.22

50.74

103.80

ShellSort

0.80

7.08

12.34

StraightSelection

58.18

58.34

73.46

HeapSort

2.32

2.22

2.12

BubbleSort

80.18

128.84

178.66

QuickSort

0.72

1.22

0.76

Можно сделать несколько выводов. Но остановимся на двух самых выразительных.

  • Пузырьковая сортировка - худшая из всех.

  • Быстрая сортировка в 2-3 раза лучше, чем пирамидальная.

3Поиск подстроки в строке

Задача поиска подстроки в строке характерна для всех текстовых процессоров и состоит в нахождении первого по порядку вхождения некоторой подстроки в обрабатываемый текст. Затем возможен поиск следующего вхождения и т.д.

Задача поиска подстроки в строке крайне распространена в современных средствах информатики и, поэтому, важно найти эффективные алгоритмы ее решения.

Постановка задачи имеет следующий вид. Пусть задана строка S из n элементов и подстрока P из m элементов, причем

0 <= m <= (n-1)

Необходимо найти позицию i в строке S, начиная с которой выполняется посимвольное совпадение элементов строки S и элементов образа P.

Описание соответствующих строк (массивов типа char) и переменных имеет вид:

var S: string;

P: string;

N: integer; {размер исходной строки}

M: integer; {размер искомой подстроки}

begin

N := Length (S);

M := Length (P);

end;

Тогда строку S можно рассматривать как некоторый текст, а строку P - как некоторое слово или подстроку этого текста. В этом случае задача поиска, обозначим ее Find, сводится к поиску первого вхождения заданного слова (подстроки) в заданный текст.