Сортировки

{a1,…,an}, ai X

 

1)∀ a,b X верно ровно одно из трех соотношение:

a=b

a<b

a>b

2)Для них верна транзитивность:

a,b,c X,

a<b,b<c  => a<c

a>b,b>c  => a>c

a=b,b=c  => a=c

 

Сортировка = такая перестановка s: {1,…n} → {1,…n}, что 1<i≤ n: as(i-1)<as(i) или as(i-1)=as(i)

 

Существует ли сортировка?

Контрпример: a,b X: a>b

 

3)Симметричность:

a,b X: a<bób>a

 

Теорема. Пусть выполняются соотношения 1-3, то сортировка и ! с точностью до перестановки равных элементов.

. По индукции.

Утв.: равные элементы в отсортированной последовательности идут подряд:

невозможна ситуация:

a<b, b<c, a=c

a=b, b<c, a=c

a<b, b=c, a=c

легко д-ть.

То заменяем все подпосл-ти равных эл-тов одним эл-том.

Введем ф-цию t(x), x X: t(x) = к-во эл-тов посл-ти, меньших x

t(x) однозначно определяет положение x в отсорт.посл-ти

Ч.Т.Д.

Для построения сортировки достаточно определить одно соотношение <

Сортировки пузырьком.

Теорема.Φ (n)=Θ(n2) – верхняя оценка времени работы алгоритма пузырька

ϕ (n)= Θ(n2) – нижняя оценка времени работы алгоритма пузырька.

Модель: допустимые операции = транспозиция; время на транспозицию эл-тов с индексами i и j = Θ(|i-j|)

Теорема. В рамках модели ϕ (n)= Θ(n2) – нижняя оценка времени решения задачи.

Д-во: рассмотрим {n,n-1,…,1}…

 

Сортировки, основанные на сравнениях.

Дерево решений = бинарное дерево(из каждой вершины исходит либо 2 либо 0 вершин; если 0, то назовем вершину концевой); на корень подается последовательность {ai}

вершина →fвершины{ai} * 0

ребро → транспозицияребра  {ai}

Алгоритм основан на сравнениях = он сводится к дереву решений.

Пусть t(fвершины{ai})=Θ(1), t(транспозицияребра  {ai})=0

 

Высота дерева h(T)=макслин ветвей.

Длина ветви = к-во вершин в ветви

Удалим из дерева все недостижимые вершины.

Утв. для нашей модели нижняя оценка времени работы алгоритма = Θ(h(T))

 

Сколько концевых вершин в нашем дереве?

Рассмотрим все перестановки s(1,…,n)

Каждая ветвь дерева задает перестановку s-1(1,…,n), обратную s(1,…,n)

Количество концевых вершин N = n!

N≤ 2h(T)-1

ln2(N)≤ h(T)-1

h(T)≥ ln2(N)+1

h(T)≥ ln2(n!)+1

Формула Стирлинга: n!=√ (2π n) nne-n(1+o(1))

h(T)≥ ln2(√ (2π n) nne-n(1+o(1)))+1=

ln2(√ (2π )) +0.5ln(n) + n ln(n) – n ln( e) + o(1) +1 = Θ(n ln n)

 

Теорема. Для алгоритмов, основанных на сравнениях, существует нижняя оценка времени работы алгоритма =  Θ(n ln n)

 

Дерево решений алгебраическое степени n если  deg(fвершины{ai})≤ n

Алгоритм основан на простых сравнениях если в каждой вершине происходит только сравнение двух элементов последовательности

 

Теорема. Для алгоритма сортировки слиянием с рекурсией существует верхняя оценка времени работы алгоритма Φ(n)=Θ (n ln n); алгоритм требует Θ(n) дополнительной памяти в куче и Θ(ln n) дополнительной памяти в стеке.

 

Теорема. Для алгоритмов основанных на сравнениях алгоритм Merge для двух массивов длины n строго оптимален по количеству сравнений. Т.е. если время сравнения = 1 , время остальных операций =0, то ϕ(n)=2n-1 – строгая нижняя оценка времени работы алгоритма Merge.

Д-во: рассмотрим отсортированные массивы {a1,…,an} и {b1,…,bn}: ai<bi, ai+1>bi, т.е. в отсортассиве эл-ты лежат так: a1, b1, a2, b2, a3, b3,…

К-во соотношений = 2n-1. Утверждается, что все эти соотношения надо проверить.

Например: не проверим a2<b2 , то две последовательности удовлетворяют всем остальным соотношениям:

a1, b1, a2, b2, a3, b3,…

a1, b1, b2, a2, a3, b3,…

Т.е. хотя бы 2n-1 сравнение надо обязательно сделать для сортировки.

Ч.Т.Д.

OpenMP