Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Приближённое вычисление сложности



 

Пусть F(N) – функция сложности алгоритма в зависимости от N.

Тогда если существует такая функция G(N) (асимптотическая функция) и константа C, что

то сложность алгоритма F(N) определяется функцией G(N) с коэффициентом амортизации C.

 

Асимптотика основных зависимостей

 

Класс сложности определяется по асимптотической зависимости F(N).

 

Экспонента с любым коэффициентом превосходит любую степень.

 

Степень с любым коэффициентом, большим единицы, превосходит логарифм по любому основанию, большему единицы.

 

Логарифм по любому основанию, большему единицы превосходит 1.

 

F(N) = N3 + 7N2 - 14N = ϴ (N3)

 

F(N) = 1.01N + N10 = ϴ (1.01N)

 

F(N) = N1.3 + 10log2N = ϴ (N1.3)

 

На практике чаще используют O-нотацию, так как ϴ -нотацию обычно сложнее доказывать.

 

Зависимость времени исполнения от исходных данных

 

Пусть имеется массив A длиной N элементов.

Сколько операций потребуется, чтобы обнаружить номер первого вхождения элемента со значением P алгоритмом, заключающимся в последовательном просмотре элементов массива?

 

Kmin = 1

 

Kmax = N

 

 

Подходит ли символ ϴ?

 

Нет. Для данного алгоритма подходит O-символ: f(N) = O(N).

 

 

Пусть имеется массив A длиной N элементов.

Сколько операций потребуется, чтобы сложить все элементы массива?

 

K = N

 

Подходит ли символ ϴ?

 

Подходит. f(N) = ϴ (N).

 

Неполиномиальные задачи. Задача о рюкзаке

 

Имеется N предметов, каждый из которых имеет объём Vi и стоимость Ci, предметы неделимы. Имеется рюкзак вместимостью V. Требуется поместить в рюкзак набор предметов максимальной стоимости, суммарный объём которых не превышает объёма рюкзака.

 

Задача о рюкзаке

 

Обратим внимание на то, что предметы разрезать на куски нельзя. Если это разрешить, то задача будет иметь простое решение.

 

Для решения задачи достаточно перебрать все возможные комбинации из N предметов. Это гарантирует то, что мы не пропустим нужной комбинации.

 

Для определения количества комбинаций можно рассуждать так, что K предметов можно выбрать из N предметов (CNK), и так для всех K от 0 до N.

 

F(N) = (1 + 1) N = 2N

 

Одно из решений задачи о рюкзаке

 

1) перенумеруем все предметы;

2) установим максимум стоимости в 0;

3) составим двоичное число с N разрядами, в котором единица в разряде будет означать, что предмет выбран для укладки в рюкзак (расстановку);

4) рассмотрим все расстановки, начиная от 000... 000 до 111... 111, для каждой из них подсчитаем значение суммарного объёма:

4.1) если суммарный объём расстановки не превосходит объёма рюкзака, то подсчитывается суммарная стоимость и сравнивается с достигнутым ранее максимумом стоимости;

4.2) если вычисленная суммарная стоимость превосходит максимум, то максимум устанавливается в вычисленную стоимость и запоминается текущая конфигурация.

 

Свойства алгоритма

 

Предложенный алгоритм:

1) детерминированный;

2) конечный;

3) массовый;

4) полезный.

Его сложность пропорциональна 2N, так как требуется перебрать все возможные комбинации предметов.

 

Сложность решения задачи о рюкзаке

 

Много ли времени потребуется на решение задачи для N = 128?

 

Предположим, на подсчёт одного решения потребуется 10-9 секунд, т.е. одна наносекунда.

Предположим, задачу будет решать триллион компьютеров (1012).

Тогда общее время решения задачи будет составлять

 

NP-задачи о рюкзаке

 

Задача о рюкзаке относится к классу NP-полных. Быстрое (полиномиальное) точное решение таких задач (пока) не найдено. Если будет найдено решение одной из NP-полных задач, то будут решены все задачи из этого класса. Сейчас их решают приближённо.

 

Исполнитель алгоритма

Исполнители

 

Нашим исполнителем будет язык C++.

 

Элементарные типы отображаются на вычислительную систему char, int, double.

 

Элементарные операции аппаратного исполнителя: операции над элементарными типами и операции передачи управления.

 

Типы данных языка – комбинация элементарных типов данных.

 

Операции языка – комбинация элементарных операций.

 


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 384; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь