Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы_данные_ЗО_2015.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
279.04 Кб
Скачать

Алгоритмы и структуры данных

Структура курса

6 часов лекций, 12 часов лабораторных работ, 1 контрольная работа, экзамен.

Литература

  1. Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD. – М.: ДМК Пресс, 2014. – 272с.

  2. Зубов В.С., Шевченко И.В. Структуры и методы обработки данных. – М.: Информационно-издат. дом «Филинъ», 2004. – 304 с.

  3. Ахо, А. В., Хопкрофт Джон, Ульман Джеффри Д. Структуры данных и алгоритмы.: Уч.пос.– М.: Издательский дом «Вильямс», 2000. – 384 с.

  4. Гудрич М.Т., Тамасия Р. Структуры данных и алгоритмы в Java. - Мн.: Новое знание, 2003. – 671 с.

Лекция 1 Тема 1.1. Критерии оценки алгоритмов

1.1.1. Асимптотические характеристики

Алгоритм – это точное предписание о выполнении в определенном порядке некоторых операций, приводящих к решению всех задач данного класса.

Свойства алгоритма:

1) определенность (точность предписаний и однозначность результата);

2) массовость (ориентирован на класс задач, например решение системы произвольного количества уравнений при любых исходных данных);

3) дискретность (деление процесса решения на этапы, понятные человеку и ЭВМ);

4) результативность (результат должен быть обязательно – даже если его нет, должно быть сообщение об этом).

Способы описания алгоритмов (известны из курса «Программирование»):

1) словесный (описание действий, которые должны привести к решению задачи, например построение треугольника по трем его сторонам);

2) математический (в виде формул, например формула для нахождения корней квадратного уравнения);

3) графический (схемы алгоритмов);

4) на языке программирования.

Важнейшей характеристикой алгоритма и соответствующей ему программы является их сложность, которая может оцениваться:

  1. временем решения задачи (трудоемкостью алгоритма);

  2. требуемой емкостью памяти.

Наиболее часто сложность алгоритма оценивают по порядку величины (порядка n, n2 и т.д.). Этот метод применим как к временной, так и к емкостной сложности.

  1. Временная оценка (оценка порядка)

Эта оценка считается сомой важной. Наиболее точно она определяется числом машинных команд, выполняемых при реализации алгоритма. Для программ на языках высокого уровня обычно используют следующий набор «элементарных» операций, характерных для этих языков.

    1. Простое присваивание: а <-- b, будем считать ее сложность, равной 1;

    2. Одномерная индексация a[i] : (адрес (a)+i*длина элемента), будем считать ее сложность, равной 2;

    3. Арифметические операции: (*, /, -, +), будем считать их сложность, равной 1;

    4. Операции сравнения: a < b, будем считать их сложность, равной 1;

    5. Логические операции (l1) {or - |, and - &&, not - !} (l2), будем считать их сложность, равной 1;

С их помощью трудоемкость основных алгоритмических конструкций можно представить так.

  1. Линейная конструкция из k последовательных блоков

Трудоемкость конструкции есть сумма трудоемкостей блоков, следующих друг за другом. 

Θ =f1+f2+…+fk,

где fk – трудоемкость k-го блока.

  1. Конструкция «Ветвление»

If (Условие) // then

Операторы

else

Операторы.

Общая трудоемкость конструкции «Ветвление» требует анализа вероятности выполнения операторов, стоящих после «Then» (р) и «Else» (1-р) и определяется как:

Θ = fthenp + felse(1-p),

где fthen и felse – трудоемкости соответствующих ветвей.

  1. Конструкция «Цикл»

for (i=1; i<= n;i++){

Тело цикла}

После сведения этой конструкции к элементарным операциям ее трудоемкость определяется как:

Θ =1+3*n+n* fцикла,

где fцикла – сложность тела цикла,

n – число его повторений,

3* n – трудоемкость изменения параметра и проверки условия выполнения цикла.

Сложность линейного участка и ветвления, как правило, не зависит от объема данных и считается равной некоторой константе. При этом алгоритмы, содержащие циклы и рекурсии, являются более сложными. Величина Θ возрастает с увеличением вложенности циклов, а также при многократном вызове методов обработки данных (процедур).

Рассмотрим примеры анализа простых алгоритмов.

Пример 1. Задача суммирования элементов квадратной матрицы размерностью n* n.

SumM (A, n; Sum) Sum <-- 0 For i <-- 1 to n For j <-- 1 to n Sum <-- Sum + A[i,j] end for Return (Sum) End

Алгоритм выполняет одинаковое количество операций при фиксированном значении n и, следовательно, является количественно-зависимым. Применение методики анализа конструкции «Цикл » дает:

Θ (n)=1+ fцикла по i = 1 + 1+ 3*n + n * fцикла по j =

1 + 1+ 3*n + n * (1+ 3*n + n *(2 + 2 + 1 + 1))

= 2 + 3n + n *(1 + 3n + 6 n) = 9n2+4 n +2. (1.1)