Лекции по проге / 6_Комбинирование операторов
.pdf
Задание
Определите алгоритмическую сложность следующей программы:
for (i = 0; i < N; i++)
{scanf("%d", &arr[i]); }
for (i = 0; i < N; i++)
{ printf("%d ", arr[i]); }
41
Линейная сложность
Два идущих подряд цикла дают нам: C1*N + C2*N операций, при этом N можно вынести за скобки: (С1+C2)*N, можно также обозначить C = C1 + C2, следовательно C*N
Если два цикла идут один за другим, то сложность программы остается линейной
42
Задание
Определите алгоритмическую сложность следующей программы:
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{ printf("%d ", arr[i][j]); }
}
43
Квадратичная сложность
Внутренний цикл начинается N раз, и каждый раз он N раз выполняет печать элемента массива, поэтому общее число операций пропорционально квадрату N
Формы записи:
С*N2
O(N2)
44
Задание
Определите алгоритмическую сложность следующей программы:
for (i = 0; i < N; i++)
{
for (j = 0; j< K; j++)
{ printf("%d ", arr[i][j]); }
}
45
Произведение нескольких переменных
Внутренний цикл выполняется N раз, и каждый раз он K раз выполняет печать элемента массива, поэтому общее число операций пропорционально произведению N*K
Формы записи:
С*N*K
O(N*K)
46
Задание
Определите алгоритмическую сложность программы, угадывающей число методом дихотомии (деления пополам):
-она пробует среднее число из интервала [0, N];
-в зависимости от ответа пользователя (больше или меньше) выбирает следующий возможный интервал.
47
Логарифмическая сложность
В лучшем случае число будет угадано с первого раза
В худшем случае потребуется количество операций, пропорциональное двоичному логарифму N (например при N = 16 любое число можно отгадать за 4 попытки)
Формы записи:
C*ln N
O(ln N)
48
Декомпозиция
Декомпозицией называется процесс разбиения сложной задачи на простые подзадачи и решение их по-отдельности
Для того, чтобы программу можно было отладить, усовершенствовать или просто продолжать писать дальше, она должна быть контролируемой, т.е. понятной человеку в каждой детали
49
Декомпозиция
Главным источником трудности при написании программ является их сложность
Основным средством борьбы со сложностью и поддержания программы в контролируемом состояние является разбиение ее на небольшие части, каждая из которых проста и понятна
Эти небольшие части программы должны
соединяться между собой простым и понятным 50 образом
