Лекции по проге / 6_Комбинирование операторов
.pdf
ВНИМАНИЕ: ОШИБКА
Программа напечатает строку квадратов чисел от 1 до 9, т.е.: 1 4 9 16 25 36 49 64 81
Внешний цикл выполнится всего один раз, т.к. внутренний цикл использует ту же самую переменную i, поэтому в конце внутреннего цикла i равно 10 и условие продолжения внешнего нарушается
Вложенные циклы, как правило, должны 31 использовать разные переменные
Задание
Определите, что выполняет следующая программа:
int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
printf("%2d ", i*j);
}
printf("\n");
32 }
Вложенные циклы
Программа напечатает на экран таблицу умножения для чисел от 1 до 9
Внутренний цикл выполняется 9 раз, операция печати — 81 раз:
1 2 3 4 5 6 7 8 9
24 6 8 10 12 14 16 18
|
|
.... |
|
|
8 16 24 |
32 40 48 57 64 |
72 |
33 |
9 18 27 |
36 45 56 64 72 |
81 |
|
|
|
Алгоритмическая сложность
Сложность алгоритма оценивается по тому, как зависит количество выполняемых операций от значений его входных данных
Применяются два способа записи сложности алгоритмов:
в виде математической формулы пропорциональности, где константа обозначается буквой C, а N — это количество входных данных (например: C*N)
нотация «большого О», например О(N)
34
Алгоритмическая сложность
Алгоритмическая сложность показывает, насколько легко программа может адаптироваться к увеличению объема входных данных
При обработке больших объемов данных пропорциональность входным данным значительно важнее количества действий, записанных в программе (т.е. константы)
35
Алгоритмическая сложность
Если сложность выражается многочленом, то рассматривается только одно слагаемое — с самой высокой степенью. Оно является самым главным при больших числах
Если возможны разные варианты количества операций, то учитывается наихудший
36
Задание
Определите алгоритмическую сложность следующей программы:
y= x*x + (N++)/(float)K;
37
Постоянная сложность
Для программы
y= x*x + (N++)/(float)K;
количество операций не зависит от ее входных данных, оно постоянное (равно константе)
Формы записи:
C
O(1)
38
Задание
Определите алгоритмическую сложность следующей программы:
for (i = 0; i < N; i++)
{ printf("%d ", arr[i]); }
39
Линейная сложность
Сложность программы, содержащей цикл из N элементов, пропорциональна первой степени N
Формы записи:
C*N
O(N)
40
