Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по SD.doc
Скачиваний:
22
Добавлен:
21.09.2019
Размер:
1.19 Mб
Скачать

Классификация задач по временной сложности.

В информатике недостаточно высказать утверждение о существовании некоторого объекта (в математике для этого пользуются теоремами о существовании), а также недостаточно найти конструктивное доказательство этого факта, т.е. алгоритм. В информатике необходимо, чтобы решение задачи можно было осуществить, используя конечный объем памяти и время, приемлемое для пользователя.

По временной сложности все задачи классифицируются следующим образом:

1 класс. Задачи класса Р – это задачи, для которых известен алгоритм и временная сложность оценивается полиномиальной функцией f(N) = a kN + a k-1N 2 +…+a 0N k+1. Алгоритмы таких задач называют также “хорошими” алгоритмами. Этих алгоритмов мало, они образуют небольшой по мощности класс. Легко реализуются. Функция временной сложности для таких алгоритмов имеет вид O(Nk).

2 класс. Задачи класса Е – это задачи, для которых алгоритм известен, но сложность таких алгоритмов O(f N), где f – константа. Задачи такого класса – это задачи построения всех подмножеств некоторого множества, задачи построения всех полных подграфов графа. При небольших N экспоненциальный алгоритм может работать быстрее полиномиального.

3 класс. На практике существуют задачи, которые не могут быть отнесены ни к одному из вышерассмотренных классов. Это прежде всего задачи, связанные с решением систем уравнений с целыми переменными, задачи определения цикла, проходящего через все вершины некоторого графа, задачи диагностики и т.д. Такие задачи независимы от компьютера, от языка программирования, но могут решаться человеком.

N

2

3

5

10

20

50

100

1000

1000N2

4 мкс

10 мкс

25 мкс

100 мкс

400 мкс

2.5 мс

10 мс

1 с

100N3

1 мкс

3 мкс

18.5 мкс

100 мкс

800 мкс

13 мс

100 мс

100 с

2N

4 мс

8 мс

30 мс

1 мкс

1 мс

10 сут.

Миллиарды лет

16 мс

250 мс

30 с

Миллиарды лет

Сд типа стек.

Стек – это последовательность, в которой включение и исключение элемента осуществляется с одной стороны последовательности (вершины стека). Так же осуществляется и операция доступа. Структура функционирует по принципу LIFO (последний пришедший обслуживается первым). Условные обозначения стека:

Вкл.

Искл.

Вкл.

Искл.

При реализации стека рассматриваются стек как отображение на массив и стек как отображение на список.

Совокупность операций, определяющих структуру типа стек:

  1. Операция инициализации.

  2. Операция включения элемента в стек.

  3. Операция исключения элемента из стека.

  4. Операция проверки: стек пуст / стек не пуст.

  5. Операция проверки: стек переполнен / стек не переполнен (данная операция характерна для стека как отображения на массив).

  6. Операция чтения элемента (доступ к элементу).

Все операции не зависят от размерности стека, т.е. порядок временной сложности – О(1).

Имеется две модификации стека:

  1. Указатель находится на вершине стека, показывая на первый пустой элемент.

  2. У

    слот

    казатель указывает на первый заполненный элемент.

Стек в последовательной памяти (схема на физическом уровне):

Д

S

ескриптор:

Условные обозначения

Название стека

Нижний адрес стека

Верхний адрес стека

Адрес указателя

Описание элемента

Применение стека:

  1. Стек используется при преобразовании рекурсивных алгоритмов в нерекурсивные. В частности, с помощью стека можно модифицировать алгоритм сортировки Хоара.