SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Алгоритмы и
структуры данных
Сортировки
Алгоритмы сортировки
 Сортировка – процесс упорядочивания элементов массива
 Многие программы используют алгоритмы сортировки.
Часто время их работы определяется временем сортировки
 Данные часто упорядочены каким либо
 Многие задачи существенно быстрее решаются на
предварительно упорядоченных данных
2
3
1. Простые сортировки
2. Предел скорости
3. Ускорение
4. Хорошие сортировки
5. Особые свойства
6. Поразрядная сортировка
7. Сравнение
Сортировка 1 и 2х элементов
void sort_1(int *a) {
return;
}
void sort_2(int *a) {
if (a[1] < a[0]) {
swap(a[1], a[0]);
}
}
4
void sort_3(int *a) {
if (a[1] < a[0]) {
if (a[2] < a[1]) {
// 2 1 0
} else {
if (a[2] < a[0]) {
// 1 2 0
} else {
// 1 0 2
}
}
} else {
if (a[2] < a[0]) {
// 2 0 1
} else {
if (a[2] < a[1]) {
// 0 2 1
} else {
// 0 1 2
}
}
}
}
Сортировка 3х элементов
5
Избыточное сравнение
6
Прострые сортировки
 Существует множество алгоритмов сортировка
 Сортировка выбором - Selection Sort
 Сортировка вставками - Insertion Sort
 Пузырьковая сортировка - Bubble Sort
7
Сортировка выбором
 Разделим массив на две части: левую - упорядоченную и правую –
неупорядоченную
 Будем гарантировать, что элементы в правой части больше чем в левой
 Выберем наименьший элемент в правой части и переставим его в её начало
 После каждого выбора и перестановки, будем смещать границу между
частями массива на 1 вправо
 Выбор каждого нового элемента требует прохода по правой части
 Для сортировки массива из N элементов требуется N-1 проход
8
Сортировка выбором
0 23 78 45 8 32 56
1 8 78 45 23 32 56
2 8 23 45 78 32 56
3 8 23 32 78 45 56
4 8 23 32 45 78 56
5 8 23 32 45 56 78
Ordered
Unordered
9
Сортировка выбором
void selection_sort(int *a, int n) {
for (int i = 0; i < n - 1; ++i) {
int min_index = i;
for (int j = i + 1; j < n; ++j) {
if (a[j] < a[min_index]) min_index = j;
}
swap(a[i], a[min_index]);
}
}
void swap(int &a, int &b ) {
int tmp = a;
a = b;
b = tmp;
}
10
Сортировка выбором: Анализ
 В общем случае алгоритм сортировки состоит из сравнения
ключей и перестановки элементов
 Время работы алгоритма пропорционально количеству
сравнений и количеству перестановок
 Внешний цикл совершает n-1 итерацию
 В каждой итерации 1 перестановка
 В 1й итерации n-1 сравнение, во 2й – n-2, … в n-1й – 1
 Ровно 𝒏(𝒏 − 𝟏)/𝟐 сравнений
 Ровно 𝒏 − 𝟏 перемещений
11
Сортировка выбором: Анализ
 Количество операций не зависит от состава массива
 Сложность в лучшем и в худшем случае совпадает: 𝑶(𝒏 𝟐
)
12
Сортировка вставками
 Сортировка вставками – простой алгоритм часто применяемый
на малых объёмах данных
 Самый популярный метод сортировки у игроков в покер
 Массив делится на две части, упорядоченную - левую и
неупорядоченную - правую
 На каждой итерации выбираем элемент из правой части и
вставляем его на подходящее место в левой части
 Массив из n элементов требует n-1 итерацию
13
Сортировка вставками
23 78 45 8 32 56
23 78 45 8 32 56
23 45 78 8 32 56
8 23 45 78 32 56
8 23 32 45 78 56
8 23 32 45 56 78
Ordered
Unordered
14
Сортировка вставками
void insertion_sort(int *a, int n) {
for (int i = 1; i < n; ++i) {
int tmp = a[i];
for (int j = i; j > 0 && tmp < a[j-1]; --j) {
a[j] = a[j-1];
}
a[j] = tmp;
}
}
15
Сортировка вставками: Анализ
 Время работы алгоритма зависит не только от размера
массива, но и от порядка элементов
 Лучший случай:  O(n)
 Массив упорядочен по возрастанию
 Внутренний цикл сделает 0 итераций
 Количество копирований: 2*(n-1)  O(n)
 Количество сравнений: (n-1)  O(n)
 Худший случай:  O(n2)
 Массив упорядочен в порядке убывания:
 Внутренний цикл работает i-1 итерацию, для i = 2,3, …, n
 Количество копирований: 2*(n-1)+(1+2+...+n-1)= 2*(n-1)+ n*(n-1)/2  O(n2)
 Количество сравнений: (1+2+...+n-1)= n*(n-1)/2  O(n2)
 В среднем:  O(n2)
16
Сортировка пузырьком
 Сортировка пузырьком – частный случай сортировки выбором
 Массив делится на две части, упорядоченную - левую и
неупорядоченную - правую
 На каждой итерации проходим правую часть сравнивая
текущий элемент с соседом слева
 меняем элементы местами если сосед больше
 Иначе, уменьшаем индекс текущего на 1
 Наименьший элемент всплывает к границе левой части
 Останавливаемся если не было ни одного обмена
 Массив из n элементов требует максимум n-1 итерацию
17
Сортировка пузырьком
18
Сортировка пузырьком: Анализ
 Лучший случай
 1 проход, N-1 сравнение, 0 обменов => 𝑶(𝑵)
 Худший случай
 N-1 проход, N(N-1)/2 сравнений, N-1 обменов => 𝑶(𝑵 𝟐)
19
Сортировка пузырьком
20
Предел скорости
 Оценка сложности
21
Теоретико-числовая оценка сложности
 Количество перестановок N элементов: N!
 1 сравнение = 1 бит информации
 Для записи номера перестановки нужно
𝑙𝑜𝑔2 𝑁! ≅ 𝑁 𝑙𝑜𝑔 𝑁 бит
22
Сортировка вставками. n(log(n)) ?
 Будем искать позицию вставки в упорядоченную
часть массива бинарным поиском
 𝑶 𝒏 𝐥𝐨𝐠 𝒏 - операций сравнения
 𝑶(𝒏 𝟐) – операций перемещения
 Используем memmove для уменьшения константы
𝑪 𝟐
 𝑻 𝒏 ≤ 𝑪 𝟏 𝒏 𝒍𝒐𝒈(𝒏) + 𝑪 𝟐 𝒏^𝟐
23
Сортировка вставками. n(log(n)) ?
void memmove(char *dst, char *src, int size);
void insertionSortFast(int *a, int n) {
for (int i = 1; i < n; ++i) {
int new_pos = binary_search(a, i, a[i]);
if (new_pos < i) {
int tmp = a[i];
memmove(&a[new_pos + 1], &a[new_pos],
(i - new_pos)*sizeof(int));
a[new_pos] = tmp;
}
}
}
24
Сортировка вставками. n(log(n)) ?
 Будем искать позицию вставки за время 𝑶(𝒍𝒐𝒈(𝒊 − 𝒌))
 𝑶 𝒏 𝐥𝐨𝐠 𝒏 , 𝜽(𝒏) - операций сравнения
 𝑶 𝒏 𝟐 , 𝜽 𝟏 - операций перемещения
25
Хорошие сортировки
 Пирамидальная сортировка - Heap Sort
 Сортировка слиянием - Merge Sort
 Быстрая сортировка - Quick Sort
26
Пирамидальная сортировка
 N вставок в кучу: N • O(log(N))
 N Извлечение минимума из кучи: N • O(log(n))
 Построение кучи из N элементов: O(2N•log(N))
27
Пирамидальная сортировка .
void heap_insert(int *a, int n, int x)
{
a[n+1] = x;
for (int i = n+1; i > 1;) {
if (a[i] > a[i/2]) {
swap(a[i], a[i/2]);
i = i/2;
} else {
break;
}
}
}
28
Пирамидальная сортировка ..
void heap_pop(int *a, int n) {
swap(a[n],a[1]);
for (int i = 1; 2*i < n;) {
i *= 2;
if (i+1 < n && a[i] < a[i+1]) {
i += 1;
}
if (a[i/2] < a[i]) {
swap(a[i/2], a[i]);
}
}
}
29
Пирамидальная сортировка ..!
void heap_sort(int *data, int n) {
int *buff = new int[n+1];
for (int i = 0; i < n; ++i) {
heap_insert(buff, i, data[i]);
}
for (int i = 0; i < n; ++i) {
data[n-1-i] = buff[1];
heap_pop(buff, n - i);
}
delete [] buff;
}
30
Пирамидальная сортировка
 Построить пирамиду за линейное время: O(N)
 N раз достать максимальный элемент: O(N•log(N))
 Не использовать дополнительную память
31
Пирамида за линейное время
 Для каждого внутреннего элемента
восстановить порядок
 По 2 сравнения на уровень дерева
 N/2 • 2
32
Пирамида за линейное время
33
Пирамида за линейное время
void heap_make(int *a, int n) {
for (int i = n/2; i >= 1; --i) {
for (int j = i; j <= n/2;) {
int k = j*2;
if (k+1 <= n and a[k] < a[k+1]) {
++k;
}
if (a[j] < a[k]) {
swap(a[k],a[j]);
j = k;
} else {
break;
}
}
}
}
34
Пирамида за линейное время
void heap_sort_fast(int *data, int n)
{
heap_make(data - 1, n);
for (int i = 0; i < n; ++i) {
heap_pop(data - 1, n - i);
}
}
35
Пирамидальная сортировка
как эволюция сортировки выбором
Heap Sorted
36
Сортировка Хоара: QuickSort
 Разделим массив на 2 части, так что элементы в левой меньше
чем в правой
 Применим эту процедуру к левой и правой частям рекурсивно
37
QuickSort: Split
 Установим 2 указателя: i в – начало массива, j – в
конец
 Будем помнить под каким указателем лежит «пивот»
 Если a[j] > a[i], поменяем элементы массива под I, j
 Сместим на 1 указатель, не указывающий на «пивот»
 Продолжим пока i != j
38
QuickSort: Split
39
Сортировка Хоара
void quick_sort(int *a, int n) {
int i = 0;
int j = n - 1;
bool side = 0;
while (i != j) {
if (a[i] > a[j]) {
swap(a[i], a[j]);
side = !side;
}
if (side) {
++i;
} else{
--j;
}
}
if (i > 1) quick_sort(a, i);
if (n > i+1) quick_sort(a + (i+1), n - (i+1));
}
40
Quicksort: анализ
 Предположим, что split делит массив в соотношении 1:1
 𝑻 𝒏 ≤ 𝒄 𝟏 + 𝒄 𝟐 𝒏 + 𝑻
𝒏
𝟐
+ 𝑻
𝒏
𝟐
=
= 𝒌=𝟎
𝒍𝒐𝒈 𝟐 𝒏
{𝒄 𝟏 𝟐 𝒌
+ 𝒄 𝟐 𝒏} = 𝒄 𝟏 𝒏 + 𝒄 𝟐 𝒏 𝒍𝒐𝒈 𝒏
 𝑻 𝒏 = 𝑶 𝒏 𝒍𝒐𝒈 𝒏
41
Quicksort: анализ
 Упорядоченный массив делится в соотношении 1:n-1
 𝑻 𝒏 = с 𝟏 + 𝒄 𝟐 𝒏 + 𝑻 𝒏 − 𝟏 =
𝟏
𝟐
𝒄 𝟐 𝒏 𝟐 + 𝒄 𝟏 𝒏 = 𝑶 𝒏 𝟐
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
* * * * * * * * * * * * * * * * * * * *
42
Quicksort: выбор пивота
 1й элемент
 Серединный элемент
 Медиана трёх
 Случайный элемент
 Медиана
 Медиана по трём случайным
 …
43
Quicksort-killer
 Последовательность, приводящая к времени: 𝑻(𝒏) =
𝑶(𝒏 𝟐
)
 [1,2,3,…n]  первый элемент
 Для любого предопределённого порядка выбора
пивота, существует killer-последовательность
 http://www.cs.dartmouth.edu/~doug/mdmspe.pdf
44
Свойства сортировок
 Локальная сортировка сортировка не требует
дополнительной памяти
 Стабильная сортировка сохраняет порядок
следования равных элементов
45
Стабильность сортировки
 Постоянство порядка элементов с неразличимыми ключами
 Сортировка двузначных чисел по старшему разряду
[21,22,23,24,25,19,18,17,16] => [19,18,17,16,21,22,23,24,25]
 Любую сортировку можно сделать стабильной, за O(n)
дополнительной памяти
Algorithm insertion select heap quick merge
stable Yep Yep No Possible ???
46
Локальность сортировки
 Отсутствие необходимости во внешней памяти
 Тривиальные сортировки локальны
 Cкорость – плата за локальность
 http://akira.ruc.dk/~keld/teaching/algoritmedesign_f04
/Artikler/04/Huang88.pdf <= inplace merge
Algorithm insertion select heap quick merge
Inplace 𝑂(𝑛2
) 𝑂(𝑛2
) 𝑂(𝑛 log(𝑛)) 𝑂(𝑛 log(𝑛))?? 𝑂 𝑛 log 𝑛 ??
𝑂(log(𝑛)) 𝑂(𝑛 log(𝑛))
𝑂(𝑛) 𝑂(𝑛 log(𝑛))
47
Порядковые статистики
 K-й порядковой статистикой называется элемент,
который окажется на k-й позиции после сортировки
массива
48
Рандомизованная медиана
Медиана RandSelect(A[1, N], k); k = N/2
 Случайно выберем элемент из A: A[j]
 Разобьём A на 2 части: меньше/больше A[j]
 Пусть позиция A[j] в разделённом массиве: k
 k < j ?
 Найдём: RandSelect(A[1, j], k)
 Иначе: RandSelect(A[j+1, N], k-j)
49
Quicksort: медиана за линейное время
Медиана  SELECT(A[1,N], k); k = N/2
 Разобьём массив на пятёрки
 Отсортируем каждую пятёрку
 Найдём медиану середин пятёрок
 Разобьём массив на 2 группы: меньше/больше
медианы пятёрок
 Пусть индекс медианы в массиве j
 j > k ?
 найдём: SECLECT(A[1, j], k)
 иначе: SELECT(A[j+1, N], k-j)
50
Медиана за линейное время
51
Медиана за линейное время: анализ
• Разобьём массив на пятёрки
• Отсортируем каждую пятёрку 𝒄 𝟏 𝑵
• Найдём медиану середин пятёрок 𝑻(𝑵/𝟓)
• Разобьём массив на 2 группы <> медианы медиан: 𝒄 𝟐 𝑵
• найдём: SECLECT(A[1, j], k) => 𝑻(𝒋)
• иначе: SELECT(A[j+1, N], k-j) => 𝑻 𝑵 − 𝒋 ; 𝟎. 𝟑𝑵 ≤ 𝒋 ≤ 𝟎. 𝟕𝑵;
• 𝑻 𝑵 ≤ 𝑻
𝑵
𝟓
+ 𝒄𝑵 + 𝑻 𝟎. 𝟕𝑵 ; => 𝑻(𝑵) = 𝑶(𝑵);
52
Вопросы?
?
?
?
Спасибо за внимание!
Иванов Георгий
Поиск.mail.ru

Mais conteúdo relacionado

Mais procurados

Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиMikhail Kurnosov
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыMikhail Kurnosov
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поискFedor Tsarev
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыMikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьMikhail Kurnosov
 
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)Mikhail Kurnosov
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 

Mais procurados (20)

Алгоритмы поиска
Алгоритмы поискаАлгоритмы поиска
Алгоритмы поиска
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поиск
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
Лекция 7: Очереди с приоритетами. Бинарные кучи (пирамиды)
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы SciPy
 

Destaque

Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Technopark
 
Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Technopark
 
Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Technopark
 
Бизнес весна 2014 лекция 2
Бизнес весна 2014 лекция 2Бизнес весна 2014 лекция 2
Бизнес весна 2014 лекция 2Technopark
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3Technopark
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4Technopark
 
Разработка веб-сервисов осень 2013 лекция 12
Разработка веб-сервисов осень 2013 лекция 12Разработка веб-сервисов осень 2013 лекция 12
Разработка веб-сервисов осень 2013 лекция 12Technopark
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1Technopark
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]Technopark
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Technopark
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2Technopark
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Technopark
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Technopark
 

Destaque (20)

Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5
 
Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7
 
Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3Бизнес весна 2014 лекция 3
Бизнес весна 2014 лекция 3
 
Бизнес весна 2014 лекция 2
Бизнес весна 2014 лекция 2Бизнес весна 2014 лекция 2
Бизнес весна 2014 лекция 2
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4
 
Разработка веб-сервисов осень 2013 лекция 12
Разработка веб-сервисов осень 2013 лекция 12Разработка веб-сервисов осень 2013 лекция 12
Разработка веб-сервисов осень 2013 лекция 12
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8
 
Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6Бизнес весна 2014 лекция 6
Бизнес весна 2014 лекция 6
 

Semelhante a Алгоритмы и структуры данных весна 2014 лекция 3

Лекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистикиЛекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистикиsimple_people
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptxrdes1
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonYandex
 
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Nikolay Grebenshikov
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийAndrey Akinshin
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Mikhail Kurnosov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 

Semelhante a Алгоритмы и структуры данных весна 2014 лекция 3 (20)

Лекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистикиЛекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистики
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, списки
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и Python
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 

Mais de Technopark

Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"Technopark
 

Mais de Technopark (20)

Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
 

Алгоритмы и структуры данных весна 2014 лекция 3

  • 2. Алгоритмы сортировки  Сортировка – процесс упорядочивания элементов массива  Многие программы используют алгоритмы сортировки. Часто время их работы определяется временем сортировки  Данные часто упорядочены каким либо  Многие задачи существенно быстрее решаются на предварительно упорядоченных данных 2
  • 3. 3 1. Простые сортировки 2. Предел скорости 3. Ускорение 4. Хорошие сортировки 5. Особые свойства 6. Поразрядная сортировка 7. Сравнение
  • 4. Сортировка 1 и 2х элементов void sort_1(int *a) { return; } void sort_2(int *a) { if (a[1] < a[0]) { swap(a[1], a[0]); } } 4
  • 5. void sort_3(int *a) { if (a[1] < a[0]) { if (a[2] < a[1]) { // 2 1 0 } else { if (a[2] < a[0]) { // 1 2 0 } else { // 1 0 2 } } } else { if (a[2] < a[0]) { // 2 0 1 } else { if (a[2] < a[1]) { // 0 2 1 } else { // 0 1 2 } } } } Сортировка 3х элементов 5
  • 7. Прострые сортировки  Существует множество алгоритмов сортировка  Сортировка выбором - Selection Sort  Сортировка вставками - Insertion Sort  Пузырьковая сортировка - Bubble Sort 7
  • 8. Сортировка выбором  Разделим массив на две части: левую - упорядоченную и правую – неупорядоченную  Будем гарантировать, что элементы в правой части больше чем в левой  Выберем наименьший элемент в правой части и переставим его в её начало  После каждого выбора и перестановки, будем смещать границу между частями массива на 1 вправо  Выбор каждого нового элемента требует прохода по правой части  Для сортировки массива из N элементов требуется N-1 проход 8
  • 9. Сортировка выбором 0 23 78 45 8 32 56 1 8 78 45 23 32 56 2 8 23 45 78 32 56 3 8 23 32 78 45 56 4 8 23 32 45 78 56 5 8 23 32 45 56 78 Ordered Unordered 9
  • 10. Сортировка выбором void selection_sort(int *a, int n) { for (int i = 0; i < n - 1; ++i) { int min_index = i; for (int j = i + 1; j < n; ++j) { if (a[j] < a[min_index]) min_index = j; } swap(a[i], a[min_index]); } } void swap(int &a, int &b ) { int tmp = a; a = b; b = tmp; } 10
  • 11. Сортировка выбором: Анализ  В общем случае алгоритм сортировки состоит из сравнения ключей и перестановки элементов  Время работы алгоритма пропорционально количеству сравнений и количеству перестановок  Внешний цикл совершает n-1 итерацию  В каждой итерации 1 перестановка  В 1й итерации n-1 сравнение, во 2й – n-2, … в n-1й – 1  Ровно 𝒏(𝒏 − 𝟏)/𝟐 сравнений  Ровно 𝒏 − 𝟏 перемещений 11
  • 12. Сортировка выбором: Анализ  Количество операций не зависит от состава массива  Сложность в лучшем и в худшем случае совпадает: 𝑶(𝒏 𝟐 ) 12
  • 13. Сортировка вставками  Сортировка вставками – простой алгоритм часто применяемый на малых объёмах данных  Самый популярный метод сортировки у игроков в покер  Массив делится на две части, упорядоченную - левую и неупорядоченную - правую  На каждой итерации выбираем элемент из правой части и вставляем его на подходящее место в левой части  Массив из n элементов требует n-1 итерацию 13
  • 14. Сортировка вставками 23 78 45 8 32 56 23 78 45 8 32 56 23 45 78 8 32 56 8 23 45 78 32 56 8 23 32 45 78 56 8 23 32 45 56 78 Ordered Unordered 14
  • 15. Сортировка вставками void insertion_sort(int *a, int n) { for (int i = 1; i < n; ++i) { int tmp = a[i]; for (int j = i; j > 0 && tmp < a[j-1]; --j) { a[j] = a[j-1]; } a[j] = tmp; } } 15
  • 16. Сортировка вставками: Анализ  Время работы алгоритма зависит не только от размера массива, но и от порядка элементов  Лучший случай:  O(n)  Массив упорядочен по возрастанию  Внутренний цикл сделает 0 итераций  Количество копирований: 2*(n-1)  O(n)  Количество сравнений: (n-1)  O(n)  Худший случай:  O(n2)  Массив упорядочен в порядке убывания:  Внутренний цикл работает i-1 итерацию, для i = 2,3, …, n  Количество копирований: 2*(n-1)+(1+2+...+n-1)= 2*(n-1)+ n*(n-1)/2  O(n2)  Количество сравнений: (1+2+...+n-1)= n*(n-1)/2  O(n2)  В среднем:  O(n2) 16
  • 17. Сортировка пузырьком  Сортировка пузырьком – частный случай сортировки выбором  Массив делится на две части, упорядоченную - левую и неупорядоченную - правую  На каждой итерации проходим правую часть сравнивая текущий элемент с соседом слева  меняем элементы местами если сосед больше  Иначе, уменьшаем индекс текущего на 1  Наименьший элемент всплывает к границе левой части  Останавливаемся если не было ни одного обмена  Массив из n элементов требует максимум n-1 итерацию 17
  • 19. Сортировка пузырьком: Анализ  Лучший случай  1 проход, N-1 сравнение, 0 обменов => 𝑶(𝑵)  Худший случай  N-1 проход, N(N-1)/2 сравнений, N-1 обменов => 𝑶(𝑵 𝟐) 19
  • 22. Теоретико-числовая оценка сложности  Количество перестановок N элементов: N!  1 сравнение = 1 бит информации  Для записи номера перестановки нужно 𝑙𝑜𝑔2 𝑁! ≅ 𝑁 𝑙𝑜𝑔 𝑁 бит 22
  • 23. Сортировка вставками. n(log(n)) ?  Будем искать позицию вставки в упорядоченную часть массива бинарным поиском  𝑶 𝒏 𝐥𝐨𝐠 𝒏 - операций сравнения  𝑶(𝒏 𝟐) – операций перемещения  Используем memmove для уменьшения константы 𝑪 𝟐  𝑻 𝒏 ≤ 𝑪 𝟏 𝒏 𝒍𝒐𝒈(𝒏) + 𝑪 𝟐 𝒏^𝟐 23
  • 24. Сортировка вставками. n(log(n)) ? void memmove(char *dst, char *src, int size); void insertionSortFast(int *a, int n) { for (int i = 1; i < n; ++i) { int new_pos = binary_search(a, i, a[i]); if (new_pos < i) { int tmp = a[i]; memmove(&a[new_pos + 1], &a[new_pos], (i - new_pos)*sizeof(int)); a[new_pos] = tmp; } } } 24
  • 25. Сортировка вставками. n(log(n)) ?  Будем искать позицию вставки за время 𝑶(𝒍𝒐𝒈(𝒊 − 𝒌))  𝑶 𝒏 𝐥𝐨𝐠 𝒏 , 𝜽(𝒏) - операций сравнения  𝑶 𝒏 𝟐 , 𝜽 𝟏 - операций перемещения 25
  • 26. Хорошие сортировки  Пирамидальная сортировка - Heap Sort  Сортировка слиянием - Merge Sort  Быстрая сортировка - Quick Sort 26
  • 27. Пирамидальная сортировка  N вставок в кучу: N • O(log(N))  N Извлечение минимума из кучи: N • O(log(n))  Построение кучи из N элементов: O(2N•log(N)) 27
  • 28. Пирамидальная сортировка . void heap_insert(int *a, int n, int x) { a[n+1] = x; for (int i = n+1; i > 1;) { if (a[i] > a[i/2]) { swap(a[i], a[i/2]); i = i/2; } else { break; } } } 28
  • 29. Пирамидальная сортировка .. void heap_pop(int *a, int n) { swap(a[n],a[1]); for (int i = 1; 2*i < n;) { i *= 2; if (i+1 < n && a[i] < a[i+1]) { i += 1; } if (a[i/2] < a[i]) { swap(a[i/2], a[i]); } } } 29
  • 30. Пирамидальная сортировка ..! void heap_sort(int *data, int n) { int *buff = new int[n+1]; for (int i = 0; i < n; ++i) { heap_insert(buff, i, data[i]); } for (int i = 0; i < n; ++i) { data[n-1-i] = buff[1]; heap_pop(buff, n - i); } delete [] buff; } 30
  • 31. Пирамидальная сортировка  Построить пирамиду за линейное время: O(N)  N раз достать максимальный элемент: O(N•log(N))  Не использовать дополнительную память 31
  • 32. Пирамида за линейное время  Для каждого внутреннего элемента восстановить порядок  По 2 сравнения на уровень дерева  N/2 • 2 32
  • 34. Пирамида за линейное время void heap_make(int *a, int n) { for (int i = n/2; i >= 1; --i) { for (int j = i; j <= n/2;) { int k = j*2; if (k+1 <= n and a[k] < a[k+1]) { ++k; } if (a[j] < a[k]) { swap(a[k],a[j]); j = k; } else { break; } } } } 34
  • 35. Пирамида за линейное время void heap_sort_fast(int *data, int n) { heap_make(data - 1, n); for (int i = 0; i < n; ++i) { heap_pop(data - 1, n - i); } } 35
  • 36. Пирамидальная сортировка как эволюция сортировки выбором Heap Sorted 36
  • 37. Сортировка Хоара: QuickSort  Разделим массив на 2 части, так что элементы в левой меньше чем в правой  Применим эту процедуру к левой и правой частям рекурсивно 37
  • 38. QuickSort: Split  Установим 2 указателя: i в – начало массива, j – в конец  Будем помнить под каким указателем лежит «пивот»  Если a[j] > a[i], поменяем элементы массива под I, j  Сместим на 1 указатель, не указывающий на «пивот»  Продолжим пока i != j 38
  • 40. Сортировка Хоара void quick_sort(int *a, int n) { int i = 0; int j = n - 1; bool side = 0; while (i != j) { if (a[i] > a[j]) { swap(a[i], a[j]); side = !side; } if (side) { ++i; } else{ --j; } } if (i > 1) quick_sort(a, i); if (n > i+1) quick_sort(a + (i+1), n - (i+1)); } 40
  • 41. Quicksort: анализ  Предположим, что split делит массив в соотношении 1:1  𝑻 𝒏 ≤ 𝒄 𝟏 + 𝒄 𝟐 𝒏 + 𝑻 𝒏 𝟐 + 𝑻 𝒏 𝟐 = = 𝒌=𝟎 𝒍𝒐𝒈 𝟐 𝒏 {𝒄 𝟏 𝟐 𝒌 + 𝒄 𝟐 𝒏} = 𝒄 𝟏 𝒏 + 𝒄 𝟐 𝒏 𝒍𝒐𝒈 𝒏  𝑻 𝒏 = 𝑶 𝒏 𝒍𝒐𝒈 𝒏 41
  • 42. Quicksort: анализ  Упорядоченный массив делится в соотношении 1:n-1  𝑻 𝒏 = с 𝟏 + 𝒄 𝟐 𝒏 + 𝑻 𝒏 − 𝟏 = 𝟏 𝟐 𝒄 𝟐 𝒏 𝟐 + 𝒄 𝟏 𝒏 = 𝑶 𝒏 𝟐 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 * * * * * * * * * * * * * * * * * * * * 42
  • 43. Quicksort: выбор пивота  1й элемент  Серединный элемент  Медиана трёх  Случайный элемент  Медиана  Медиана по трём случайным  … 43
  • 44. Quicksort-killer  Последовательность, приводящая к времени: 𝑻(𝒏) = 𝑶(𝒏 𝟐 )  [1,2,3,…n]  первый элемент  Для любого предопределённого порядка выбора пивота, существует killer-последовательность  http://www.cs.dartmouth.edu/~doug/mdmspe.pdf 44
  • 45. Свойства сортировок  Локальная сортировка сортировка не требует дополнительной памяти  Стабильная сортировка сохраняет порядок следования равных элементов 45
  • 46. Стабильность сортировки  Постоянство порядка элементов с неразличимыми ключами  Сортировка двузначных чисел по старшему разряду [21,22,23,24,25,19,18,17,16] => [19,18,17,16,21,22,23,24,25]  Любую сортировку можно сделать стабильной, за O(n) дополнительной памяти Algorithm insertion select heap quick merge stable Yep Yep No Possible ??? 46
  • 47. Локальность сортировки  Отсутствие необходимости во внешней памяти  Тривиальные сортировки локальны  Cкорость – плата за локальность  http://akira.ruc.dk/~keld/teaching/algoritmedesign_f04 /Artikler/04/Huang88.pdf <= inplace merge Algorithm insertion select heap quick merge Inplace 𝑂(𝑛2 ) 𝑂(𝑛2 ) 𝑂(𝑛 log(𝑛)) 𝑂(𝑛 log(𝑛))?? 𝑂 𝑛 log 𝑛 ?? 𝑂(log(𝑛)) 𝑂(𝑛 log(𝑛)) 𝑂(𝑛) 𝑂(𝑛 log(𝑛)) 47
  • 48. Порядковые статистики  K-й порядковой статистикой называется элемент, который окажется на k-й позиции после сортировки массива 48
  • 49. Рандомизованная медиана Медиана RandSelect(A[1, N], k); k = N/2  Случайно выберем элемент из A: A[j]  Разобьём A на 2 части: меньше/больше A[j]  Пусть позиция A[j] в разделённом массиве: k  k < j ?  Найдём: RandSelect(A[1, j], k)  Иначе: RandSelect(A[j+1, N], k-j) 49
  • 50. Quicksort: медиана за линейное время Медиана  SELECT(A[1,N], k); k = N/2  Разобьём массив на пятёрки  Отсортируем каждую пятёрку  Найдём медиану середин пятёрок  Разобьём массив на 2 группы: меньше/больше медианы пятёрок  Пусть индекс медианы в массиве j  j > k ?  найдём: SECLECT(A[1, j], k)  иначе: SELECT(A[j+1, N], k-j) 50
  • 52. Медиана за линейное время: анализ • Разобьём массив на пятёрки • Отсортируем каждую пятёрку 𝒄 𝟏 𝑵 • Найдём медиану середин пятёрок 𝑻(𝑵/𝟓) • Разобьём массив на 2 группы <> медианы медиан: 𝒄 𝟐 𝑵 • найдём: SECLECT(A[1, j], k) => 𝑻(𝒋) • иначе: SELECT(A[j+1, N], k-j) => 𝑻 𝑵 − 𝒋 ; 𝟎. 𝟑𝑵 ≤ 𝒋 ≤ 𝟎. 𝟕𝑵; • 𝑻 𝑵 ≤ 𝑻 𝑵 𝟓 + 𝒄𝑵 + 𝑻 𝟎. 𝟕𝑵 ; => 𝑻(𝑵) = 𝑶(𝑵); 52
  • 54. Спасибо за внимание! Иванов Георгий Поиск.mail.ru