Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 6_Комбинирование операторов

.pdf
Скачиваний:
30
Добавлен:
14.03.2016
Размер:
387.56 Кб
Скачать

ВНИМАНИЕ: ОШИБКА

Программа напечатает строку квадратов чисел от 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