Основы алгоритмизации и программирования. Лекция 14

Содержание

Слайд 2

Обучение в университете

Обучение в университете

Слайд 3

Оценки прошлого потока

Оценки прошлого потока

Слайд 4

Мем в начале

Мем в начале

Слайд 5

Содержание лекции Оценка эффективности алгоритмов Временная сложность Пространственная сложность Примеры

Содержание лекции

Оценка эффективности алгоритмов
Временная сложность
Пространственная сложность
Примеры

Слайд 6

Оценка эффективности алгоритмов Время выполнения (execution time) – временная эффективность Объем

Оценка эффективности алгоритмов

Время выполнения (execution time) – временная эффективность
Объем потребляемой памяти

(memory consumption) – пространственная эффективность
Слайд 7

Факторы, влияющие на время выполнения Размер входных данных Качество реализации алгоритма

Факторы, влияющие на время выполнения

Размер входных данных
Качество реализации алгоритма на языке

программирования
Качество скомпилированного кода
Производительность вычислительной машины
Слайд 8

Анализ времени выполнения алгоритмов

Анализ времени выполнения алгоритмов

 

Слайд 9

«Элементарные» операции Присваивание значения переменной Вызов функции Арифметические операции Сравнение двух

«Элементарные» операции

Присваивание значения переменной
Вызов функции
Арифметические операции
Сравнение двух значений
Обращение по индексу
Возвращение значение

из функции
Циклы и подпрограммы состоят из последовательности простых операций
Слайд 10

Пример

Пример

Слайд 11

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

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

 

Слайд 12

Асимптотический анализ сложности алгоритмов

Асимптотический анализ сложности алгоритмов

 

Слайд 13

Асимптотический анализ сложности алгоритмов

Асимптотический анализ сложности алгоритмов

Слайд 14

Асимптотический анализ сложности алгоритмов Для алгоритмов обычно оценивают количество операций для

Асимптотический анализ сложности алгоритмов

Для алгоритмов обычно оценивают количество операций для следующих

случаев:
худший случай (worst case)
средний случай (average case)
наилучший случай (best case)
Для записи асимптотической оценки вычислительной сложности алгоритмов используются асимптотические обозначения:
О-нотацию (Big O)
Слайд 15

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

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

 

Слайд 16

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

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

 

Слайд 17

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

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

 

Слайд 18

Примеры

Примеры

 

Слайд 19

Свойства

Свойства

 

Слайд 20

Пример void ExampleFunc(const vector & items) { cout int middle_index =

Пример

void ExampleFunc(const vector& items) {
cout << items[0] << endl;
int

middle_index = items.size() / 2;
int index = 0;
while (index < middle_index) {
cout << items[index] << endl;
++index;
}
for (int i = 0; i < 100; ++i) {
cout << "hi" << endl;
}
}
Слайд 21

Пример void ExampleFunc(const vector & numbers) { cout for (int number

Пример

void ExampleFunc(const vector& numbers) {
cout << "these are the numbers:"

<< endl;
for (int number : numbers) {
cout << number << endl;
}
cout << "and these are their sums:" << endl;
for (int firstNumber : numbers) {
for (int secondNumber : numbers) {
cout << (firstNumber + secondNumber) << endl;
}
}
}
Слайд 22

Классы сложности O(n)

Классы сложности O(n)

Слайд 23

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

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

Слайд 24

Наглядно Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!)

Наглядно

Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!)

Слайд 25

Пространственная сложность void bubble_sort(int k, int x[max]) { int i, j,

Пространственная сложность

void bubble_sort(int k, int x[max]) {
int i, j, temp;

for(i=0; i < k-1; i++) {
for(j=0; j < k-i-1; j++) {
if(x[j] > x[j + 1]) {
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
}

Константная сложность по памяти:
T(n)=3=O(1)

Слайд 26

Пример: двоичный поиск int BSRec(int arr[], int l, int r, int

Пример: двоичный поиск

int BSRec(int arr[], int l, int r, int x)

{
if (r >= l) {
int m = l + (r - l) / 2;
if (arr[m] == x)
return mid;
if (arr[m] > x)
return BSRec(arr, l, m-1, x);
return BSRec(arr, m+1, r, x);
}
return -1;
}

int BSIter(int arr[], int l, int r, int x) {
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m] == x)
return m;
if (arr[m] < x)
l = m + 1;
else r = m - 1;
}
return -1;
}

Слайд 27

Пример: двоичный поиск

Пример: двоичный поиск

 

Слайд 28

Пример: двоичный поиск

Пример: двоичный поиск

 

Слайд 29

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

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

 

Слайд 30

Сравнение алгоритмов сортировки

Сравнение алгоритмов сортировки

Слайд 31

Пример вопроса на экзамене

Пример вопроса на экзамене

 

Слайд 32

Пример задачи на экзамене Дополнительное условие: привести расчет временной и пространственной сложности реализованного алгоритма

Пример задачи на экзамене

Дополнительное условие: привести расчет временной и пространственной сложности

реализованного алгоритма
Слайд 33

Экзамен Тест 20 вопросов с вариантами ответов 20 минут 1 попытка

Экзамен

Тест
20 вопросов с вариантами ответов
20 минут
1 попытка (естественно! ☺)
Максимальная оценка –

10 баллов
Задача
Для тех, кто ответит правильно на 16+ вопросов (80%)
Тест + задача = 10 баллов