SlideShare a Scribd company logo
LOGO
Понятие эффективности
программ
Временная и объемная сложность
Пути повышения эффективности
программ
Лекция №9
LOGO
Номер строки Профиль Аналитический
профиль
Программа
1 Program Account;
2 {Расчет стоимости заказа товаров почтой}
3
4 Const
5 Lowpostage=5; {низкий почтовый сбор}
6 Highpostage=10; {высокий почтовый сбор}
7 Var
8 items, number : integer;
9 price, totalcost : real;
10
11 1 1 Begin
12 1 1 readln (items);
13 1 1 totalcost := 0;
Пример построения профиля и аналитического профиля
программы
LOGO
Номер строки Профиль Аналитический
профиль
Программа
14 4 1+N while items>0 do
15 3 N begin
16 3 N items :=items – 1;
17 3 N readln (number, price);
18 3 N totalcost := totalcost + number*price
19 3 N end;
20 1 1 if totalcost < 100
21 0 0 then totalcost := totalcost + lowpostage
22 1 1 else totalcost := totalcost + highpostage;
23 1 1 writeln (totalcost)
24 1 1 End.
(продолжение)
Пример построения профиля и аналитического профиля
программы
LOGO
Номер строки Аналитический
профиль
Время однократного
выполнения (усл. ед.)
Общее время
выполнения каждой
строки
11 1 0 0
12 1 5 5
13 1 2 2
14 1+N 2 2+2N
15 N 0 0
16 N 2 2N
17 N 10 10N
18 N 2 2N
19 N 0 0
20 1 2 2
21 0 2 0
22 1 2 2
23 1 12 12
24 1 0
Общее время исполнения программы 25+16N
Результаты расчётов
LOGOАнализ временной сложности программ
t = 𝑎 + 𝑏𝑁 + 𝑐𝑁2
t = 𝑎 + 𝑏𝑁
t = 𝑎
LOGOАнализ объемной сложности программы
Алгоритм:
 записывается схема вызовов программы;
 каждой строке схемы вызовов сопоставляются возникающие
параметры, глобальные и локальные переменные и объем памяти для
каждой из них;
 на основании полученной информации определяется такое место (или
места) в программе, в котором параметры и переменные занимают
наибольшую память.
LOGO
Схема вызова Новая память данных Всего используется
Calculator a(6 ед.), b(6 ед.),
Rezult(6 ед.), N(1 ед.)
19
Input Не требуется 19
Operation Flag(1 ед.),
Action(4 ед.)
24
Calculator Не требуется 19
Add Не требуется 19
Результаты, полученные при вычислении объемной
сложности
Анализ временной сложности программ
LOGO
Function GSD (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b}
Begin {a>0 and b>0}
While a <> b do
If a>b
then a := a – b
else b := b – a;
{ a = b }
GSD := a
End;
Function GSD_ (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b с
помощью алгоритма Евклида}
Var
r : integer;
Begin { a>0 and b>0 }
Repeat
r := a mod b;
a := b;
b := r
Until b = 0;
GSD_ := a
End;
Способы повышения эффективности программ
LOGOТочное число операций
Операция Первая функция Вторая функция
Присваивание 500000 4
Сложение 499999 0
Умножение 0 1
Сравнение 999999 1
LOGO
Упрощение условного выражения, управляющего
циклами.
Вариант 1
x := 0; successful := true;
While (x<>max) and successful do
Begin
x := x + 1;
Calc (x, k, xp, successful);
If successful
then writeln (x:20, xp:15)
End;
Вариант 2
x := 0;
While x<>max do
Begin
x := x + 1;
Calc (x, k, xp, successful);
If successful
then writeln (x:20, xp:15)
else x := max
End;
LOGO
Вариант 1
If odd (n)
then low := 3
else low := 2;
high := n div low;
If odd (n)
then step := 2
else step := 1;
Вариант 2
If odd (n)
then begin
low := 3; step := 2
end
else begin
low := 2; step := 1
end;
Комбинирование операторов с целью совместного использования
всеми частями программы фрагментов, содержащих
LOGOЭффективность вычислений
...
!7!5!3
)sin(
753

xxx
xx
Sk = t0 + t1 + t2 + …
+ tk.
xt 0
!3
3
1
x
t 
!5
5
2
x
t 
!7
7
3
x
t 
0
3
1
3*2
t
x
t  1
5
2
5*4
t
x
t  2
7
3
7*6
t
x
t 
1
2
)12(2


 kk t
kk
x
t
xt 0 1
2
)12(2


 kk t
kk
x
t для k > 0,
00
tS  kkk tSS  1
для k > 0,
LOGO
Function Sine (x : real) : real;
Const
eps = 0.00001; {точность вычислений}
Var
k : integer;
term, sum : real;
Begin { 0.0 <= x <=  }
k := 0; term := x; sum := term;
While abs (term) > eps do
begin
k := k + 1;
term := -term * sqr (x) / (2*k*(2*k+1));
sum := sum +term
end;
Sine : = sum
End;
LOGO
Function Sine (x : real) : real;
Const
eps = 0.00001; {точность вычислений}
Var
i : integer;
pi_x, sqrX, term, sum : real;
Begin { 0.0 <= x <=  }
pi_x := pi – x;
If pi_x < x then x := pi_x;
i := 0; term := x; sum := term; sqrX : = sqr(X);
While abs (term) > eps do
begin
i := i + 2;
term := -term * sqr (x) / (i*(i+1));
sum := sum +term
end;
Sine := sum
End;

More Related Content

What's hot

Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
Andrey Dolinin
 
Использование алгоритмов для решения задач
Использование алгоритмов для решения задачИспользование алгоритмов для решения задач
Использование алгоритмов для решения задачalklimchuk
 
использование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачиспользование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачДарья Димитрова
 
Презентация на тему: Программирование ветвлений на QBasic
Презентация на тему: Программирование ветвлений на QBasicПрезентация на тему: Программирование ветвлений на QBasic
Презентация на тему: Программирование ветвлений на QBasic2berkas
 
Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
Platonov Sergey
 
использование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачиспользование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачweidar
 
Защита информации семинар №8
Защита информации семинар №8Защита информации семинар №8
Защита информации семинар №8
Alexander Kolybelnikov
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power pointP_Arthur
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power pointTSA112
 
8 3-5
8 3-58 3-5
Prezentatsia
Prezentatsia Prezentatsia
Prezentatsia weidar
 
8 3-3
8 3-38 3-3
8 3-4
8 3-48 3-4
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Alexander Borzunov
 
Ispolzovanie lineynykh algoritmov_dlya_reshenia_z
Ispolzovanie lineynykh algoritmov_dlya_reshenia_zIspolzovanie lineynykh algoritmov_dlya_reshenia_z
Ispolzovanie lineynykh algoritmov_dlya_reshenia_zKhristina Doroshko
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
DEVTYPE
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
DEVTYPE
 

What's hot (20)

Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
Использование алгоритмов для решения задач
Использование алгоритмов для решения задачИспользование алгоритмов для решения задач
Использование алгоритмов для решения задач
 
использование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачиспользование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задач
 
Презентация на тему: Программирование ветвлений на QBasic
Презентация на тему: Программирование ветвлений на QBasicПрезентация на тему: Программирование ветвлений на QBasic
Презентация на тему: Программирование ветвлений на QBasic
 
Prezentatsia1
Prezentatsia1Prezentatsia1
Prezentatsia1
 
Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
 
использование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задачиспользование линейных алгоритмов для решения задач
использование линейных алгоритмов для решения задач
 
Защита информации семинар №8
Защита информации семинар №8Защита информации семинар №8
Защита информации семинар №8
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power point
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power point
 
8 3-5
8 3-58 3-5
8 3-5
 
Nakhodzhenie ploschadi s_ispolzovaniem_lineynykh_al
Nakhodzhenie ploschadi s_ispolzovaniem_lineynykh_alNakhodzhenie ploschadi s_ispolzovaniem_lineynykh_al
Nakhodzhenie ploschadi s_ispolzovaniem_lineynykh_al
 
Prezentatsia
Prezentatsia Prezentatsia
Prezentatsia
 
8 3-3
8 3-38 3-3
8 3-3
 
8 3-4
8 3-48 3-4
8 3-4
 
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
 
лекция 3
лекция 3лекция 3
лекция 3
 
Ispolzovanie lineynykh algoritmov_dlya_reshenia_z
Ispolzovanie lineynykh algoritmov_dlya_reshenia_zIspolzovanie lineynykh algoritmov_dlya_reshenia_z
Ispolzovanie lineynykh algoritmov_dlya_reshenia_z
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 

Similar to Lektsia 9

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1igorm9so
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
Evgenij Laktionov
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыZhanna Kazakova
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыZhanna Kazakova
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыZhanna Kazakova
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
Vasil Remeniuk
 
паскаль
паскальпаскаль
паскаль
Гимназия
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДIT_1315
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
Mikhail Kurnosov
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)isva69
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)isva69
 
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
 

Similar to Lektsia 9 (20)

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работы
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работы
 
методические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работыметодические указания по выполнению расчетно графической работы
методические указания по выполнению расчетно графической работы
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
паскаль
паскальпаскаль
паскаль
 
СИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОДСИМПЛЕКС-МЕТОД
СИМПЛЕКС-МЕТОД
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
презентация1
презентация1презентация1
презентация1
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)
 
Algo 01 part01
Algo 01 part01Algo 01 part01
Algo 01 part01
 
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"
 

Lektsia 9

  • 1. LOGO Понятие эффективности программ Временная и объемная сложность Пути повышения эффективности программ Лекция №9
  • 2. LOGO Номер строки Профиль Аналитический профиль Программа 1 Program Account; 2 {Расчет стоимости заказа товаров почтой} 3 4 Const 5 Lowpostage=5; {низкий почтовый сбор} 6 Highpostage=10; {высокий почтовый сбор} 7 Var 8 items, number : integer; 9 price, totalcost : real; 10 11 1 1 Begin 12 1 1 readln (items); 13 1 1 totalcost := 0; Пример построения профиля и аналитического профиля программы
  • 3. LOGO Номер строки Профиль Аналитический профиль Программа 14 4 1+N while items>0 do 15 3 N begin 16 3 N items :=items – 1; 17 3 N readln (number, price); 18 3 N totalcost := totalcost + number*price 19 3 N end; 20 1 1 if totalcost < 100 21 0 0 then totalcost := totalcost + lowpostage 22 1 1 else totalcost := totalcost + highpostage; 23 1 1 writeln (totalcost) 24 1 1 End. (продолжение) Пример построения профиля и аналитического профиля программы
  • 4. LOGO Номер строки Аналитический профиль Время однократного выполнения (усл. ед.) Общее время выполнения каждой строки 11 1 0 0 12 1 5 5 13 1 2 2 14 1+N 2 2+2N 15 N 0 0 16 N 2 2N 17 N 10 10N 18 N 2 2N 19 N 0 0 20 1 2 2 21 0 2 0 22 1 2 2 23 1 12 12 24 1 0 Общее время исполнения программы 25+16N Результаты расчётов
  • 5. LOGOАнализ временной сложности программ t = 𝑎 + 𝑏𝑁 + 𝑐𝑁2 t = 𝑎 + 𝑏𝑁 t = 𝑎
  • 6. LOGOАнализ объемной сложности программы Алгоритм:  записывается схема вызовов программы;  каждой строке схемы вызовов сопоставляются возникающие параметры, глобальные и локальные переменные и объем памяти для каждой из них;  на основании полученной информации определяется такое место (или места) в программе, в котором параметры и переменные занимают наибольшую память.
  • 7. LOGO Схема вызова Новая память данных Всего используется Calculator a(6 ед.), b(6 ед.), Rezult(6 ед.), N(1 ед.) 19 Input Не требуется 19 Operation Flag(1 ед.), Action(4 ед.) 24 Calculator Не требуется 19 Add Не требуется 19 Результаты, полученные при вычислении объемной сложности Анализ временной сложности программ
  • 8. LOGO Function GSD (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b} Begin {a>0 and b>0} While a <> b do If a>b then a := a – b else b := b – a; { a = b } GSD := a End; Function GSD_ (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b с помощью алгоритма Евклида} Var r : integer; Begin { a>0 and b>0 } Repeat r := a mod b; a := b; b := r Until b = 0; GSD_ := a End; Способы повышения эффективности программ
  • 9. LOGOТочное число операций Операция Первая функция Вторая функция Присваивание 500000 4 Сложение 499999 0 Умножение 0 1 Сравнение 999999 1
  • 10. LOGO Упрощение условного выражения, управляющего циклами. Вариант 1 x := 0; successful := true; While (x<>max) and successful do Begin x := x + 1; Calc (x, k, xp, successful); If successful then writeln (x:20, xp:15) End; Вариант 2 x := 0; While x<>max do Begin x := x + 1; Calc (x, k, xp, successful); If successful then writeln (x:20, xp:15) else x := max End;
  • 11. LOGO Вариант 1 If odd (n) then low := 3 else low := 2; high := n div low; If odd (n) then step := 2 else step := 1; Вариант 2 If odd (n) then begin low := 3; step := 2 end else begin low := 2; step := 1 end; Комбинирование операторов с целью совместного использования всеми частями программы фрагментов, содержащих
  • 12. LOGOЭффективность вычислений ... !7!5!3 )sin( 753  xxx xx Sk = t0 + t1 + t2 + … + tk. xt 0 !3 3 1 x t  !5 5 2 x t  !7 7 3 x t  0 3 1 3*2 t x t  1 5 2 5*4 t x t  2 7 3 7*6 t x t  1 2 )12(2    kk t kk x t xt 0 1 2 )12(2    kk t kk x t для k > 0, 00 tS  kkk tSS  1 для k > 0,
  • 13. LOGO Function Sine (x : real) : real; Const eps = 0.00001; {точность вычислений} Var k : integer; term, sum : real; Begin { 0.0 <= x <=  } k := 0; term := x; sum := term; While abs (term) > eps do begin k := k + 1; term := -term * sqr (x) / (2*k*(2*k+1)); sum := sum +term end; Sine : = sum End;
  • 14. LOGO Function Sine (x : real) : real; Const eps = 0.00001; {точность вычислений} Var i : integer; pi_x, sqrX, term, sum : real; Begin { 0.0 <= x <=  } pi_x := pi – x; If pi_x < x then x := pi_x; i := 0; term := x; sum := term; sqrX : = sqr(X); While abs (term) > eps do begin i := i + 2; term := -term * sqr (x) / (i*(i+1)); sum := sum +term end; Sine := sum End;