SlideShare a Scribd company logo
1 of 25
CV_RTF: algo posidelky
«Оценка сложности алгоритмов»
Зачем?
Зачем?
Ограниченность ресурсов:
•Время
•Память
Как оценить скорость?
Как оценить скорость?
В MatLAB есть специальный инструмент
Код:
A = ones(500,500);
B = ones(500,500) * 2;
C = zeros(500,500);
tic
C = A .* B;
toc
% ======
tic
for i = 1 : 500
for j = 1 : 500
C(i,j) = A(i, j) * B(i, j);
end
end
toc
Как оценить скорость?
В MatLAB есть специальный инструмент
Вывод:
Elapsed time is 0.000822 seconds.
Elapsed time is 0.008758 seconds.
Как оценить скорость?
В С++ можно написать костыль!
#include <ctime>
…
clock_t time = clock();
// algorithm
double delta = (double)(clock() – time);
delta /= CLOCKS_PER_SEC;
cout << “Time is ” << delta << endl;
…
Как оценить скорость?
В общем случае вы за[fail]итесь, потому что:
•Входные данные разные
•Реализация железа разная
Компания Reca выпускает мониторы, большой популярностью пользуется их модель
AB999 с размерами экрана a × b сантиметров. Из-за особенностей
производства, размеры экрана выражаются целым числом сантиметров. Недавно в
моду вошло соотношение сторон x: y. Компания хочет уменьшить размеры экрана
своего монитора AB999 так, чтобы его соотношение сторон стало x: y, но при этом его
площадь была максимально возможной. Ваша задача — определить размеры экрана
уменьшенной модели, или выяснить, что это сделать невозможно.

В первой строке входных данных содержатся 4 целых числа — a, b, x и y
(1≤a,b,x,y≤2·109).
http://codeforces.ru/problemset/problem/16/C
Как оценить скорость?
В общем случае вы за[fail]итесь, потому что:
•Входные данные разные
•Реализация железа разная
Реализация алгоритма Евклида на Python:
def gcd(a,b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
print(a)
Как оценить скорость?
В общем случае вы за[fail]итесь, потому что:
•Входные данные разные
•Реализация железа разная
Скорость выполнения определённой инструкции
Разрядность архитектуры
Векторное ускорение вычислений
И т.д. и т.п.
Как оценить скорость?
Более математически: О-нотация
O(g) - множество функций f, для которых существуют
такие константы C и N, что |f(x)| ≤ C|g(x)| для всех x > N.
Запись f = O(g) дословно обозначает, что f принадлежит множеству O(g). При
этом обратное выражение O(g) = f не имеет смысла.
По сути, наша задача: описать поведение функции в зависимости от
параметра.
Как оценить скорость?
Рассмотрим алгоритм вычисления значения
многочлена степени n в заданной точке x.
Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0
Как оценить скорость?
Рассмотрим алгоритм вычисления значения
многочлена степени n в заданной точке x.
Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0
Вычисление i-го слагаемого (i=1..n) требует i
умножений. Значит, всего
1 + 2 + 3 + ... + n = …
Как оценить скорость?
Рассмотрим алгоритм вычисления значения
многочлена степени n в заданной точке x.
Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0
Вычисление i-го слагаемого (i=1..n) требует i
умножений. Значит, всего
1 + 2 + 3 + ... + n = n(n+1)/2
Кроме того, требуется n+1 сложение.
Как оценить скорость?
Рассмотрим алгоритм вычисления значения
многочлена степени n в заданной точке x.
Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0
Вычисление i-го слагаемого (i=1..n) требует i
умножений. Значит, всего
1 + 2 + 3 + ... + n = n(n+1)/2
Кроме того, требуется n+1 сложение. Всего
n(n+1)/2 + n + 1= n2/2 + 3n/2 + 1
операций.
Как оценить скорость?
Каково поведение функции?
f(n)= n2/2 + 3n/2 + 1
Как оценить скорость?
Каково поведение функции?
f(n)= n2/2 + 3n/2 + 1
Поведение: O(n2) “Большое О от эн квадрат”

Это верхняя оценка, т.е количество операций (а значит, и
время работы) растет не быстрее, чем квадрат количества
элементов. Чтобы почувствовать, что это
такое, посмотрите на таблицу, где приведены
числа, иллюстрирующие скорость роста для нескольких
разных функций.
Как оценить скорость?
n

log n

n * log n

n^2

1

0

0

1

16

4

64

256

256

8

2048

65536

4096

12

49152

16777216

65536

16

1048565

4294967296

1048576

20

20969520

1,0993E+12

16775616

24

402614784

2,81421E+14
Как оценить скорость?
n

log n

n * log n

n^2

1

0

0

1

16

4

64

256

256

8

2048

65536

4096

12

49152

16777216

65536

16

1048565

4294967296

1048576

20

20969520

1,0993E+12

16775616

24

402614784

2,81421E+14

Пусть операция длится 3 нс = 3*10-9 с, тогда для n =224
t = (2.81 * 1014) * (3 * 10-9) = 3 * 2.81 * 105 c ~ 10 дней
Как оценить скорость?
Правила
•При оценке за функцию берется количество
операций, возрастающее быстрее всего.
•При оценке O() константы не учитываются.
Пример хитрожопости:
Геометрическое размытие
~28 Mpx (4800 x 6000 px)
O(?)
Пример хитрожопости:
Геометрическое размытие
~28 Mpx (4800 x 6000 px)
Сложность О(N2 D2)
Пример хитрожопости:
Геометрическое размытие
Пример хитрожопости:
Геометрическое размытие

Прямой метод: 457 сек

Прибл. метод: 31 сек

Прибл. метод: 3 сек
Есть ещё L-нотация
http://ru.wikipedia.org/wiki/L-нотация
L-нотация — это асимптотическая
нотация, аналогичная О-нотации, записывается как
Ln[a,c] для n стремящимся к бесконечности. Подобно
O-большому, нотация обычно используется для грубой
оценки вычислительной сложности определенного
алгоритма.

More Related Content

What's hot

Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простомуNikolay Grebenshikov
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмовAndrey Dolinin
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировкиkogoga
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Platonov Sergey
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Nikolay Grebenshikov
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Alexander Granin
 
20071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture0720071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture07Computer Science Club
 

What's hot (20)

Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
ФИЛП
ФИЛПФИЛП
ФИЛП
 
C++0x
C++0xC++0x
C++0x
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
олимпиада2011
олимпиада2011олимпиада2011
олимпиада2011
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
20071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture0720071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture07
 

Similar to Algo 01 part01

чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...2berkas
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Fwdays
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование цикловstudent_kai
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на PythonCodeFest
 
Лекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийЛекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийsimple_people
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JSFestUA
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятиеluis_blanco_rau
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 

Similar to Algo 01 part01 (20)

чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...
Презентация на тему: Методика подготовки учащихся к итоговой аттестации по ин...
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
лекция 3. программирование циклов
лекция 3. программирование цикловлекция 3. программирование циклов
лекция 3. программирование циклов
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Лекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийЛекция 1 Скорость роста функций
Лекция 1 Скорость роста функций
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
 
Python
PythonPython
Python
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
OpenACC short review
OpenACC short reviewOpenACC short review
OpenACC short review
 

Algo 01 part01

  • 1. CV_RTF: algo posidelky «Оценка сложности алгоритмов»
  • 5. Как оценить скорость? В MatLAB есть специальный инструмент Код: A = ones(500,500); B = ones(500,500) * 2; C = zeros(500,500); tic C = A .* B; toc % ====== tic for i = 1 : 500 for j = 1 : 500 C(i,j) = A(i, j) * B(i, j); end end toc
  • 6. Как оценить скорость? В MatLAB есть специальный инструмент Вывод: Elapsed time is 0.000822 seconds. Elapsed time is 0.008758 seconds.
  • 7. Как оценить скорость? В С++ можно написать костыль! #include <ctime> … clock_t time = clock(); // algorithm double delta = (double)(clock() – time); delta /= CLOCKS_PER_SEC; cout << “Time is ” << delta << endl; …
  • 8. Как оценить скорость? В общем случае вы за[fail]итесь, потому что: •Входные данные разные •Реализация железа разная Компания Reca выпускает мониторы, большой популярностью пользуется их модель AB999 с размерами экрана a × b сантиметров. Из-за особенностей производства, размеры экрана выражаются целым числом сантиметров. Недавно в моду вошло соотношение сторон x: y. Компания хочет уменьшить размеры экрана своего монитора AB999 так, чтобы его соотношение сторон стало x: y, но при этом его площадь была максимально возможной. Ваша задача — определить размеры экрана уменьшенной модели, или выяснить, что это сделать невозможно. В первой строке входных данных содержатся 4 целых числа — a, b, x и y (1≤a,b,x,y≤2·109). http://codeforces.ru/problemset/problem/16/C
  • 9. Как оценить скорость? В общем случае вы за[fail]итесь, потому что: •Входные данные разные •Реализация железа разная Реализация алгоритма Евклида на Python: def gcd(a,b): while a != b: if a > b: a = a - b else: b = b - a print(a)
  • 10. Как оценить скорость? В общем случае вы за[fail]итесь, потому что: •Входные данные разные •Реализация железа разная Скорость выполнения определённой инструкции Разрядность архитектуры Векторное ускорение вычислений И т.д. и т.п.
  • 11. Как оценить скорость? Более математически: О-нотация O(g) - множество функций f, для которых существуют такие константы C и N, что |f(x)| ≤ C|g(x)| для всех x > N. Запись f = O(g) дословно обозначает, что f принадлежит множеству O(g). При этом обратное выражение O(g) = f не имеет смысла. По сути, наша задача: описать поведение функции в зависимости от параметра.
  • 12. Как оценить скорость? Рассмотрим алгоритм вычисления значения многочлена степени n в заданной точке x. Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0
  • 13. Как оценить скорость? Рассмотрим алгоритм вычисления значения многочлена степени n в заданной точке x. Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0 Вычисление i-го слагаемого (i=1..n) требует i умножений. Значит, всего 1 + 2 + 3 + ... + n = …
  • 14. Как оценить скорость? Рассмотрим алгоритм вычисления значения многочлена степени n в заданной точке x. Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0 Вычисление i-го слагаемого (i=1..n) требует i умножений. Значит, всего 1 + 2 + 3 + ... + n = n(n+1)/2 Кроме того, требуется n+1 сложение.
  • 15. Как оценить скорость? Рассмотрим алгоритм вычисления значения многочлена степени n в заданной точке x. Pn(x) = anxn + an-1xn-1 + ... + aixi + ... + a1x + a0 Вычисление i-го слагаемого (i=1..n) требует i умножений. Значит, всего 1 + 2 + 3 + ... + n = n(n+1)/2 Кроме того, требуется n+1 сложение. Всего n(n+1)/2 + n + 1= n2/2 + 3n/2 + 1 операций.
  • 16. Как оценить скорость? Каково поведение функции? f(n)= n2/2 + 3n/2 + 1
  • 17. Как оценить скорость? Каково поведение функции? f(n)= n2/2 + 3n/2 + 1 Поведение: O(n2) “Большое О от эн квадрат” Это верхняя оценка, т.е количество операций (а значит, и время работы) растет не быстрее, чем квадрат количества элементов. Чтобы почувствовать, что это такое, посмотрите на таблицу, где приведены числа, иллюстрирующие скорость роста для нескольких разных функций.
  • 18. Как оценить скорость? n log n n * log n n^2 1 0 0 1 16 4 64 256 256 8 2048 65536 4096 12 49152 16777216 65536 16 1048565 4294967296 1048576 20 20969520 1,0993E+12 16775616 24 402614784 2,81421E+14
  • 19. Как оценить скорость? n log n n * log n n^2 1 0 0 1 16 4 64 256 256 8 2048 65536 4096 12 49152 16777216 65536 16 1048565 4294967296 1048576 20 20969520 1,0993E+12 16775616 24 402614784 2,81421E+14 Пусть операция длится 3 нс = 3*10-9 с, тогда для n =224 t = (2.81 * 1014) * (3 * 10-9) = 3 * 2.81 * 105 c ~ 10 дней
  • 20. Как оценить скорость? Правила •При оценке за функцию берется количество операций, возрастающее быстрее всего. •При оценке O() константы не учитываются.
  • 24. Пример хитрожопости: Геометрическое размытие Прямой метод: 457 сек Прибл. метод: 31 сек Прибл. метод: 3 сек
  • 25. Есть ещё L-нотация http://ru.wikipedia.org/wiki/L-нотация L-нотация — это асимптотическая нотация, аналогичная О-нотации, записывается как Ln[a,c] для n стремящимся к бесконечности. Подобно O-большому, нотация обычно используется для грубой оценки вычислительной сложности определенного алгоритма.