slide1 n.
Download
Skip this Video
Download Presentation
Сложность алгоритмов

Loading in 2 Seconds...

play fullscreen
1 / 21

Сложность алгоритмов - PowerPoint PPT Presentation


  • 168 Views
  • Uploaded on

Сложность алгоритмов. Шатилов Максим 271 ПИ. Модель вычислений. 1) a ← b 2) a + b , a * b , a – b , a / b 3) a [ i ], a [ i, j ] 4) a > b, a ≥ b, a ≤ b, a = b 5) and, or, not 6) if ( a > b ) {…} else {…}.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Сложность алгоритмов' - baxter


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Сложность алгоритмов

Шатилов Максим 271ПИ

slide2
Модель вычислений

1) a ← b

2) a + b, a * b, a – b, a / b

3) a [ i ], a [ i, j ]

4) a > b, a ≥ b, a ≤ b, a = b

5) and, or, not

6) if (a > b)

{…}

else

{…}

Модель вычислений - это множество базовых операций, используемыхдля вычисления, а также относительные издержки их применения.

При асимптотической оценке сложности вычислений, модель вычислений определяется через множество базовых операций, для каждой из которых известная ее цена.

slide3
Ресурсные функции

Алгоритм А:

D – вход алгоритма;

|D|= n– длина входа;

fa (D) – трудоемкость, т.е. число базовых операций,

заданных алгоритмом A на входе D;

Va (D) – объем памяти, максимальное число ячеек модели вычислений, задействованных алгоритмом Aна входе D;

Dn = { D | |D| = n};

fa^(n) = max f(D) - худший случай ;

D Є Dn

fav(n) = min f(D) – лучший случай;

D Є Dn

slide5
Комплексный критерий оценки алгоритмов

«хорошо» описывающая алгоритм функция

Аргументами данной функции могут быть

Ресурсные оценки – требования алгоритма к ресурса компьютера

(оперативная память, процессор). Например, требования алгоритмак памяти могут быть представлены в виде:

V(n)=Vio+Vдоп+Vexe+Vстек

где

Vio - память для чтения/записи

Vдоп- память, содержащая переменные алгоритма

Vexe - код программы

Vстек- память, выделенная для стека.

Информационная чувствительность

Размах варьирования - fa^(n) - fav(n) = R(n);

Время выполнения.

slide7
Θ-обозначения

f(n)=Θ(g(n))

Θ(g(n)) = {f(n): существуют положительныеконстанты c1, c2и n0такие что 0≤ c1g(n)≤ f(n) ≤ c2g(n) для всех n≥ n0}

Функция g(n) является асимптотически точной оценкой функции f(n)

slide8
О-обозначения

f(n)= О(g(n))

O(g(n)) = {f(n): существуют положительныеконстанты c1, c2и n0такие что 0≤ c1g(n)≤ f(n) ≤ c2g(n) для всех n≥ n0}

Функция g(n) является асимптотической верхней границей функции f(n)

slide9
О-обозначения

Большую часть функций сложности можно разделить на следующие классы:

• O(1) – сложность типа константы

• O(log(n)) – логарифмическая сложность

• O(n) – линейная сложность

• O(n log(n)) – сложность"n-log-n"

• O(n2) – квадратичная сложность

• O(n3) – кубическая сложность

• O(2n) – экспоненциальная сложность

Функции f(x) и g(x) называются полиномиально-эквивалентнтными, если существуют такие полиномы p(x) и p’(x), что, (начиная с некоторого числа) f(x) p(g(x))и g(x) p’(f(x)).

slide10
Графическое представление I

f5(n) ЄO(n3)

f3(n) ЄO(log(n))

f1(n) ЄO(n)

f6(n) ЄO(2n)

f2(n) ЄO(n2)

f4(n) ЄO(n log(n))

Примечание: на рисунке изображены графики для маленькихn(0<n<10)

slide11
Графическое представление II

f5(n) ЄO(n3)

f3(n) ЄO(log(n))

f1(n) ЄO(n)

f6(n) ЄO(2n)

f2(n) ЄO(n2)

f4(n) ЄO(n log(n))

Примечание: на рисунке изображены графики для средних n(0<n<6000)

slide12
Ω-обозначения

f(n)=Ω(g(n))

Ω(g(n)) = {f(n): существуют положительныеконстанты и n0такие что 0≤ cg(n)≤ f(n) для всех n≥ n0}

Функция g(n) является асимптотической нижней оценкой функцииf(n)

slide13
Пример: поиск максимума

Задача: найти максимум в массиве A длинной n. Найти асимптотическую верхнюю,асимптотическую нижнею и асимптотически точную границы сложности алгоритма.

Решение:

Max(A, n; max)

begin

max ← A[1]

for i ← 2 to n

if max < A[i]

then

max ← A[i]

end

О(g(n)) =fa^(n) = 2 + 1 + (n-1)(3+2+2) = 7n - 4

Ω(g(n)) =fav(n) = 2 + 1 + (n-1)(3+2) = 5n - 2

Θ(g(n)) = Θ(n)

slide14
Пример: сравнение сложностиалгоритмов в нотации O

Задача: найти максимальную сумму непрерывной подпоследовательностиэлементов последовательности A

Пример:

Суммаэлементов

27

43

32

Решение дальше

slide15
Пример: сравнение сложности алгоритмовв нотации O

/ / Алгоритм поиска максимальной суммы подпоследовательности,

/ / имеющий линейную сложность (O(n)).

/ / seqStart – индекс начала подпоследовательности

/ / seqEnd – индекс конца подпоследовательности template <class Comparable>

Comparable maxSubsequenceSum( const vector<Comparable> & a,

int & seqstart, int & seqEnd )

{

int n = a. size ( ) ;

Comparable thissum = 0, maxSum = 0;

for( int i = 0, j = 0; j < n; j++ )

{

thissum += a [ j ] ;

if( thissum > maxSum )

{

maxSum = thissum;

seqstart = i;

seqEnd = j ;

}

else if ( thissum < 0 )

{

i = j + 1 ;

thissum = 0;

}

}

return maxSum;

}

/ / Алгоритм поиска максимальной суммы подпоследовательности,

// имеющий кубическую сложность (O(n3)).

/ / seqStart – индекс начала подпоследовательности

/ / seqEnd – индекс конца подпоследовательности

template <class Comparable>

Comparable maxSubsequenceSum( const vector<Comparable> & a,

int & seqStart, int & seqEnd )

{

int n = a. size ( ) ;

Comparable maxSum = 0;

for( int i = 0; i < n; i++ )

for( int j = i; j < n; j++ )

{

Comparable thissum = 0;

for( int k = i; k<= j; k++)

thissum += a[ k ] ;

if( thissum > maxSum )

{

maxSum = thissum;

seqStart = i;

seqEnd = j ;

}

}

return maxSum;

}

/ / Алгоритм поиска максимальной суммы подпоследовательности,

// имеющий квадратическую сложность (O(n2)).

/ / seqStart – индекс начала подпоследовательности

/ / seqEnd – индекс конца подпоследовательности

template <class Comparable>

Comparable maxSubsequenceSum( const vector<Comparable> & a,

int & seqstart, int & seqEnd )

{

int n = a.size( ) ;

Comparable maxSum = 0;

for( int i = 0; i < n; i++ )

{

Comparable thissum = 0;

for( int j = i; j < n; j++ )

{

thissum += a [ j ] ;

if ( thissum > maxSum )

{

maxSum = thissum;

seqStart = i;

seqEnd = j ;

}

}

}

return maxSum;

}

slide16
Пример: вычисление сложности алгоритма в нотации Θ

/ / Алгоритм поиска максимальной суммы подпоследовательности,

// имеющий квадратическую сложность (O(n2)).

/ / seqStart – индекс начала подпоследовательности

/ / seqEnd – индекс конца подпоследовательности

template <class Comparable>

Comparable maxSubsequenceSum( const vector<Comparable> & a,

int & seqstart, int & seqEnd )

{

int n = a.size( ) ;

Comparable maxSum = 0;

for( int i = 0; i < n; i++ )

{

Comparable thissum = 0;

for( int j = i; j < n; j++ )

{

thissum += a [ j ] ;

if ( thissum > maxSum )

{

maxSum = thissum;

seqStart = i;

seqEnd = j ;

}

}

}

return maxSum;

}

n

ΣΘ(n-i) = Θ((n-i)2)

i=1

Θ(1)

Θ(n-i)

slide17
Переход от сложности алгоритма ко времени его работы

Время работы (в секундах) различных алгоритмов поиска максимальной суммы непрерывной подпоследовательности элементов

заданной последовательностипри входных данных различной длины

slide18
Оценка рекурсивных алгоритмов. Последовательность чисел Фибоначчи

Совокупность равенств такого типаназывается рекуррентностью(возвратное соотношение или рекурсивнаязависимость)

дерево рекурсивных вызововдля вычисления f(6)

int f (int n) {

if (n == 1) {

return 1;

}

if (n == 2) {

return 1;

}

return f(n-2) + f(n-1);

}

slide19
Решение рекуррентных уравнений

При анализе рекурсивных алгоритмов часто возникают рекуррентныеуравнения вида

где

a,bи с– неотрицательные постоянные

n – степень числа с

Решение рекуррентных уравнение такого вида имеет вид

Пример: быстрая сортировка

Разбиение задачи размера n(за линейное время)на две подзадачи

размера n / 2дает алгоритм сложности O(n log n).

slide20
Алгоритм Карацубы

Задача: перемножить два многочлена

Т.е. можно рекурсивно свести данную задачу к трем подзадачам:

Последний член вычисляется на основе решении этих трех подзадач

Задача: найти сложность данного алгоритма