- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Пример постановки задачи
Ввести три числа и вывести числа в порядке.
Пример постановки задачи в стандартной форме
НАЗВАНИЕ
Сортировка трех целых чисел
ОПИСАНИЕ
Ввод и вывод трех чисел, отсортированных от меньшего к большему.
ВВОД
Вводятся три целых числа по одному числу на строке. При этом целым числом является одна или несколько последовательных десятичных цифр, которым может предшествовать знак плюс «+» или знак «-».
ВЫВОД
Выводятся три введенных целых числа, причем все три выводятся на одной строке. Смежные числа разделяются пробелом. Числа выводятся от меньшего к большему, слева направо.
ОШИБКИ
Если введено менее трех чисел, программа ждет дополнительного ввода.
Строки ввода, кроме первых трех, игнорируются.
Если какая-либо из первых трех строк содержит более одного целого числа, то программа завершает работу и выдает сообщение «ОШИБКА ВВОДА – допускается только одно целое число на строке»
ПРИМЕР
Ввод
-3
2
+17
Вывод
-3 2 +17
Алгоритмы и их сложность
Модель вычислений
Используется однопроцессорная машина с произвольным доступом (random-access machine,RAM), не предусматривающая параллельного выполнения операций;
n – размер входных данных задачи;
Емкостная эффективность алгоритма – объем оперативной памяти, затрачиваемой алгоритмом, как функция размера задачи.
Временная эффективность алгоритма- время, затрачиваемое алгоритмом, как функция размера задачи.
Т (n) = 3 *n2+2*n
Асимптотическая временная эффективность
Поведение временной сложности алгоритма в пределе, при увеличении размера задачи, называется асимптотической временной эффективностью.
Используются обозначения:
Θ – обозначение;
Ο– обозначение;
Ω– обозначение.
Θ – обозначение
Ο– обозначение
Ω– обозначение
Максимальный размер задачи
Алгоритм |
сложность |
Максимальный размер задачи (единица времени 1 миллисекунда) |
||
1 сек |
1 мин |
1 час |
||
А1 |
n |
1000 |
60000 |
3.6*106 |
А2 |
n*log (n) |
140 |
4893 |
2.0*105 |
А3 |
n 2 |
31 |
244 |
1897 |
А4 |
n 3 |
10 |
399 |
153 |
А5 |
2 n |
9 |
15 |
21 |
Влияние ускорения компьютеров в 10 раз
Алгоритм |
сложность |
Максимальный размер задачи |
|
До ускорения |
После ускорения |
||
А1 |
n |
S1 |
10*S1 |
А2 |
n*log (n) |
S2 |
≈10*S1 |
А3 |
n 2 |
S3 |
3.16*S3 |
А4 |
n 3 |
S4 |
2.15*S4 |
А5 |
2 n |
S5 |
S5+3.3 |
Правило сумм
Пусть T1(n) и T2(n) – время выполнения двух программных фрагментов P1 и P2, T1(n) имеет степень роста O(f(n)),
а T2(n) – O(g(n)).
Тогда время последовательного выполнения фрагментов P1 и P2 имеет степень роста O(max(f(n),g(n)))
Правило произведений
Пусть T1(n) имеет степень роста O(f(n)),
а T2(n) – O(g(n)).
Тогда произведение T1(n) * T2(n) имеет степень роста O( f(n)*g(n))
Правила анализа программ
Время выполнения операторов присваивания, чтения и записи обычно имеет порядок О(1)
Время выполнения последовательности операторов определяется с помощью правила сумм
Время выполнения условных операторов состоит из времени выполнения условно исполняемых операторов и времени вычисления логического выражения.
Время вычисления логического выражения обычно имеет порядок О(1)
4. Время выполнения цикла является суммой времени всех исполняемых итераций цикла, в свою очередь состоящих из времени выполнения тела цикла и времени вычисления условия прекращения цикла (обычно последнее имеет порядок О(1). Если в программе несколько циклов, время выполнения каждого должно определяться отдельно.
