(amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич...
Transcript of (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич...
![Page 1: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/1.jpg)
Лекция 1Амортизационный анализ(amortized analysis)
Курносов Михаил Георгиевич
E-mail: [email protected]: www.mkurnosov.net
Курс «Структуры и алгоритмы обработки данных»Сибирский государственный университет телекоммуникаций и информатики (Новосибирск)Осенний семестр, 2015
![Page 2: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/2.jpg)
22
1. Определяем параметры алгоритма,
от которых зависит время его
выполнения
2. Выражаем количество операций,
выполняемых алгоритмом,
как функцию от его параметров
(для худшего, среднего или лучшего
случаев)
3. Строим асимптотическую оценку
вычислительной сложности
алгоритма – переходим к
асимптотическим обозначениям:
O, ,
n, m
T(n, m) = 2n2 + 4log2m
T(n, m) = O(2n2 + 4log2m) = O(max{n2, log2m})
Анализ вычислительной сложности алгоритмов
![Page 3: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/3.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
3
Анализ сортировки выбором(худший случай)
![Page 4: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/4.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
4
Анализ сортировки выбором(худший случай)
1 операция
![Page 5: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/5.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
5
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
![Page 6: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/6.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
6
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
![Page 7: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/7.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
7
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
i = 1, j = 2 to n, n – 1 итер.i = 2, j = 3 to n, n – 2 итер.i = 3, j = 4 to n, n – 3 итер.…i = n – 1, j = n to n, 1 итер.
![Page 8: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/8.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
8
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
T(n) = (n – 1) + 4 (n – 1) + 2((n – 1) + (n – 2) + … + 1) = ?
![Page 9: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/9.jpg)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
9
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
T(n) = (n – 1) + 4 (n – 1) + 2((n – 1) + (n – 2) + … + 1) = ?
Сумма членов арифметической прогрессии
![Page 10: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/10.jpg)
T(n) = 5n – 5 + 2((n2 – n) / 2) = n2 + 4n – 5
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
10
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
![Page 11: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/11.jpg)
T(n) = n2 + 4n – 5 = O(n2)
function SelectionSort(v[1..n])
for i = 1 to n - 1 do
min = i
for j = i + 1 to n do
if v[j] < v[min] then
min = j
end if
end for
if min != i then
temp = v[i]
v[i] = v[min]
v[min] = temp
end if
end for
end function
11
Анализ сортировки выбором(худший случай)
1 операция
2 операции(худший случай – worst case)
4 операции
![Page 12: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/12.jpg)
Бинарный счетчик (binary counter)
1212
Счетчик имеет длину L бит (может принимать 2L значений)
Поддерживает операцию Increment, которая увеличивает
его значение на единицу
Начальное значение счетчика – 0
Пример 5 разрядного счетчика:
Разряд 4 3 2 1 0
Вес 16 8 4 2 1
Значение 0 0 0 0 0
![Page 13: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/13.jpg)
Бинарный счетчик (binary counter)
1313
Разряд 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
![Page 14: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/14.jpg)
Бинарный счетчик (binary counter)
1414
Разряд 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
![Page 15: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/15.jpg)
Бинарный счетчик (binary counter)
15
function Increment(A)
i = 0
while i < L and A[i] = 1 do
A[i] = 0
i = i + 1
end while
if i < L then
A[i] = 1
end if
end function
15
Разряд 3 2 1 0
Вес 8 4 2 1
Значение 1 0 1 1
Заменяем начальную последовательность
единиц нулями (перенос в старший
разряд)
= 1110
![Page 16: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/16.jpg)
Бинарный счетчик (binary counter)
16
function Increment(A)
i = 0
while i < L and A[i] = 1 do
A[i] = 0
i = i + 1
end while
if i < L then
A[i] = 1
end if
end function
16
Разряд 3 2 1 0
Вес 8 4 2 1
Значение 1 0 1 1 = 1110
При каждом вызове функции Incrementвремя ее работы разное
Время зависит от внутреннего состояния – значений A[1..L]
![Page 17: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/17.jpg)
Бинарный счетчик (binary counter)
17
function Increment(A)
i = 0
while i < L and A[i] = 1 do
A[i] = 0
i = i + 1
end while
if i < L then
A[i] = 1
end if
end function
17
При каждом вызове функции Incrementвремя ее работы разное
Время зависит от внутреннего состояния – значений A[1..L]
Вычислительная сложность функции Increment?
![Page 18: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/18.jpg)
Бинарный счетчик (binary counter)
18
В худшем случае массив A[1..L] состоит только из единиц,
для выполнения операции Increment требуется время O(L)
Это пессимистическая оценка!
При каждом вызове функции Increment время ее работы
разное
18
Как анализировать вычислительную сложность алгоритмов
время, выполнения которых зависит
от их внутреннего состояния?
![Page 19: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/19.jpg)
Амортизационный анализ
19
Амортизационный анализ (amortized analysis) –метод анализа алгоритмов, позволяющий осуществлять оценку времени выполнения последовательности из nопераций над некоторой структурой данных
Время выполнения усредняется по всем n операциям, и оценивается среднее время выполнения одной операции в худшем случае
19
![Page 20: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/20.jpg)
Амортизационный анализ
20
Некоторые операции структуры данных могут иметь высокую вычислительную сложность, другие низкую
Например, некоторая операция может подготавливать структуру данных для быстрого выполнения других операций
Такие «тяжелые» операции выполняются редко и могут оказывать незначительное влияние на суммарное время выполнения последовательности из n операций
20
![Page 21: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/21.jpg)
Амортизационный анализ
21
Амортизационный анализ возник из группового анализа (aggregate analysis)
Введен в практику Робертом Тарьяном (Robert Tarjan)в 1985 году:
Tarjan R. Amortized Computational Complexity // SIAM. J. on Algebraic and Discrete Methods, 6(2), 1985.
– P. 306–318.
21
![Page 22: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/22.jpg)
Методы амортизационного анализа
22
Групповой анализ (aggregate analysis)
Метод бухгалтерского учета (accounting method)
Метод потенциалов (potential method)
Все методы позволяют получить одну и ту же
оценку, но разными способами
[CLRS ed., С. 487]
22
![Page 23: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/23.jpg)
Групповой анализ (аggregate analysis)
23
Групповой анализ (aggregate analysis) –метод амортизационного анализа, позволяющий оценивать верхнюю границу времени T(n) выполнения последовательности из n операций в худшем случае
Амортизированная стоимость (amortized cost, учетная стоимость) выполнения одной операции определяется как
T(n) / n
Амортизированная стоимость операции – это оценка сверху среднего времени выполнения операции в худшем случае
23
![Page 24: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/24.jpg)
Стековые операции (Last In – First Out)
2424
Push(S, x)
x
TPush = O(1)
Pop(S)
TPop = O(1)
MultiPop(S, k)
TMultiPop = O(min(|S|, k))
k
![Page 25: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/25.jpg)
function MultiPop(S, k)
while StackEmpty(S) = False and k > 0 do
StackPop(S)
k = k – 1
end while
end function
Стековые операции (Last In – First Out)
25
TMultiPop = O(min(|S|, k))15
4
22
78
34
12
Top →
34
12
Top →
→ MultiPop(S, 4) → → MultiPop(S, 7) →
![Page 26: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/26.jpg)
Групповой анализ стековых операций v1.0
26
Методом группового анализа оценим верхнюю границу времени 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)
26Грубая оценка сверху
![Page 27: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/27.jpg)
Групповой анализ стековых операций v2.0
27
Получим более точную оценку сверху времени T(n) выполнения произвольной последовательности из n стековых операций
1. Количество операций Pop (включая вызовы из MultiPop) не превышает количества операций Push. В свою очередь, число операций Push не превышает n (операция MultiPopреализована на базе Pop)
2. Таким образом для выполнения произвольной последовательности из n операций Push, Pop, MultiPopтребуется время O(n)
Суммарное время выполнения n операций в худшем случае есть O(n), тогда амортизированная стоимость (средняя стоимость)одной операции над стеком есть
O(n) / n = O(1)27
![Page 28: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/28.jpg)
Групповой анализ стековых операций: вопрос
28
Останется ли справедливой оценка амортизированной стоимости стековых операций, равная О(1), если включить в множество стековых операций операцию MultiPush(S, k), помещающую в стек k элементов?
28
MultiPush(S, k)
k
TMultiPush = O(k)
![Page 29: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/29.jpg)
Групповой анализ стековых операций: ответ
29
Ответ – нет
Оценка амортизированной стоимости одной
стековой операций станет O(k)
В последовательности из n стековых
операций может быть n операций
MultiPush, что требует времени O(nk)
Тогда амортизированная стоимость
(средняя стоимость) одной стековой
операции T(n) / n = O(nk) / n = O(k) 29
MultiPush(S, k)
k
![Page 30: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/30.jpg)
Бинарный счетчик (binary counter)
3030
Счетчик имеет длину 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
![Page 31: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/31.jpg)
function Increment(A)
i = 0
while i < L and A[i] = 1 do
A[i] = 0
i = i + 1
end while
if i < L then
A[i] = 1
end if
end function
Бинарный счетчик (binary counter)
3131
При каждом вызове функции Increment время ее работы разное
Время работы зависит от внутреннего состояния –значений A
Разряд 3 2 1 0
Вес 8 4 2 1
Значение 1 0 1 1
![Page 32: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/32.jpg)
Бинарный счетчик (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
![Page 33: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/33.jpg)
Бинарный счетчик (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 (среднее время в худшем случае)?
![Page 34: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/34.jpg)
Бинарный счетчик (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
![Page 35: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/35.jpg)
Бинарный счетчик (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)
![Page 36: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/36.jpg)
Бинарный счетчик (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𝑛
![Page 37: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/37.jpg)
Бинарный счетчик (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
O(n) / n = O(1)
![Page 38: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/38.jpg)
Динамические таблицы (dynamic tables)
3838
Динамическая таблица (Dynamic table, dynamic array,
growable array) – это массив поддерживающий вставку
и удаление элементов и динамически изменяющий
свой размер до необходимого значения
Поддерживаемые операции
o Insert(T, x)
o Delete(T, x)
o Size – количество свободных ячеек
o k – количество элементов
добавленных в массив
Size
k
![Page 39: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/39.jpg)
Динамические таблицы (dynamic tables)
39
При выполнении операции Insert размер массива увеличивается
Как увеличивать размер массива?
Аддитивная схема – текущий размер массива увеличивается
на k ячеек (по арифметической прогрессии)
Мультипликативная схема – текущий размер массива
увеличивается в k раз (по геометрической прогрессии)
Примеры реализации:
o С++: std::vector
o Java: ArrayList
o .NET 2.0: List<>
o Python: list
![Page 40: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/40.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
![Page 41: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/41.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
![Page 42: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/42.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
![Page 43: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/43.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
x3
![Page 44: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/44.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
x3
x4
![Page 45: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/45.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
x3
x5
x4
![Page 46: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/46.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
x3
x6
x5
x4
![Page 47: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/47.jpg)
Динамические таблицы (dynamic tables)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
x1
x2
x3
x7
x6
x5
x4
![Page 48: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/48.jpg)
Динамические таблицы (dynamic tables)
4848
Проведем амортизационный анализ времени T(n)
выполнения последовательности из n операций Insert
Время работы операции Insert зависит
от состояния таблицы: количества k
элементов и её размера Size
Будем учитывать только операции
записи элементов в таблицу
Table[k] = x
Size
k
![Page 49: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/49.jpg)
function Insert(x)if Size = 0 then
Size = 1Table = AllocateMemory(1)k = 0
else if k = Size thenSize = Size * 2NewTable = AllocateMemory(Size)for i = 0 to k – 1 do
NewTable[i] = Table[i]end forFreeMemory(Table)Table = NewTable
end if Table[k] = xk = k + 1
end function
Амортизационный анализ операции Insert
Первый вызов Insert – 1 операция
Второй вызов –2 оп. (Copy 1 + Write 1)
Третий – 3 оп. (Copy 2 + Write 1)
Четвертый – 1 оп.
Пятый – 5 оп. (Copy 4 + Write 1)
…
![Page 50: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/50.jpg)
Амортизационный анализ операции Insert
5050
Обозначим через ci количество операции, выполняемых
на i-ом вызове Insert
𝑐𝑖 = 𝑖, если 𝑖 − 1 степень 2,1, иначе.
Тогда оценка сверху времени T(n) выполнения
n операций Insert есть
𝑇 𝑛 = 𝑐1 + 𝑐2 +⋯+ 𝑐𝑛 ≤ 𝑛 + 20 + 21 + 22 +⋯+ 2 log2 𝑛
𝑇(𝑛) < 𝑛 + 2𝑛 = 3𝑛
![Page 51: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/51.jpg)
5151
Оценка сверху амортизированной сложности одной
операции Insert есть
𝑇𝐼𝑛𝑠𝑒𝑟𝑡 =𝑇 𝑛
𝑛=
3𝑛
𝑛= 3 = 𝑶(𝟏)
Среднее время выполнения (вычислительная сложность)
одной операции Insert в худшем случае есть O(1)
Амортизационный анализ операции Insert
![Page 52: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/52.jpg)
function AddToBuffer(value)Count = Count + 1Buffer[Count] = valueif Count = H then
for i = 1 to H doPacket[i] = Buffer[i]
end forCount = 0
end if end function
Обработчик с накопителем
5252
![Page 53: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/53.jpg)
Обработчик с накопителем
5353
Построить оценку сверху времени T(n)
выполнения n операций AddToBuffer
Оценить амортизированную сложность
функции AddToBuffer
![Page 54: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/54.jpg)
Амортизационный анализ операции AddToBuffer
5454
Обозначим через ci количество операции, выполняемых
на i-ом вызове AddToBuffer
𝑐𝑖 = 𝐻 + 3, если 𝑖 % 𝐻 = 0,
2, иначе.
Тогда оценка сверху времени T(n) выполнения n
операций AddToBuffer есть
𝑇 𝑛 = 𝑐1 + 𝑐2 +⋯+ 𝑐𝑛 < 2𝑛 +𝑛 3 + 𝐻
𝐻< 2𝑛 + 3𝑛 + 𝐻
= 5𝑛 + 𝐻
𝑇 𝑛 = 𝑂 5𝑛 + 𝐻 = 𝑂(𝑛 + 𝐻)
![Page 55: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/55.jpg)
Амортизационный анализ операции AddToBuffer
5555
Оценка сверху времени T(n) выполнения n операций
AddToBuffer
𝑇 𝑛 = 𝑂 5𝑛 + 𝐻 = 𝑂 𝑛 + 𝐻
Амортизированная стоимость (сложность) одной
операции AddToBuffer
𝑇 𝑛
𝑛=
5𝑛 +𝐻
𝑛= 𝑂 1
![Page 56: (amortized analysis) · (amortized analysis) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: Курс «Структуры и алгоритмы](https://reader030.fdocuments.net/reader030/viewer/2022040307/5ed29b41f59de973d0439efc/html5/thumbnails/56.jpg)
Задание
56
Прочитать в [CLRS 3ed., С. 487]:
o 17.2 Метод бухгалтерского учета
o 17.3 Метод потенциалов
Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ.
– 3-е изд. – М.: Вильямс, 2013. – 1328 с.