Тема 2.4. 4. Оценка сложности алгоритма:
классификация, классы алгоритмов, неразрешимые задачи
Сложность алгоритма помогает оценить затраты на его реализацию и определяется вычислительными мощностями, необходимыми для его выполнения.Она часто измеряется двумя параметрами: T - временная сложность
S - пространственная сложность
Сложность представляется как функция f(n), где n - размер входных данных. Чаще всего под размером понимают число обрабатываемых элементов (размер массива данных).Определим f(n) как рабочую функцию, дающую верхнюю границу для максимального числа основных операций (сложения, сравнения и т.д.), которые должен выполнить алгоритм.Определим асимптотическую сложность алгоритма.Если алгоритм обрабатывает входную последовательность размера n за вре-мя cn2, то говорят, что временная сложность этого алгоритма - (n2)Найдутся такие константы c1; c2 > 0 и такое число n0, что c1n2 6 f(n) 6 c2n2 при всех n > n0.Вообще, если g(n) - некоторая функция, то запись f(n) = (g(n)) означает, что найдутся такие c1; c2 > 0 и такое n0, что c1g(n) 6 f(n) 6 c2g(n) при всех n > n0.Запись f(n) = (g(n)) включает в себя две оценки - верхнюю и нижнюю. Их можно разделить (в данном случае нас больше интересует верхняя оценка). Говорят, что f(n) = O(g(n)), если найдется такая константа с > 0 и такое число n0, что 0 6 f(n) 6 cg(n) для всех n > n0.Также существуют определения:Функция f(n) является O[g(n)] (о-большое) для больших n, если:lim f(n) = const 6= 0n!1 g(n)Функция f(n) является o[g(n)] (о-малое) для больших n, если:lim f(n) = 0n!1 g(n)