
- •1.Обоснование выбора подходящей структуры данных на примере задачи «Ряд Фаррея»
- •2 И 4 на одном листе
- •2.Лексикографическая сортировка последовательностей одинаковой длины
- •4.Решение задачи построения связной сети методом взвешенного быстрого объединения со сжатием пути.
- •5.Меры временной сложности алгоритмов. Оценки в среднем и в худшем случаях. Амортизированное время
- •6.Модели вычислений: Машина Тьюринга, расп, рам, неветвящиеся программы, деревья решений
- •7.Асимптотические обозначения времени выполнения программ. Оценки снизу, сверху, асимптотически точные. Правило суммы и правило произведения
- •8.Нижние оценки точности. Нижние оценки сложности для задачи сортировки, построения выпуклой оболочки
- •9.Сводимость задач и ее свойства
- •11.Задача построения максимальной суммы для подпоследовательности заданной последовательности целых чисел. Метод последовательных уточнений
- •13. Полиномиальная сводимость и ее свойства
- •14. Класс np полных задач. Примеры
- •15.Абстрактные типы данных: последовательность, множество, отображение
- •16.Линейные структуры данных: массив, список, стек, очередь, дек. Способы представления, очереди над ними
- •§ IsEmpty(): возвращает логическое значение, подтверждающее, что
- •17.Нелинейные структуры данных: деревья, графы. Обходы деревьев в глубину и ширину
- •§ IsInternal(p): проверяет, является ли p позицией внутренней вершины (не листа) .
- •§ IsExternal(p): проверяет, является ли p позицией листа дерева.
- •§ IsRoot(p): проверяет, является ли p позицией корня.
- •§ Insert(h, х): вставляет вершину х (с заполненным полем key) в пирамиду н.
- •18.Внутренняя сортировка (массивов).
- •19.Элементарные методы сортировки: обмен, вставка, выбор.
- •20.Улучшенные методы сортировки (Шелла, Сортдеревом).
- •21.Быстрая сортировка - упорядочение за среднее время о(n log n).
- •20.Задача поиска. Деревья бинарного поиска (дбп). Операции над ними.
- •23.Задача поиска. Деревья, сбалансированные по высоте. Основные типы
- •24. Задача поиска. Красно-черные деревья. Задача балансировки для красно-черных деревьев.
- •25.Атд Словарь. Реализация словаря 2-3 деревьями.
- •26.Хеширование, или метод вычисляемого адреса. Хеш-функции. Разрешение коллизий.
- •27.Алгоритмы «разделяй и властвуй».
- •28.Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры
- •29.«Жадные» алгоритмы. Алгоритм Краскала
- •30.Поиск с возвратом. Задача разбиения множеств
- •31.Алгоритмы локального поиска.
- •32.Приближенные алгоритмы.
7.Асимптотические обозначения времени выполнения программ. Оценки снизу, сверху, асимптотически точные. Правило суммы и правило произведения
Для описания асимптотических оценок имеется система нотаций:
§ Говорят, что f(n)=O(g(n)), если существует такая константа c>0 и такое число n0, что выполняется условие 0≤f(n)≤c*g(n) для всех n≥n0. Более формально:
( ( )) { ( ) | 0, , [0 ( ) ( )]} 0 0 O g n = f n $c > $n "n > n £ f n £ cg n
O(g(n)) используется для указания функций, которые не более чем в постоянное число раз превосходят g(n), этот вариант используется для описания оценок сверху (в смысле «не хуже чем»). Когда речь идет о конкретном алгоритме решения конкретной задачи, то целью анализа временной сложности этого алгоритма является получение оценки для времени в худшем или в среднем, обычно асимптотической оценки сверху O(g(n)), при возможности – и асимптотической оценки снизу W(g(n)), а еще лучше - асимптотически точной оценки Q(g(n)).
Но при этом остается вопрос – а могут ли быть для этой задачи алгоритмы решения еще лучше? Этот вопрос ставит задачу о нахождении нижней оценки временной сложности для самой задачи (по всем возможным алгоритмам ее решения, а не для одного из известных алгоритмов ее решения). Вопрос получения нетривиальных нижних оценок очень сложный. На сегодняшний день имеется не так уж много таких результатов, но для некоторых ограниченных моделей вычислителей доказаны нетривиальные нижние оценки, и некоторые из них играют важную роль в практическом программировании. Одной из задач, для которых известна нижняя оценка временной сложности, является задача сортировки:
§ Дана последовательность из n элементов a1,a2,... an, выбранных из множества, на котором задан линейный порядок.
§ Требуется найти перестановку p этих n элементов, которая отобразит данную последовательность в неубывающую последовательность ap(1),ap(2),... ap(n), т.е. ap(i)≤ap(i+1) при 1≤i<n. Для этой задачи доказана нижняя оценка временной сложности W(nlog(n)) для ограниченной модели вычислителя типа «дерево решений» [4 п.8.1.], т.е. нет алгоритмов (в определенном классе), решающих эту задачу, лучше (по порядку). Отметим, что алгоритмы, решающие эту задачу за такое время, известны, т.е. Q(nlog(n)) является асимптотически точной оценкой и для этой задачи и для этих алгоритмов ее решения. В оценках временной сложности задач и алгоритмов их решения важное положение занимает метод сведения. Пусть у нас есть две задачи A и B, которые связаны так, что задачу A можно решить следующим образом:
1) Исходные данные к задаче A преобразуются в соответствующие исходные
данные для задачи B.
2) Решается задача B.
3) Результат решения задачи B преобразуется в правильное решение задачи A .__ В этом случае мы говорим, что задача A сводима к задаче B. Если шаги (1) и (3) вышеприведенного сведения можно выполнить за время O(t(n)), где, как обычно, n – 25 «объем» задачи A , то скажем, что A t(n)-сводима к B, и запишем это так: A μt(n) B. Вообще говоря, сводимость не симметричное отношение, в частном случае, когда A и B взаимно сводимы, мы назовем их эквивалентными. Следующие два самоочевидных утверждения характеризуют мощь метода сведения в предположении, что это сведение сохраняет порядок «объема» задачи.
«O»
большое и «o»
малое (
и
) —
математические обозначения для сравнения
асимптотического поведения функций.
Используются в различных разделах
математики, но активнее всего —
в математическом
анализе, теории
чисел и комбинаторике,
а также в информатике и теории
алгоритмов.
, «о малое от » обозначает «бесконечно малое относительно »[, пренебрежимо малую величину при рассмотрении . Смысл термина «О большое» зависит от его области применения, но всегда растёт не быстрее, чем , «O большое от » (точные определения приведены ниже).
В частности:
Продолжение 7
фраза «сложность алгоритма есть » означает, что с увеличением параметра , характеризующего количество входной информации алгоритма, время работы алгоритма не может быть ограничено величиной, которая растет медленнее, чем n!;
фраза «функция является „о“ малым от функции в окрестности точки » означает, что с приближением к уменьшается быстрее, чем (отношение стремится к нулю).
Правило суммы: Пусть конечное множество M разбито на два непересекающихся подмножества M1 и M2 (в объединении дающих все множество М). Тогда мощность |M| = |M1| + |M2|.
Правило произведения: Пусть в некотором множестве объект а может быть выбран n способами, и после этого (то есть после выбора объекта а) объект b может быть выбран m способами. Тогда объект ab может быть выбран n*m способами.
Замечание: Оба правила допускают индуктивное обобщение. Если конечное множество М допускает разбиение на r попарно непересекающихся подмножеств M1, M2,…,Mr, то мощность |M| = |M1|+|M2|+…+|Mr|. Если объект A1 может быть выбран k1способами, затем (после выбора объекта A1) объект A2 может быть выбран k2способами, и так далее и наконец, объект AR может быть выбран kr способами, то объект А1 А2 …Аr может быть выбран k1 k2 …kr способами.