Разделы презентаций


Структуры и алгоритмы обработки данных 2

Содержание

Сортировка 2Дан массив a: array [1..n] of OrdinalОтрезок (сегмент) массива a[p..q] упорядочен:Sort (a, p, q) ≡ (∀ i: p ≤ i < q: a[i] ≤ a[i+1])Предусловие: a[1..n] = a0[1..n]Постусловие: Sort (a, 1,

Слайды и текст этой презентации

Слайд 1Структуры и алгоритмы обработки данных, 2
Лекция 2 (+3)
Сортировка
(новый раздел)
Постановка

задачи
Простые алгоритмы сортировки
Сортировка выбором
Сортировка обменами
Сортировка вставками
Быстрая сортировка
Процедура разделения
Алгоритм QuickSort
Модификации
Анализ

алгоритма

Структуры и алгоритмы обработки данных, 2Лекция 2 (+3)Сортировка (новый раздел)Постановка задачиПростые алгоритмы сортировкиСортировка выборомСортировка обменамиСортировка вставками Быстрая

Слайд 2Сортировка 2
Дан массив a: array [1..n] of Ordinal
Отрезок (сегмент) массива a[p..q]

упорядочен:
Sort (a, p, q) ≡ (∀ i: p ≤ i

< q: a[i] ≤ a[i+1])

Предусловие: a[1..n] = a0[1..n]
Постусловие: Sort (a, 1, n) & & Перестановка(a[1..n], a0[1..n]),
где Перестановка(a[1..n], a0[1..n]) ≡
(∀ i: 1 ≤ i ≤ n: (N j: 1 ≤ j ≤ n: a[ i ] = a0[ j ] ) =
= (N j: 1 ≤ j ≤ n: a[ i ] = a [ j ] ) )



Сортировка						2Дан массив a: array [1..n] of OrdinalОтрезок (сегмент) массива a[p..q] упорядочен:Sort (a, p, q) ≡ (∀ i:

Слайд 3Сортировка 3
Простые алгоритмы сортировки
Сортировка выбором
Идея. Пример.
Список (удаление и

вставка)

Устойчивость сортировки – сохранение относительного порядка элементов с равными ключами

Сортировка 					 3Простые алгоритмы сортировкиСортировка выборомИдея. Пример. Список (удаление и вставка)Устойчивость сортировки – сохранение относительного порядка элементов

Слайд 4Сортировка 4
Сортировка выбором.
Пример.
Массив (обмен элементов).

Сортировка 					 4Сортировка выбором. Пример. Массив (обмен элементов).

Слайд 5Сортировка 5
Простые алгоритмы сортировки
Сортировка выбором
Инвариант внешнего цикла:
Все наименьшие (упорядочены)
Остальные
1
i
n
(a[1..i)

≤ a[i..n]) & Sort (a, 1, i −1) & (1

≤ i ≤ n)
Если во внутреннем цикле ищем первое вхождение минимума, то сортировка в списке устойчивая, а в массиве неустойчивая
Сортировка 					 5Простые алгоритмы сортировкиСортировка выборомИнвариант внешнего цикла:Все наименьшие (упорядочены)Остальные1in(a[1..i) ≤ a[i..n]) & Sort (a, 1, i

Слайд 6Сортировка 6
Сортировка выбором

for i:=1 to n−1 do
begin
{поиск минимума

из a[i..n]}
k := i; min := a[i];
for j:=i+1 to

n do
if a[j] < min then
begin k := j; min := a[k] end;
{обмен a[k] ↔ a[i] }
a[k] := a[i]; a[i] := min
end {for}
Сортировка 		 				 6Сортировка выборомfor i:=1 to n−1 dobegin		{поиск минимума из a[i..n]}		k := i; min := a[i];

Слайд 7Сортировка 7
Анализ сортировки выбором
Сi – число сравнений при выборе

минимального элемента на i-ом шаге
(в сегменте из (n –

i + 1) элементов)
Сi = n – i
Суммарно по всем шагам:
Сортировка 					 7Анализ сортировки выборомСi – число сравнений при выборе минимального элемента на i-ом шаге (в сегменте

Слайд 8Сортировка 8
Анализ сортировки выбором
Пусть Mi – число перестановок на

i-ом шаге,
включая обновления текущего минимума

сегменте из (n – i + 1) элементов).
В худшем случае
(обратно упорядоченный массив):
Mi =(n – i) + 3
Тогда суммарно по всем шагам (i∈1..n−1):
Mmax= (n2 – n)/2 + 3(n – 1)
Сортировка 					 8Анализ сортировки выборомПусть Mi – число перестановок на i-ом шаге, включая обновления текущего минимума

Слайд 9Сортировка 9
Анализ сортировки выбором
В среднем:
Вероятность того, что произойдет обновление


текущего минимума
на j-ом шаге внутреннего цикла = 1/j


(любой, в том числе последний из j элементов - минимальный).
Т.о. за i-й шаг среднее (М.О.) число перестановок
= 1/2 + 1/3 + 1/4 +… + 1/(n-i+1) = Hn-i+1 -1,
где частичная сумма гармонического ряда
Hk= 1 + 1/2 + 1/3 + … + 1/k,
Hk= ln k + γ + 1/(2k) +... , где γ - постоянная Эйлера.
Итак, за i-й шаг внешнего цикла среднее число присваиваний Hn-i+1 -1+3= Hn-i+1 +2 ≈ ln (n-i+1) + γ +2
Сортировка 					 9Анализ сортировки выборомВ среднем:Вероятность того, что произойдет обновление текущего минимума на j-ом шаге внутреннего цикла

Слайд 10Анализ сортировки выбором в среднем

В среднем за весь внешний цикл

суммарное число перестановок есть
Сортировка 10

Анализ сортировки выбором в среднемВ среднем за весь внешний цикл суммарное число перестановок естьСортировка 					 10

Слайд 11Сортировка 11
Простые алгоритмы сортировки
Сортировка обменами («пузырьковая»)

Сортировка 					 11Простые алгоритмы сортировкиСортировка обменами («пузырьковая»)

Слайд 12Сортировка 12
Простые алгоритмы сортировки
Сортировка обменами («пузырьковая»)
Продолжение

Сортировка 					 12Простые алгоритмы сортировкиСортировка обменами («пузырьковая»)Продолжение

Слайд 13Сортировка 13
Простые алгоритмы сортировки
Сортировка обменами («пузырьковая»)
Продолжение

Сортировка 					 13Простые алгоритмы сортировкиСортировка обменами («пузырьковая»)Продолжение

Слайд 14Сортировка 14
Простые алгоритмы сортировки
Сортировка обменами
Инвариант внешнего цикла
For i:=n downto

2 do
1
i
n
Все наибольшие (упорядочены)
Остальные
(a[1..i] ≤ a(i..n]) & Sort (a, i+1,

n) & (1 ≤ i ≤ n)
Сортировка 					 14Простые алгоритмы сортировкиСортировка обменамиИнвариант внешнего циклаFor i:=n downto 2 do1inВсе наибольшие (упорядочены)Остальные(a[1..i] ≤ a(i..n]) &

Слайд 15Сортировка обменами (пузырьковая)
for i:=n downto 2 do
begin
{просмотр a[1..i] с

обменами соседних элементов}
for j := 2 to i do
if a[j−1]

> a[j] then a[j−1] ↔ a[j] ;
{a[i] = max a[1..i] }
end


Сортировка 15

Сортировка обменами (пузырьковая)for i:=n downto 2 dobegin 	{просмотр a[1..i] с обменами соседних элементов}	for j := 2 to

Слайд 16Анализ сортировки обменами (пузырьковой)
Сортировка 16

Анализ сортировки обменами (пузырьковой)Сортировка 						 16

Слайд 17Сортировка 17
Простые алгоритмы сортировки
Сортировка вставками (включением)

Сортировка 					 17Простые алгоритмы сортировкиСортировка вставками (включением)

Слайд 18Сортировка 18
Простые алгоритмы сортировки
Сортировка ВСТАВКАМИ
Инвариант внешнего цикла:
1
i
n
Упорядочены:
Sort (a, 1,

i -1)
Остальные
После i – го шага: Sort (a, 1, i)

Сортировка 					 18Простые алгоритмы сортировкиСортировка ВСТАВКАМИИнвариант внешнего цикла:1inУпорядочены:Sort (a, 1, i -1)ОстальныеПосле i – го шага: Sort

Слайд 19Сортировка прямыми ВСТАВКАМИ
Сортировка 19









j −1
0
1
x
j
i
x
x




Sort (a, 1, i -1)

& (x < a0[j..i-1]) & (a[j+1..i]=a0[j..i-1])
j := i;
while x

a[j -1] do
begin a[j] := a[j -1]; j := j -1 end
{ (x ≥ a[j -1]) & (x < a [j+1..i]) & (a[j] – «свободен»)}
a[j] := x;

n

Сортировка прямыми ВСТАВКАМИСортировка 					 19j −101xjixxSort (a, 1, i -1) & (x < a0[j..i-1]) & (a[j+1..i]=a0[j..i-1])j :=

Слайд 20Сортировка 20
Простые алгоритмы сортировки
Сортировка ВСТАВКАМИ
АЛГОРИТМ Прямые вставки (StraightInsertion)

type

index=0..nMax;
index1=1..nMax;
index2=0..nMax+1;

mass=array [index] of Integer;
Сортировка 					 20Простые алгоритмы сортировкиСортировка ВСТАВКАМИ АЛГОРИТМ Прямые вставки (StraightInsertion)type index=0..nMax;    index1=1..nMax;

Слайд 21Сортировка 21
procedure StraightInsertion ( var a: mass; n:

index1; k: index1 );
{ сортировка массива методом вставки }

var i: index;
j: index1;
x: Integer;
begin
for i:=2 to n do
begin { включить a[i] на соотв. место в a[1..i] }
x := a[i]; a[0] := x; { a[0] - "барьер" }
j := i;
while x < a[j-1] do
begin { 1<=j<=i }
a[j] := a[j-1];
j := j-1
end { while };
a[j] := x
end { for }
end { StraightInsertion };
Сортировка 					 21 procedure StraightInsertion ( var a: mass; n: index1; k: index1 ); { сортировка массива

Слайд 22Сортировка 22
Сортировка ПРЯМЫМИ ВСТАВКАМИ
Анализ
Число сравнений ≈ число перемещений.
Число

сравнений на i –ом шаге Ci = i/2 в среднем.
Тогда

по всем шагам i∈2..n


Сортировка 					 22Сортировка ПРЯМЫМИ ВСТАВКАМИ АнализЧисло сравнений ≈ число перемещений.Число сравнений на i –ом шаге Ci =

Слайд 23Сортировка БИНАРНЫМИ ВСТАВКАМИ
for i:=2 to n do
begin
{ Найти место a[i]

среди a[1..i-1] }
x := a[i]; L:=1; R:=i;
while L≠R do
begin
m:=(L+R)

div 2;
if a[m] < x then L:=m+1 else R:=m
end; {(L∈1..i) & (a[L-1] < x ≤ a[L])}
{сдвинуть a[L..i-1] на позицию вправо на место a[L+1..i]}
for j:=i downto L+1 do a[j] := a[j-1];
{вставить x на место a[L]}
a[L]:=x
end {for}

Сортировка 23

Сортировка БИНАРНЫМИ ВСТАВКАМИfor i:=2 to n dobegin	{ Найти место a[i] среди a[1..i-1] }	x := a[i]; L:=1; R:=i;

Слайд 24Сортировка БИНАРНЫМИ ВСТАВКАМИ Анализ алгоритма
Число сравнений на i –ом шаге

Ci ≤ ⎡log2i⎤.
По всем шагам (i∈2..n)

Сортировка

24
Сортировка БИНАРНЫМИ ВСТАВКАМИ Анализ алгоритмаЧисло сравнений на i –ом шаге Ci ≤ ⎡log2i⎤.По всем шагам (i∈2..n)Сортировка

Слайд 25Сортировка 25
Быстрая сортировка (QuickSort)

Основа – процедура разделения

Partition


≤ x
> x
Инвариант цикла:



≤ x
> x
?
q
p
n


x
x
Условие завершения цикла

p + 1 = q

p

n

m m+1

m m+1

& (m < q ≤ p + 1 ≤ n + 1)

Сортировка 					 25Быстрая сортировка (QuickSort)  Основа – процедура разделения Partition≤ x> xИнвариант цикла: ≤ x> x?qpnxxУсловие

Слайд 26Сортировка 26
Быстрая сортировка (QuickSort)

procedure Partition1 ( var

a : mass;

m, n: index1; var p: index2);
var x, y: integer;
mn2, q: index2;
begin { m < n }
mn2:=(m+n) div 2;
x := a[mn2]; a[mn2]:= a[m]; a[m]:=x;
q := m+1; p := n;
{ inv: (m (ALL k: m<=kx)}
Сортировка 					 26Быстрая сортировка (QuickSort)  procedure Partition1 ( var a : mass;

Слайд 27 while q

if a[q]

else
if a[p] > x then p := p-1
else { a[p]<= x < a[q] }
begin
y := a[p];
a[p] := a[q];
a[q] := y;
q := q+1;
p := p-1
end { if };
end { while };
a[m] := a[p];
a[p] := x;
end { Partition1 };

Сортировка 27

while q

Слайд 28Быстрая сортировка:
разделение и слияние




















Быстрая сортировка: разделение и слияние

Слайд 29Сортировка 29
procedure Sortp1 (var a: mass; m, n: index1;

k: index1 );
var p, q: index2;

begin
Partition1 ( a, m, n, p );
if p-m>k then Sortp1 ( a, m, p-1, k );
q:=p+1;
if n-q+1>k then Sortp1 ( a, q, n, k )
{ подмассив длиной <= k не сортируем !
1<=k<=50 , при k=1 - полная сортировка }
end { Sortp1 };



Сортировка 					 29procedure Sortp1 (var a: mass; m, n: index1; k: index1 );   var p,

Слайд 30Сортировка 30
begin { QuickSort1 }
Sortp1( a, 1,

n, k );
if k>1 then { окончательная сортировка

простым методом }
StraightInsertion ( a, n ,1)
end { QuickSort1 };








<

<

<

<

<

<

Сортировка 					 30begin { QuickSort1 }  Sortp1( a, 1, n, k );  if k>1 then

Слайд 31Быстрая сортировка
Неполная сортировка. Выбор k
Сортировка 31


k
kмин
t

Быстрая сортировкаНеполная сортировка. Выбор kСортировка 					 31kkминt

Слайд 32Первый вызов Partition 32
1 2 3

4 5 6 7

8 9 10 11 12 13 14
у п О р я д о ч И в а н и е
о п О р я д у ч И в а н и е
о е О р я д у ч И в а н и п
о е О р я д у ч И в а н и п
о е О и я д у ч И в а н р п
о е О и н д у ч И в а я р п
о е О и н д у ч И в а я р п
о е О и н д а ч И в у я р п
о е О и н д а в И ч у я р п
И е О и н д а в о ч у я р п
Первый вызов Partition		321   2   3   4  5   6

Слайд 331 2 3 4

5 6 7 8

9 10 11 12 13 14
И е О и н д а в о ч у я р п

о

И е О и н д а в

ч у я р п

п у ч р

я

д е в И а

и

н О

а

в

д И е

н

О

е д

И

д

е

р п

Сортировка 33

у

ч

р

п









1   2   3   4   5   6

Слайд 34Сортировка 34
Анализ. Лучший случай
Быстрая сортировка (QuickSort)
n/2
n
n/2
n/4
n/4
n/4
n/4
n/8
n/8
n/8
n/8
n/8
n/8
n/8
n/8
n log2n
1
1
1
1
1
1

Сортировка 					 34Анализ. Лучший случайБыстрая сортировка (QuickSort)n/2nn/2n/4n/4n/4n/4n/8n/8n/8n/8n/8n/8n/8n/8n log2n111111

Слайд 35Сортировка 35
Анализ. Худший случай
Быстрая сортировка (QuickSort)
n
n-1
n-2
1
1
1
n-3
n-4
1
1
1

Сортировка 					 35Анализ. Худший случайБыстрая сортировка (QuickSort)nn-1n-2111n-3n-4111

Слайд 36Сортировка 36
Быстрая сортировка (QuickSort)
Анализ. Промежуточный случай

Сортировка 					 36Быстрая сортировка (QuickSort)Анализ. Промежуточный случай

Слайд 37Анализ. В среднем
Сортировка 37
Быстрая сортировка (QuickSort)



i
1
n

Анализ. В среднемСортировка 					 37Быстрая сортировка (QuickSort)i1n

Слайд 38Анализ. В среднем (продолжение)
Сортировка 38
Быстрая сортировка (QuickSort)

Анализ. В среднем (продолжение)Сортировка 					 38Быстрая сортировка (QuickSort)

Слайд 39Анализ. В среднем (продолжение)
Сортировка 39
Быстрая сортировка (QuickSort)

Анализ. В среднем (продолжение)Сортировка 					 39Быстрая сортировка (QuickSort)

Слайд 40Для указания множества функций,
которые не более чем в постоянное

число раз превосходят f (n) при достаточно большом n,
используется обозначение

О(f(n)).
Запись g (n) ∈ О(f(n)) означает, что
cуществуют:
вещественная константа C > 0 и
натуральная константа n0 ,
для которых g (n) ≤ C f (n) при всех n ≥ n0

Приложение Асимптотические оценки Обозначения О(f(n)), Ω(f(n)), Θ(f(n))

Для указания множества функций, которые не более чем в постоянное число раз превосходят f (n) при достаточно большом

Слайд 41Асимптотические оценки Обозначение О(f(n))



g(n)
C f(n)
n0
n

Асимптотические оценки Обозначение О(f(n))g(n)C f(n)n0n

Слайд 42Асимптотические оценки Обозначения О(f(n)), Ω(f(n)), Θ(f(n))
Для указания множества функций,
которые не

менее чем в постоянное число раз превосходят f (n) при достаточно

большом n, используется обозначение Ω(f(n)).
Запись g (n) ∈ Ω(f(n)) означает, что
существуют :
вещественная константа C > 0 и
натуральная константа n0 ,
для которых g (n) ≥ C f (n) при всех n ≥ n0.
Асимптотические оценки Обозначения О(f(n)), Ω(f(n)), Θ(f(n))Для указания множества функций, которые не менее чем в постоянное число раз

Слайд 43Асимптотические оценки Обозначение Ω(f(n))



g(n)
C f(n)
n0
n

Асимптотические оценки Обозначение Ω(f(n))g(n)C f(n)n0n

Слайд 44Асимптотические оценки Обозначения О(f(n)), Ω(f(n)), Θ(f(n))
Для указания множества функций того

же порядка, что и f (n) при достаточно большом n, используется

обозначение Θ(f(n))
Запись g (n) ∈  Θ(f(n)) означает, что
существуют :
вещественные константы C1 > 0 и C2 > 0 и
натуральная константа n0 , для которых
C1 f (n) ≤ g (n) ≤ C2 f (n) при всех n ≥ n0

Асимптотические оценки  Обозначения О(f(n)), Ω(f(n)), Θ(f(n))Для указания множества функций того же порядка, что и f (n) при

Слайд 45Асимптотические оценки Обозначение Θ(f(n))



g(n)
C1 f(n)
n0
n

C2 f(n)

Асимптотические оценки Обозначение Θ(f(n))g(n)C1 f(n)n0nC2 f(n)

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика