
- •Определение абстрактного типа данных. Атд списки, очереди, стек.
- •Insert (X,p,l) – X - объект который вставляем в список l в позицию p.
- •Insert (X,p,l) – X - объект который вставляем в список l в позицию p.
- •Определение бинарного дерева и дерева с порядком на детях. Примеры использования.
- •Представление графов с помощью матриц смежности, списков смежных вершин, списков ребер и матриц инцидентности. Области применения этих представлений.
- •Понятие о-нотаций. Темп роста времени работы на примере алгоритмов сортировок.
Понятие о-нотаций. Темп роста времени работы на примере алгоритмов сортировок.
Для оценки эффективности работы алгоритма необходимо знать время его работы на определенном наборе данных, т.е. зависимость этого времени от размерности введенных данных.
Время работы алгоритма как функции от размерности входных данных T(n)=f(n). Это время зависит от операций, которые входят в алгоритм (линейные операции, ветвления, циклы и т.д.). Каждая операция имеет свое среднее время выполнения, а число этих операций определяется как раз размерностью входных данных, также время может зависеть от свойств входных данных (например, отсортирован ли массив или нет). Хорошие алгоритмы не должны зависеть от структуры входных данных. Зависимость времени работы от размерности входных данных – очень важная характеристика алгоритма. Например при сортировке массива метод пузырька со средним временем работы n2 и быстрая сортировка qsort с временем работы n . log2n. На практике найти аналитическое выражение для f почти невозможно, гораздо важнее знать порядок роста времени работы алгоритма Т от размерности входных данных n. Для оценивания этого порядка применяются методы асимптотического анализа, в частности, О-оценивание. Работать с оценками (например, при доказательстве эффективности алгоритма) легче, чем с самой функцией f(n).
Время работы алгоритмов:
Сортировки:
Линейные вставки – О(n2)
Метод Шелла(шаги 9,5,2,1) – O(n4/3)
Двоичное слияние – O(n*ln(n))
Пирамидальная сортировка Неаp sort – O(n*ln(n))
Quick sort – O(n*ln(n))
О-нотации.
Дано: функции f(n) , g(n) >0
Тогда запись: f(n)=Θ(g(n)) означает, что найдутся числа C1,C2 > 0 и число n0 такие, что 0≤C1 . g(n)≤f(n)≤C2 . g(n) при всех n≥n0. Функция g(n) при этом называется асимптотически точной оценкой.
Говорят, что f(n)=O(g(n)), если найдутся число C>0 и число n0 для которых выполняется условие 0≤f(n)≤C . g(n) при n≥n0 . Функция g(n) при этом называется оценкой сверху.
Говорят, что f(n)=Ω(g(n)), если найдутся число C>0 и число n для которых выполняется условие 0≤C . g(n) ≤f(n) при n≥n0. Функция g(n) при этом называется оценкой снизу.
В таких оценках(О и Ω) отношение f(n)/g(n)ограничено в С раз. Недостатком оценок О и Ω является то, что с ростом n они могут довольно сильно отличаться от f(n). Графические зависимости для разных оценок:
Если
,
то вводятся еще 2 оценки( о-малая и
ω-малая) – предельные оценки:
f(n)=o(g(n)) если для всякого ε>0 найдется n0, такое что 0≤f(n) ≤ ε . g(n) при всех n≥n0
f(n)=ω(g(n)) если для всякого ε>0 найдется n0, такое что 0≤ ε . g(n) ≤f(n) при всех n≥n0.