Інформатика:основи комп’ютерних алгоритмів
Матеріал з USIC Wiki
Спискові структури даних.
Основні алгоритми на графах.
Часова складність алгоритмів.
Матеріали з російської вікіпедії, сподіваюся, всі зрозуміють без перекаду -- oksamyt 15:51, 3 червень 2008 (EEST)
Целью анализа трудоёмкости алгоритмов является нахождение оптимального алгоритма для решения данной задачи. В качестве критерия оптимальности алгоритма выбирается трудоемкость алгоритма, понимаемая как количество элементарных операций, которые необходимо выполнить для решения задачи с помощью данного алгоритма. Функцией трудоемкости называется отношение, связывающие входные данные алгоритма с количеством элементарных операций.
Трудоёмкость алгоритмов по-разному зависит от входных данных. Для некоторых алгоритмов трудоемкость зависит только от объема данных, для других алгоритмов — от значений данных, в некоторых случаях порядок поступления данных может влиять на трудоемкость. Трудоёмкость многих алгоритмов может в той или иной мере зависеть от всех перечисленных выше факторов.
Одним из упрощенных видов анализа, используемых на практике, является асимптотический анализ алгоритмов. Целью асимптотического анализа является сравнение затрат времени и других ресурсов различными алгоритмами, предназначенными для решения одной и той же задачи, при больших объемах входных данных. Используемая в асимптотическом анализе оценка функции трудоёмкости, называемая сложностью алгоритма, позволяет определить, как быстро растет трудоёмкость алгоритма с увеличением объема данных. В асимптотическом анализе алгоритмов используются обозначения, принятые в математическом асимптотическом анализе. Ниже перечислены основные оценки сложности.
Основной оценкой функции сложности алгоритма f(n) является оценка
. Здесь n — величина объёма данных или длина входа. Мы говорим, что оценка сложности алгоритма
если при g > 0 при n > 0 существуют положительные с1, с2, n0, такие, что:
при n > n0, иначе говоря, можно найти такие с1 и c2, что при достаточно больших n f(n) будет заключена между
и
.
В таком случае говорят еще, что функция g(n) является асимптотически точной оценкой функции f(n), так как по определению функция f(n) не отличается от функции g(n) с точностью до постоянного множителя (см. асимптотическое равенство). Например, для метода сортировки heapsort оценка трудоёмкости составляет
то есть g(n) = nlogn
Из
следует, что
.
Важно понимать, что
представляет собой не функцию, а множество функций, описывающих рост
с точностью до постоянного множителя.
дает одновременно верхнюю и нижнюю оценки роста функции. Часто бывает необходимо рассматривать эти оценки по отдельности. Оценка
представляет собой верхнюю асимптотическую оценку трудоемкости алгоритма.
Мы говорим, что
если
Иначе говоря, запись
означает, что f(n) принадлежит классу функций, которые растут не быстрее, чем функция g(n) с точностью до постоянного множителя.
Оценка
задает нижнюю асимптотическую оценку роста функции f(n) и определяет класс функций, которые растут не медленнее, чем g(n) с точностью до постоянного множителя.
если
Например, запись
обозначает класс функций, которые растут не медленнее, чем
, в этот класс попадают все полиномы со степенью большей единицы, равно как и все степенные функции с основанием большим единицы.
Равенство
выполняется тогда и только тогда, когда
и
.
Асимптотический анализ алгоритмов имеет не только практическое, но и теоретическое значение. Так, например, доказано, что все алгоритмы сортировки, основанные на попарном сравнении элементов, отсортируют n элементов за время, не меньшее
.
Важную роль в развитии асимптотического анализа алгоритмов сыграли A. Ахо, Дж. Ульманом, Дж. Хопкрофт.
http://ru.wikipedia.org/wiki/Теория_алгоритмов
Розглядаючи вхідні дані достатньо великих розмірів для оцінки такої величини, як порядку росту
часу роботи алгоритму ми тим самим вивчаємо асимптотичну ефективність алгоритмів. Це означає,
що нас цікавить тільки те, як час роботи алгоритму зростає, коли розмір вхідних даних прямує
до нескінченності. За звичай алгоритм, більш ефективний в асимптотичному смислі, буде більш ефективним
для всіх вхідних даних за винятком хіба що дуже малих.
- позначення
Для деякої функції g(x) запис
означає множину функцій
Функція f(n) належить
, якщо існують додатні константи
c1 та c2, такі що вона буде обмежена функціями c1g(n) та c2g(n) для достатньо великих n. Оскільки
це множина, то можна написати
. Для цього зазвичай використовують еквівалентне позначення
. Знак дорівнює для позначення належності множині може збивати з пантелику, але як буде видно далі це має свої переваги. Кажуть, що функція g(n) є асимптотично точною оцінкою функції f(n). Відповідно до означення множини
, потрібно щоб кожен її елемент f(n) був асимптотично невідємним. Це означає, що при достатньо великих n функція f(n) є невідємною. Відповідно функція g(n) має бути асимптотично невідємною, оскільки в протилежному випадку множина
буде порожньою.
Доведемо, що має місце
за допомогою формального означення.
Для цього потрібно визначити чому дорівнюють додатні константи c1, c2 та n0, щоб виконувалась нерівність
, при всіх
. Поділивши дану нерівність на n2, отримаємо:
. Права нерівність виконується при всіх
, якщо обрати
. Аналогічно, ліва нерівність виконується при всіх
, якщо обрати
.
Таким чином, обравши
, переконуємось в тому, що
.
Також за допомогою формального означення покажемо, що
.
Від супротивного...Припустимо, що знайдуться такі c2 та n0, що
для всіх
. Тоді, виходить, що
, а ця нерівність не може виконуватись для великих n, оскільки c2 є константою. Суперечність...
- позначення
В
- позначенні функція асимптотично обмежена зверху і знизу. Якщо
досить визначити тільки асимптотично верхну межу використовують
-позначення.
Для деякої функції g(n) позначення
означає множину функцій таких, що
.
Щоб вказати, що функція f(n) належить множині пишуть
.
Також варто звернути увагу на те, що із
випливає, що
, оскільки
.
- позначення
Аналогічно тому як для
дається асимптотична верхня межа функції, в
-позначеннях дається її асимптотична нижня оцінка.
Для даної функції g(n) позначення
означає множину функцій таких, що
.
Теорема.
Для довільних двої функцій f(n) та g(n) співвідношення
, виконується тоді і тільки тоді, коли
та
.

