Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROS_K_EKZAMENU_SiAOD.docx
Скачиваний:
65
Добавлен:
27.09.2019
Размер:
120.34 Кб
Скачать
  1. Понятие алгоритма неполиноминальной сложности.

Вопрос 27.

  1. Проблемы реализации np-сложных алгоритмов.

Вопрос 27.

В теории алгоритмов NP-полная задача — задача из класса NP, к которой можно свести любую другую задачу из класса NP за полиномиальное время. Таким образом, NP-полные задачи образуют в некотором смысле подмножество «самых сложных» задач в классе NP; и если для какой-то из них будет найден «быстрый» алгоритм решения, то и любая другая задача из класса NP может быть решена так же «быстро».

  1. Соответствие между скоростью выполнения алгоритма и его сложностью.

Сравним рост времени выполнения алгоритмов с разным порядком сложности в зависимости от увеличения числа эл.

N

Log2(N)

N*log2(N)

N2

N3

2N

3N

1

0

0

1

1

2

3

2

1

2

4

8

4

3

4

2

8

16

64

16

9

8

3

24

64

512

256

81

16

4

64

256

4096

65536

6561

32

5

160

1024

32768

4294967296

43046721

64

6

384

4096

262144

?

?

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

N

N*log2(N)

N2

N3

2N

N!

1000

140

31.6

10

2

1.2

Соответствие между скоростью работы алгоритма и его сложностью:

Надо уметь проводить анализ алгоритмов и определять их сложность.

Временная сложность алгоритмов м.б. посчитана исходя из анализа управляющих структур.

Вид управляющей структуры

Сложность

Присваивание

Простое выражение

Выраж 1… выраж. N

Если усл. то S1 иначе S2

Цикл от N до M {S1}

О(1)

О(1)

Домин О(выч1) …

Домин. O(выч. усл.) O(вычS1) O(вычS2)

O((M-N)*S1)

Любые алгоритмы без циклов и рекурсивных вызовов имеют константную сложность -> все управляющие структуры м.б. сведены к структурам константной сложности и весь алгоритм так же будет х-ризоваться константной сложностью.

Определение сложности алгоритма часто сводится в основном к анализу циклов или рекурсивных вызовов.

  1. Вектор А из N эл. Есть цикл по i от 1 до n {простая обработка A(i)}

Сложность: O(1) * О(N) O(N)

Начальным значением переменной цикла м.б. любая константа. Ее значение не влияет на сложность цикла. Тип цикла т.ж. не влияет на его сложность.

  1. цикл i = 1, I < n (О(N))

цикл j = 1, j < m (O(N))

{простая обработка}

Сложность: О(n2)

  1. цикл i=1 до N

оператор сложности O(P)

Сложность: О(N * P)

Вложенность повторений рассматривается, как основной фактор роста сложности. Анализ алгоритмов и программ показал, что как правило около 90% времени работы проги требуются на выполнение повторений и 10% - вычисления. Большая часть 90% - повторений наибольшей глубины вложенности.

При разработки алгоритма нужно делать:

  1. пытаться сократить глубину вложенности повторений

  2. следует сокращать кол-во операторов в циклах с наибольшей глубиной вложенности.