SlideShare a Scribd company logo
Лекция 1Амортизационный анализ(Amortized analysis) 
КурносовМихаил Георгиевич 
E-mail: mkurnosov@gmail.com 
WWW: www.mkurnosov.net 
Курс “Алгоритмы и структуры данных” 
Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) 
Осенний семестр, 2014
2 
1.Определяем параметрыалгоритма, от которых зависит время его выполнения 
2.Выражаем количество операций, выполняемых алгоритмом, как функцию от его параметров (дляхудшего, среднегоили лучшего случаев) 
3.Строим асимптотическую оценку вычислительной сложности алгоритма –переходим к асимптотическим обозначениям O,, 
n,m 
T(n, m)= 2n2 + 4log2m 
T(n, m)= O(2n2 + 4log2m) 
= O(max{n2, log2m}) 
Анализ вычислительной сложности алгоритмов
functionSelectionSort(v[1:n],n) 
fori=1tondo 
min=i 
forj=i+1tondo 
ifv[j]<v[min]then 
min=j 
endif 
endfor 
ifmin!=ithen 
temp=v[i] 
v[i]=v[min] 
v[min]=temp 
endif 
endfor 
3 операции(худший случай –worst case) 
5операций 
1 операция 
T(n) = n+ 5n+ 3((n–1) + (n–2) + … + 1) = ? 
Сумма членов арифметической прогрессии 
3 
Анализ вычислительной сложности алгоритмов
functionSelectionSort(v[1:n],n) 
fori=1tondo 
min=i 
forj=i+1tondo 
ifv[j]<v[min]then 
min=j 
endif 
endfor 
ifmin!=ithen 
temp=v[i] 
v[i]=v[min] 
v[min]=temp 
endif 
endfor 
3 операции(худший случай –worst case) 
5операций 
1 операция 
4 
푻풏=ퟔ풏+ ퟑ풏ퟐ−ퟑ풏 ퟐ =푶(풏ퟐ) 
Анализ вычислительной сложности алгоритмов
Бинарный счетчик(Binary Counter) 
5 
Счетчик имеет длину Lбит (может принимать 2Lзначений) 
Поддерживает операцию Increment, которая увеличивает его значение на единицу 
Начальное значение счетчика –0 
Пример 5 разрядного счетчика: 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
0 
0 
0
Бинарный счетчик(Binary Counter) 
6 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
0 
0 
1 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
0 
1 
0 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
0 
1 
1 
Increment: 1 → 2 
Increment: 0 → 1 
Increment: 2 → 3
Бинарный счетчик(Binary Counter) 
7 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
1 
0 
0 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
1 
0 
1 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
0 
1 
1 
0 
Increment: 4 → 5 
Increment: 3 → 4 
Increment: 5 → 6
Бинарный счетчик(Binary Counter) 
8 
functionIncrement(A) 
i = 0 
whilei < L andA[i] = 1 do 
A[i] = 0 
i = i + 1 
end while 
ifi < L then 
A[i] = 1 
end if 
end function 
Разряд 
3 
2 
1 
0 
Вес 
8 
4 
2 
1 
Значение 
1 
1 
0 
0 
При каждом вызове функции Incrementвремя ее работы разное 
Время работы зависит от внутреннего состояния – значений A
Бинарный счетчик(Binary Counter) 
9 
functionIncrement(A) 
i = 0 
whilei < L andA[i] = 1 do 
A[i] = 0 
i = i + 1 
end while 
ifi < L then 
A[i] = 1 
end if 
end function 
При каждом вызове функции Incrementвремя ее работы разное 
Время работы зависит от внутреннего состояния – значений A 
Вычислительная сложность функции Increment?
Бинарный счетчик(Binary Counter) 
10 
В худшем случае (worst case) массив Aсостоит только из единиц, для выполнения операции Increment требуется время O(L) 
Это пессимистическая оценка! 
При каждом вызове функции Incrementвремя ее работы разное 
Как анализировать вычислительную сложность алгоритмов время, выполнения которыхзависит от их внутреннего состояния?
Амортизационный анализ 
11 
Амортизационный анализ (Amortized analysis) – метод анализа алгоритмов, позволяющий осуществлять оценку времени выполнения последовательности из nопераций над некоторой структурой данных 
Время выполнения усредняется по всем nоперациям, и оценивается среднее время выполнения одной операции в худшем случае
Амортизационный анализ 
12 
Некоторые операции структуры данных могут иметь высокую вычислительную сложность, другие низкую 
Например, некоторая операция может подготавливать структуру данных для быстрого выполнения других операций 
Такие “тяжелые”операции выполняются редко и могут оказывать незначительное влияние на суммарное время выполнения последовательности из nопераций
Амортизационный анализ 
13 
Амортизационный анализ возник из группового анализа (Aggregate analysis) 
Введен в практику Робертом Тарьяном(Robert Tarjan) в 1985 году: 
TarjanR. Amortized Computational Complexity // SIAM. J. on Algebraic and Discrete Methods,6(2), 1985. –P. 306–318.
Методы амортизационного анализа 
14 
Групповой анализ (Aggregate analysis) 
Метод бухгалтерского учета (Accounting method) 
Метод потенциалов (Potential method) 
Все методы позволяют получить однуи ту же оценку, но разными способами
Групповой анализ (Aggregate analysis) 
15 
Групповой анализ (Aggregate analysis)– метод амортизационного анализа, позволяющий оценивать верхнюю границу времени T(n) выполнения последовательности из nопераций в худшем случае 
Амортизированная стоимость (Amortized cost, учетная стоимость)выполнения одной операции определяется как 
T(n) / n 
Амортизированная стоимость операции –это оценка сверху среднего времени выполнения операции в худшем случае
Стековые операции (Last In –First Out) 
16 
Push(S, x) 
x 
TPush= O(1) 
Pop(S) 
TPop= O(1) 
MultiPop(S, k) 
TMultiPop= O(min(|S|, k)) 
k
functionMultiPop(S, k) 
whileStackEmpty(S) = False andk > 0 do 
StackPop(S) 
k = k –1 
end while 
end function 
Стековые операции (Last In –First Out) 
17 
TMultiPop= O(min(|S|, k)) 
15 
4 
22 
78 
34 
12 
Top → 
34 
12 
Top → 
→ MultiPop(S, 4) → 
→ MultiPop(S, 7) →
Групповой анализ стековых операцийv1.0 
18 
Методом группового анализа оценим верхнюю границу времени T(n) выполнения произвольнойпоследовательности из n стековых операций (Push, Pop, MultiPop) 
1.Стоимость операции Pop равна O(1) 
2.Стоимость операции Push равнаO(1) 
3.Стоимость операции MultiPopв худшем случае O(n), так как в ходе выполнения nопераций в стеке не может находится более nобъектов 
В худшем случае последовательность из nопераций может содержать только операции MultiPop 
Тогда, суммарное времяT(n)выполнения nопераций есть O(n2), а амортизированная стоимость одной операции 
O(n2) / n = O(n) 
Грубая оценка сверху
Групповой анализ стековых операцийv2.0 
19 
Получим более точную оценку сверху времени T(n) выполнения произвольной последовательности из n стековых операций 
1.Количество операций Pop (включая вызовы из MultiPop) не превышает количества операций Push. В свою очередь, число операций Push не превышает n 
2.Таким образом для выполнения произвольной последовательности из nопераций Push, Pop, MultiPopтребуется время O(n) 
Суммарное время выполнения nопераций в худшем случае есть O(n), тогда амортизированная стоимость(средняя стоимость) одной операции 
O(n) / n = O(1)
Групповой анализ стековых операций:вопрос 
20 
Останется ли справедливой оценка амортизированной стоимости стековых операций, равная О(1), если включить в множество стековых операций операцию MultiPush(S, k), помещающую в стекk элементов? 
MultiPush(S, k) 
k 
TMultiPush= O(k)
Групповой анализ стековых операций:ответ 
21 
Ответ –нет 
Оценка амортизированной стоимости одной стековой операций станет O(k) 
В последовательности из nстековых операций может быть nопераций MultiPush, что требует времени O(nk) 
Тогда амортизированная стоимость(средняя стоимость)одной стековой операции T(n)/ n= O(nk) / n= O(k) 
MultiPush(S, k) 
k
Бинарный счетчик(Binary Counter) 
22 
Счетчик имеет длину Lбит (может принимать 2Lзначений) 
Поддерживает операцию Increment 
Пример 5 битный счетчик 
oЗначение счетчика 1, битовая последовательность: 00001 
oЗначение счетчика 3, битовая последовательность: 00011 
oЗначение счетчика 4, битовая последовательность: 00100 
oЗначение счетчика 5, битовая последовательность: 00101 
oЗначение счетчика 10, битовая последовательность: 01010 
Разряд 
4 
3 
2 
1 
0 
Вес 
16 
8 
4 
2 
1 
Значение 
0 
1 
1 
0 
0
Бинарный счетчик(Binary Counter) 
23 
functionIncrement(A) 
i = 0 
whilei < L andA[i] = 1 do 
A[i] = 0 
i = i + 1 
end while 
ifi < L then 
A[i] = 1 
end if 
end function 
Разряд 
3 
2 
1 
0 
Вес 
8 
4 
2 
1 
Значение 
1 
1 
0 
0 
При каждом вызове функции Incrementвремя ее работы разное 
Время работы зависит от внутреннего состояния – значений A
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость(# операций) 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость(# операций) 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31 
Какова амортизированная стоимостьвыполненияфункции Increment(среднее время в худшем случае)?
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость(# операций) 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31 
Оценим сверху время T(n) выполнения nопераций Increment 
Тогда амортизированная стоимость операции Increment (среднее время выполнения)будет 
T(n) / n
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31 
Можно заметить, что время выполненияn операций2n ≥ T(n) 
n 
T(n)
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31 
Можно заметить: 
Бит 0 изменяется nраз (при каждом вызове Increment) 
Бит 1: 푛/2раз 
Бит 2: 푛/4раз 
… 
Бит L-1 изменяется 푛/2퐿−1раз 
푇푛=푛+ 푛 2+ 푛 4+⋯+ 푛 2퐿−1= =푛+푛=2푛
Бинарный счетчик(Binary Counter) 
Бинарный счетчик (L= 8 бит) 
Знач. 
A[7] 
… 
A[4] 
A[3] 
A[2] 
A[1] 
A[0] 
Стоимость 
Суммарная стоимость 
1 
0 
… 
0 
0 
0 
0 
1 
1 
1 
2 
0 
0 
0 
0 
1 
0 
2 
3 
3 
0 
0 
0 
0 
1 
1 
1 
4 
4 
0 
0 
0 
1 
0 
0 
3 
7 
5 
0 
0 
0 
1 
0 
1 
1 
8 
6 
0 
0 
0 
1 
1 
0 
2 
10 
7 
0 
0 
0 
1 
1 
1 
1 
11 
8 
0 
0 
1 
0 
0 
0 
4 
15 
9 
0 
0 
1 
0 
0 
1 
1 
16 
10 
0 
0 
1 
0 
1 
0 
2 
18 
11 
0 
0 
1 
0 
1 
1 
1 
19 
12 
0 
0 
1 
1 
0 
0 
3 
22 
13 
0 
0 
1 
1 
0 
1 
1 
23 
14 
0 
0 
1 
1 
1 
0 
2 
25 
15 
0 
0 
1 
1 
1 
1 
1 
26 
16 
0 
1 
0 
0 
0 
0 
5 
31 
Средняя (амортизированная) стоимость одной операции IncrementO(n) / n= O(1)
Динамические таблицы(Dynamic tables) 
30 
Динамическая таблица (Dynamic table, dynamic array, growablearray)–это массив поддерживающий вставку и удаление элементов и динамически изменяющий свой размер до необходимого значения 
Поддерживаемые операции 
oInsert(T, x) 
oDelete(T, x) 
oSize –количество свободных ячеек 
ok–количество элементов добавленных в массив 
T 
Size 
k
Динамические таблицы(Dynamic tables) 
31 
При выполнении операции Insert размер массива увеличивается 
Как увеличивать размер массива? 
Аддитивная схема–текущий размер массива увеличивается на kячеек (по арифметической прогрессии) 
Мультипликативная схема–текущий размер массива увеличивается в kраз (по геометрической прогрессии) 
Примеры реализации: 
oС++:std::vector 
oJava:ArrayList 
o.NET 2.0:List<> 
oPython:list
Динамические таблицы(Dynamic tables) 
functionInsert(x) 
ifSize = 0 then 
Size = 1 
Table = AllocateMemory(1) 
k = 0 
else if k = Size then 
Size = Size * 2 
NewTable= AllocateMemory(Size) 
fori = 0 tok –1 do 
NewTable[i] = Table[i] 
end for 
FreeMemory(Table) 
Table = NewTable 
end if 
Table[k] = x 
k = k + 1 
end function 
x1 
x2 
x3 
x5 
x4
Динамические таблицы(Dynamic tables) 
33 
Проведем амортизационный анализ времени T(n) выполнения последовательности из nопераций Insert 
Время работы операции Insert зависит от состояния таблицы –количества kэлементов и её размераSize 
Будем учитывать только операции записи элементов в таблицу 
Table[k] = x 
T 
Size 
k
Амортизационный анализ операции Insert 
functionInsert(x) 
ifSize = 0 then 
Size = 1 
Table = AllocateMemory(1) 
k = 0 
else if k = Size then 
Size = Size * 2 
NewTable= AllocateMemory(Size) 
fori = 0 tok –1 do 
NewTable[i] = Table[i] 
end for 
FreeMemory(Table) 
Table = NewTable 
end if 
Table[k] = x 
k = k + 1 
end function 
Первый вызов Insert–1 операция 
Второй вызов – 2 оп. (Copy1 + Write1) 
Третий –3 оп. (Copy 2 + Write1) 
Четвертый –1 оп. 
Пятый –5оп. (Copy4 + Write1) 
…
Амортизационный анализ операции Insert 
35 
Обозначим через ci количество операции,выполняемых на i-ом вызове Insert 
푐푖= 푖,если푖−1степень2,1,иначе. 
Тогда оценка сверху времени T(n) выполнения n операций Insert есть 
푇푛=푐1+푐2+⋯+푐푛≤푛+20+21+22+⋯+2log2푛 
푇(푛)<푛+2푛=3푛
36 
Оценка сверху амортизированной сложности одной операции Insert есть 
푇퐼푛푠푒푟푡= 푇푛 푛 = 3푛 푛 =3=푶(ퟏ) 
Среднее время выполнения (вычислительная сложность) одной операции Insertв худшем случае есть O(1) 
Амортизационный анализ операции Insert
functionAddToBuffer(value) 
Count = Count + 1 
Buffer[Count] = value 
ifCount = H then 
fori = 1 toH do 
Packet[i] = Buffer[i] 
end for 
Count = 0 
end if 
end function 
Обработчик с накопителем 
37
Обработчик с накопителем 
38 
Построить оценку сверху времени T(n) выполнения nопераций AddToBuffer 
Оценить амортизированную сложностьфункции AddToBuffer
Амортизационный анализ операции AddToBuffer 
39 
Обозначим через ciколичество операции,выполняемых на i-ом вызове AddToBuffer 
푐푖= 퐻+3,если푖%퐻=0,2,иначе. 
Тогда оценка сверху времени T(n) выполнения n операций AddToBufferесть 
푇푛=푐1+푐2+⋯+푐푛<2푛+ 푛3+퐻 퐻 <2푛+3푛+퐻 =5푛+퐻 
푇푛=푂5푛+퐻=푂(푛+퐻)
Амортизационный анализ операции AddToBuffer 
40 
Оценка сверху времени T(n) выполнения n операций AddToBuffer 
푇푛=푂5푛+퐻=푂푛+퐻 
Амортизированная стоимость (сложность) одной операции AddToBuffer 푇푛 푛 = 5푛+퐻 푛 =푂1
Задание 
41 
Прочитать в CLRS 3ed.: 
o17.2 Метод бухгалтерского учета 
o17.3 Метод потенциалов 
КорменТ.Х., ЛейзерсонЧ.И., РивестР.Л., ШтайнК. Алгоритмы: построение и анализ. –3-е изд. –М.: Вильямс, 2013. –1328 с.

More Related Content

What's hot

Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиMikhail Kurnosov
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Alexey Paznikov
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхSergey Vasilyev
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 

What's hot (20)

Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Algo 01 part01
Algo 01 part01Algo 01 part01
Algo 01 part01
 
Основы MATLAB. Численные методы
Основы MATLAB. Численные методыОсновы MATLAB. Численные методы
Основы MATLAB. Численные методы
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 

Viewers also liked

Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Mikhail Kurnosov
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаMikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Mikhail Kurnosov
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиMikhail Kurnosov
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Mikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеMikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовMikhail Kurnosov
 

Viewers also liked (20)

Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимости
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поиска
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачи
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 

Similar to Лекция 1. Амортизационный анализ (Amortized analysis)

чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Technopark
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliaminComputer Science Club
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Лекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийЛекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийsimple_people
 
практика 3
практика 3практика 3
практика 3student_kai
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на PythonCodeFest
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
егэ часть а
егэ часть аегэ часть а
егэ часть аdasha2012
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Mikhail Kurnosov
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Ontico
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДIT_1315
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
 

Similar to Лекция 1. Амортизационный анализ (Amortized analysis) (20)

чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы SciPy
 
Lektsia 9
Lektsia 9Lektsia 9
Lektsia 9
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Лекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийЛекция 1 Скорость роста функций
Лекция 1 Скорость роста функций
 
практика 3
практика 3практика 3
практика 3
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
 
егэ часть а
егэ часть аегэ часть а
егэ часть а
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 

More from Mikhail Kurnosov

Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыMikhail Kurnosov
 

More from Mikhail Kurnosov (18)

Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Лекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицыЛекция 6. Хеш-таблицы
Лекция 6. Хеш-таблицы
 

Лекция 1. Амортизационный анализ (Amortized analysis)

  • 1. Лекция 1Амортизационный анализ(Amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс “Алгоритмы и структуры данных” Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) Осенний семестр, 2014
  • 2. 2 1.Определяем параметрыалгоритма, от которых зависит время его выполнения 2.Выражаем количество операций, выполняемых алгоритмом, как функцию от его параметров (дляхудшего, среднегоили лучшего случаев) 3.Строим асимптотическую оценку вычислительной сложности алгоритма –переходим к асимптотическим обозначениям O,, n,m T(n, m)= 2n2 + 4log2m T(n, m)= O(2n2 + 4log2m) = O(max{n2, log2m}) Анализ вычислительной сложности алгоритмов
  • 3. functionSelectionSort(v[1:n],n) fori=1tondo min=i forj=i+1tondo ifv[j]<v[min]then min=j endif endfor ifmin!=ithen temp=v[i] v[i]=v[min] v[min]=temp endif endfor 3 операции(худший случай –worst case) 5операций 1 операция T(n) = n+ 5n+ 3((n–1) + (n–2) + … + 1) = ? Сумма членов арифметической прогрессии 3 Анализ вычислительной сложности алгоритмов
  • 4. functionSelectionSort(v[1:n],n) fori=1tondo min=i forj=i+1tondo ifv[j]<v[min]then min=j endif endfor ifmin!=ithen temp=v[i] v[i]=v[min] v[min]=temp endif endfor 3 операции(худший случай –worst case) 5операций 1 операция 4 푻풏=ퟔ풏+ ퟑ풏ퟐ−ퟑ풏 ퟐ =푶(풏ퟐ) Анализ вычислительной сложности алгоритмов
  • 5. Бинарный счетчик(Binary Counter) 5 Счетчик имеет длину Lбит (может принимать 2Lзначений) Поддерживает операцию Increment, которая увеличивает его значение на единицу Начальное значение счетчика –0 Пример 5 разрядного счетчика: Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 0 0 0
  • 6. Бинарный счетчик(Binary Counter) 6 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 0 0 1 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 0 1 0 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 0 1 1 Increment: 1 → 2 Increment: 0 → 1 Increment: 2 → 3
  • 7. Бинарный счетчик(Binary Counter) 7 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 1 0 0 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 1 0 1 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 0 1 1 0 Increment: 4 → 5 Increment: 3 → 4 Increment: 5 → 6
  • 8. Бинарный счетчик(Binary Counter) 8 functionIncrement(A) i = 0 whilei < L andA[i] = 1 do A[i] = 0 i = i + 1 end while ifi < L then A[i] = 1 end if end function Разряд 3 2 1 0 Вес 8 4 2 1 Значение 1 1 0 0 При каждом вызове функции Incrementвремя ее работы разное Время работы зависит от внутреннего состояния – значений A
  • 9. Бинарный счетчик(Binary Counter) 9 functionIncrement(A) i = 0 whilei < L andA[i] = 1 do A[i] = 0 i = i + 1 end while ifi < L then A[i] = 1 end if end function При каждом вызове функции Incrementвремя ее работы разное Время работы зависит от внутреннего состояния – значений A Вычислительная сложность функции Increment?
  • 10. Бинарный счетчик(Binary Counter) 10 В худшем случае (worst case) массив Aсостоит только из единиц, для выполнения операции Increment требуется время O(L) Это пессимистическая оценка! При каждом вызове функции Incrementвремя ее работы разное Как анализировать вычислительную сложность алгоритмов время, выполнения которыхзависит от их внутреннего состояния?
  • 11. Амортизационный анализ 11 Амортизационный анализ (Amortized analysis) – метод анализа алгоритмов, позволяющий осуществлять оценку времени выполнения последовательности из nопераций над некоторой структурой данных Время выполнения усредняется по всем nоперациям, и оценивается среднее время выполнения одной операции в худшем случае
  • 12. Амортизационный анализ 12 Некоторые операции структуры данных могут иметь высокую вычислительную сложность, другие низкую Например, некоторая операция может подготавливать структуру данных для быстрого выполнения других операций Такие “тяжелые”операции выполняются редко и могут оказывать незначительное влияние на суммарное время выполнения последовательности из nопераций
  • 13. Амортизационный анализ 13 Амортизационный анализ возник из группового анализа (Aggregate analysis) Введен в практику Робертом Тарьяном(Robert Tarjan) в 1985 году: TarjanR. Amortized Computational Complexity // SIAM. J. on Algebraic and Discrete Methods,6(2), 1985. –P. 306–318.
  • 14. Методы амортизационного анализа 14 Групповой анализ (Aggregate analysis) Метод бухгалтерского учета (Accounting method) Метод потенциалов (Potential method) Все методы позволяют получить однуи ту же оценку, но разными способами
  • 15. Групповой анализ (Aggregate analysis) 15 Групповой анализ (Aggregate analysis)– метод амортизационного анализа, позволяющий оценивать верхнюю границу времени T(n) выполнения последовательности из nопераций в худшем случае Амортизированная стоимость (Amortized cost, учетная стоимость)выполнения одной операции определяется как T(n) / n Амортизированная стоимость операции –это оценка сверху среднего времени выполнения операции в худшем случае
  • 16. Стековые операции (Last In –First Out) 16 Push(S, x) x TPush= O(1) Pop(S) TPop= O(1) MultiPop(S, k) TMultiPop= O(min(|S|, k)) k
  • 17. functionMultiPop(S, k) whileStackEmpty(S) = False andk > 0 do StackPop(S) k = k –1 end while end function Стековые операции (Last In –First Out) 17 TMultiPop= O(min(|S|, k)) 15 4 22 78 34 12 Top → 34 12 Top → → MultiPop(S, 4) → → MultiPop(S, 7) →
  • 18. Групповой анализ стековых операцийv1.0 18 Методом группового анализа оценим верхнюю границу времени T(n) выполнения произвольнойпоследовательности из n стековых операций (Push, Pop, MultiPop) 1.Стоимость операции Pop равна O(1) 2.Стоимость операции Push равнаO(1) 3.Стоимость операции MultiPopв худшем случае O(n), так как в ходе выполнения nопераций в стеке не может находится более nобъектов В худшем случае последовательность из nопераций может содержать только операции MultiPop Тогда, суммарное времяT(n)выполнения nопераций есть O(n2), а амортизированная стоимость одной операции O(n2) / n = O(n) Грубая оценка сверху
  • 19. Групповой анализ стековых операцийv2.0 19 Получим более точную оценку сверху времени T(n) выполнения произвольной последовательности из n стековых операций 1.Количество операций Pop (включая вызовы из MultiPop) не превышает количества операций Push. В свою очередь, число операций Push не превышает n 2.Таким образом для выполнения произвольной последовательности из nопераций Push, Pop, MultiPopтребуется время O(n) Суммарное время выполнения nопераций в худшем случае есть O(n), тогда амортизированная стоимость(средняя стоимость) одной операции O(n) / n = O(1)
  • 20. Групповой анализ стековых операций:вопрос 20 Останется ли справедливой оценка амортизированной стоимости стековых операций, равная О(1), если включить в множество стековых операций операцию MultiPush(S, k), помещающую в стекk элементов? MultiPush(S, k) k TMultiPush= O(k)
  • 21. Групповой анализ стековых операций:ответ 21 Ответ –нет Оценка амортизированной стоимости одной стековой операций станет O(k) В последовательности из nстековых операций может быть nопераций MultiPush, что требует времени O(nk) Тогда амортизированная стоимость(средняя стоимость)одной стековой операции T(n)/ n= O(nk) / n= O(k) MultiPush(S, k) k
  • 22. Бинарный счетчик(Binary Counter) 22 Счетчик имеет длину Lбит (может принимать 2Lзначений) Поддерживает операцию Increment Пример 5 битный счетчик oЗначение счетчика 1, битовая последовательность: 00001 oЗначение счетчика 3, битовая последовательность: 00011 oЗначение счетчика 4, битовая последовательность: 00100 oЗначение счетчика 5, битовая последовательность: 00101 oЗначение счетчика 10, битовая последовательность: 01010 Разряд 4 3 2 1 0 Вес 16 8 4 2 1 Значение 0 1 1 0 0
  • 23. Бинарный счетчик(Binary Counter) 23 functionIncrement(A) i = 0 whilei < L andA[i] = 1 do A[i] = 0 i = i + 1 end while ifi < L then A[i] = 1 end if end function Разряд 3 2 1 0 Вес 8 4 2 1 Значение 1 1 0 0 При каждом вызове функции Incrementвремя ее работы разное Время работы зависит от внутреннего состояния – значений A
  • 24. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость(# операций) Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31
  • 25. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость(# операций) Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31 Какова амортизированная стоимостьвыполненияфункции Increment(среднее время в худшем случае)?
  • 26. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость(# операций) Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31 Оценим сверху время T(n) выполнения nопераций Increment Тогда амортизированная стоимость операции Increment (среднее время выполнения)будет T(n) / n
  • 27. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31 Можно заметить, что время выполненияn операций2n ≥ T(n) n T(n)
  • 28. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31 Можно заметить: Бит 0 изменяется nраз (при каждом вызове Increment) Бит 1: 푛/2раз Бит 2: 푛/4раз … Бит L-1 изменяется 푛/2퐿−1раз 푇푛=푛+ 푛 2+ 푛 4+⋯+ 푛 2퐿−1= =푛+푛=2푛
  • 29. Бинарный счетчик(Binary Counter) Бинарный счетчик (L= 8 бит) Знач. A[7] … A[4] A[3] A[2] A[1] A[0] Стоимость Суммарная стоимость 1 0 … 0 0 0 0 1 1 1 2 0 0 0 0 1 0 2 3 3 0 0 0 0 1 1 1 4 4 0 0 0 1 0 0 3 7 5 0 0 0 1 0 1 1 8 6 0 0 0 1 1 0 2 10 7 0 0 0 1 1 1 1 11 8 0 0 1 0 0 0 4 15 9 0 0 1 0 0 1 1 16 10 0 0 1 0 1 0 2 18 11 0 0 1 0 1 1 1 19 12 0 0 1 1 0 0 3 22 13 0 0 1 1 0 1 1 23 14 0 0 1 1 1 0 2 25 15 0 0 1 1 1 1 1 26 16 0 1 0 0 0 0 5 31 Средняя (амортизированная) стоимость одной операции IncrementO(n) / n= O(1)
  • 30. Динамические таблицы(Dynamic tables) 30 Динамическая таблица (Dynamic table, dynamic array, growablearray)–это массив поддерживающий вставку и удаление элементов и динамически изменяющий свой размер до необходимого значения Поддерживаемые операции oInsert(T, x) oDelete(T, x) oSize –количество свободных ячеек ok–количество элементов добавленных в массив T Size k
  • 31. Динамические таблицы(Dynamic tables) 31 При выполнении операции Insert размер массива увеличивается Как увеличивать размер массива? Аддитивная схема–текущий размер массива увеличивается на kячеек (по арифметической прогрессии) Мультипликативная схема–текущий размер массива увеличивается в kраз (по геометрической прогрессии) Примеры реализации: oС++:std::vector oJava:ArrayList o.NET 2.0:List<> oPython:list
  • 32. Динамические таблицы(Dynamic tables) functionInsert(x) ifSize = 0 then Size = 1 Table = AllocateMemory(1) k = 0 else if k = Size then Size = Size * 2 NewTable= AllocateMemory(Size) fori = 0 tok –1 do NewTable[i] = Table[i] end for FreeMemory(Table) Table = NewTable end if Table[k] = x k = k + 1 end function x1 x2 x3 x5 x4
  • 33. Динамические таблицы(Dynamic tables) 33 Проведем амортизационный анализ времени T(n) выполнения последовательности из nопераций Insert Время работы операции Insert зависит от состояния таблицы –количества kэлементов и её размераSize Будем учитывать только операции записи элементов в таблицу Table[k] = x T Size k
  • 34. Амортизационный анализ операции Insert functionInsert(x) ifSize = 0 then Size = 1 Table = AllocateMemory(1) k = 0 else if k = Size then Size = Size * 2 NewTable= AllocateMemory(Size) fori = 0 tok –1 do NewTable[i] = Table[i] end for FreeMemory(Table) Table = NewTable end if Table[k] = x k = k + 1 end function Первый вызов Insert–1 операция Второй вызов – 2 оп. (Copy1 + Write1) Третий –3 оп. (Copy 2 + Write1) Четвертый –1 оп. Пятый –5оп. (Copy4 + Write1) …
  • 35. Амортизационный анализ операции Insert 35 Обозначим через ci количество операции,выполняемых на i-ом вызове Insert 푐푖= 푖,если푖−1степень2,1,иначе. Тогда оценка сверху времени T(n) выполнения n операций Insert есть 푇푛=푐1+푐2+⋯+푐푛≤푛+20+21+22+⋯+2log2푛 푇(푛)<푛+2푛=3푛
  • 36. 36 Оценка сверху амортизированной сложности одной операции Insert есть 푇퐼푛푠푒푟푡= 푇푛 푛 = 3푛 푛 =3=푶(ퟏ) Среднее время выполнения (вычислительная сложность) одной операции Insertв худшем случае есть O(1) Амортизационный анализ операции Insert
  • 37. functionAddToBuffer(value) Count = Count + 1 Buffer[Count] = value ifCount = H then fori = 1 toH do Packet[i] = Buffer[i] end for Count = 0 end if end function Обработчик с накопителем 37
  • 38. Обработчик с накопителем 38 Построить оценку сверху времени T(n) выполнения nопераций AddToBuffer Оценить амортизированную сложностьфункции AddToBuffer
  • 39. Амортизационный анализ операции AddToBuffer 39 Обозначим через ciколичество операции,выполняемых на i-ом вызове AddToBuffer 푐푖= 퐻+3,если푖%퐻=0,2,иначе. Тогда оценка сверху времени T(n) выполнения n операций AddToBufferесть 푇푛=푐1+푐2+⋯+푐푛<2푛+ 푛3+퐻 퐻 <2푛+3푛+퐻 =5푛+퐻 푇푛=푂5푛+퐻=푂(푛+퐻)
  • 40. Амортизационный анализ операции AddToBuffer 40 Оценка сверху времени T(n) выполнения n операций AddToBuffer 푇푛=푂5푛+퐻=푂푛+퐻 Амортизированная стоимость (сложность) одной операции AddToBuffer 푇푛 푛 = 5푛+퐻 푛 =푂1
  • 41. Задание 41 Прочитать в CLRS 3ed.: o17.2 Метод бухгалтерского учета o17.3 Метод потенциалов КорменТ.Х., ЛейзерсонЧ.И., РивестР.Л., ШтайнК. Алгоритмы: построение и анализ. –3-е изд. –М.: Вильямс, 2013. –1328 с.