Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЛАВА_3_15_09.doc
Скачиваний:
3
Добавлен:
14.11.2018
Размер:
142.34 Кб
Скачать

8

Глава 3. Размер задачи. Сложность алгоритма

3.1. Размер задачи. Скорость роста

Все решаемые задачи требуют предварительного задания исходных данных. Как правило, в них можно выделить характерное число, определяющее величину этих данных. Например:

а) при проверке, будет ли заданное число простым или составным, характерным является само число,

б) при поиске максимального элемента массива - длина массива.

При вводе в ЭВМ исходные данные кодируются каким–либо способом. Числовые данные обычно представляют в позиционных системах счисления. Символьная информация задаётся в стандартных кодах либо в специальном графическом представлении.

Как правило, с точки зрения принципиального решения задачи все способы кодирования эквивалентны. Однако в ряде случаев за счёт более удобной формы представления можно использовать более простой или быстрый алгоритм.

Размером задачи называют длину последовательности символов, в которой закодированы все исходные данные.

Для ЭВМ размер памяти обычно оценивается числом байтов – последовательностей из восьми бинарных разрядов.

С ростом n размер задачи всегда возрастает, однако в одних случаях необходимое число символов возрастает быстрее, чем в других. Для оценки поведения функций, зависящих от целочисленных натуральных характеристических параметров, вводят понятие скорости роста.

Рассмотрим на множестве натуральных чисел N функции f(n) и g(n).

1. Функции g(n) и f(n) имеют одинаковую скорость роста, если при всех достаточно больших n, начиная с некоторого n0, выполняется условие:

С1 f(n) ≤ g(n)≤ С2 f(n), где С1>0,С2>0 – некоторые константы.

2. Скорость роста функции g(n) больше скорости роста функции f(n), если для любой сколь угодно большой константы С существует некоторое n0, начиная с которого выполняется условие:

С f(n) ≤ g(n).

3. Скорость роста функции g(n) ограничена снизу скоростью роста функции f(n), если при всех достаточно больших n, начиная с некоторого n0, выполняется:

С f(n) ≤ g(n), где С – константа.

4. Скорость роста функции g(n) ограничена сверху скоростью роста функции f(n), если при всех достаточно больших n, начиная с некоторого n0, выполняется условие:

g(n) ≤ С f(n), где С – константа.

Данное определение позволяет сравнивать между собой скорости роста функций достаточно произвольного вида – как имеющих, так и не имеющих предел отношения g(n)/f(n) при n  .

Замечание. Если скорость роста функции g(n) равна скорости роста функции f(n), то скорость роста f(n) ограничивает скорость роста g(n) и сверху и снизу.

Пример 1. Рассмотрим задачу с характерным параметром n, у которой входными данными являются все простые делители числа n, не равные единице. С увеличением n число делителей k(n) будет постоянно изменяться в пределах от 1 (у простого числа) до log2n (у степеней 2). Поэтому для длины входа k(n) не существует элементарной монотонной функции с одинаковой скоростью роста. Для неё можно только лишь указать ограничения, верные при любых n: 1≤ k(n) ≤ log2n.

В общем случае для каждой положительной функции натурального параметра k(n) возможны следующие варианты:

1) не существует монотонной функции f(n) со скоростью роста, равной k(n), но при всех n, начиная с некоторого n0, возможны лишь оценки:

Cн fн(n) ≤ k(n) ≤ Cв fв(n),

где Cн>0, Cв>0 – нижняя и верхняя константы, fн(n), fв(n) – различные функции.

2) существует монотонная функция f(n), имеющая одинаковую скорость роста с k(n), для которой по определению при всех n, начиная с некоторого n0, выполняется:

Cн f(n) ≤ k(n) ≤ Cв f(n),

где Cн, Cв – константы,

В варианте 2) предел отношения k(n)/f(n) при n  может:

а) не существовать и

б) существовать, при этом:

Случай 2 б) является наиболее распространенным при анализе скорости роста реальных функций натурального параметра. Константу Ср в приведенном выше пределе назовем константой скорости роста, а соответствующую скорость роста – устойчивой.

Функции g(n), зависящие от натурального параметра n, могут иметь любой вид, однако скорости их роста f(n) для большей наглядности и упрощения сравнений выражают через модельные элементарные функции (логарифмы, степенные, показательные и др) либо их произведения. Наиболее часто используют степенные функции nα. При α = 1 скорость роста функции nα называют линейной, при α = 2 – квадратичной, при α =3 – кубической и т.д. Все скорости роста вида nα называют полиномиальными. С увеличением показателя α полиномиальная скорость роста также возрастает.

Существуют функции, скорости роста которых превосходят при n→ ∞ любую (со сколь угодно большим показателем α) полиномиальную скорость. Например, 2n, еn, n!. Скорости такого типа называют экспоненциальными.

Из двух функций g1(n), g2(n) с одинаковой устойчивой скоростью роста f(n) меньшие значения в пределе будет иметь функция с меньшей константой скорости роста Ср.

Пример 2. Определить скорость роста f(n) функции g1(n)=(n–5)/3, константу скорости роста Ср, а также определить пороговое значение параметра n0 и константы С1 , С2, при которых справедливо соотношение: С1 f(n) ≤ g(n) ≤ С2 f(n).

Решение. Так как при n предел отношения g1(n)/n существует и равен 1/3, то скорость роста функции g1(n) равна линейной полиномиальной f(n)=n1, а константа скорости роста Ср =1/3.

Определим параметры n0, С1, С2. Для этого используем следующие соотношения :

(1/6) n 1 (n-5)/3 (1/3) n 1.

Правое неравенство очевидно и выполняется при любых n, константа (1/6) в левой части задана произвольно из условия (1/6) < (1/3), величину n0 определим из левого неравенства:

(1/6) n1 (n – 5)/3 3 n 6 n 30 3 n  30 n 10.

Ответ: f(n)=n1, Ср =1/3, n0 =10, С1 = 1/6, С2 =1/3.

Пример 3. Определить скорость роста f(n) функции g2(n)=0,25(n–1)(n+2), константу скорости роста Ср, а также определить пороговое значение параметра n0 , нижнюю и верхнюю константы С1 , С2 , при которых справедливо соотношение С1 f(n)≤ g(n) ≤ С2 f(n).

Решение. При n предел отношения g2(n)/n2 существует и равен 1/4. Следовательно, скорость роста функции g2(n) равна квадратичной полиномиальной f(n)=n2, Ср =1/4.

Определим n0 , С1 , С2 . Для этого используем соотношение

n2/4  0,25(n–1)(n+2)  n2/3.

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

Левая часть:

n2/4  0,25 (n–1)(n+2) n2 n2+n –2 n 2 n0 =2.

Правая часть:

0,25(n–1)(n+2) n2/3 3n2+3n–6  4n2 n2–3n+6  0.

Так как дискриминант уравнения отрицательный, то данное неравенство справедливо при любых n.

Ответ: f(n)=n2, Ср =1/4, n0 =2, С1 = 1/4, С2 =1/3.

Обозначим скорость роста размера задачи через r(n). Рассмотрим примеры её определения.

Пример 4. При проверке, будет ли число n простым или составным, r(n) задачи определяется длиной записи самого числа n. В позиционной системе с основанием р число бит, в записи числа n равно ]logр n[, а размер задачи в байтах r(n)=]logр n[/8.

Пример 5. Задача коммивояжера (ЗК). Задано n упорядоченных населенных пунктов {vn}={v1, v2, ... , vn}. Все расстояния между ними известны и заданы симметричной матрицей стоимости С размером n n, элементы которой удовлетворяют неравенству треугольника, т.е. при любых i, j, k, лежащих в пределах 1≤ i, j, k n, справедливы соотношения: с i j = с j i ; с i j + с j kс i k .

Коммивояжеру требуется выбрать из всего множества циклических обходов {О (vn )} пунктов {vn}, такой обход Оnопт, у которого общая длина

n-1

L(Оnопт)= ∑ с i j, i (j+1) + с i n, i 1

j=1

будет минимально возможной.

В задаче изо всех исходных данных наиболее быстро (n2) растёт число элементов симметричной матрицы стоимости С размером nn. Поэтому скорость роста размера данной задачи будет квадратичной полиномиальной – r(n)= n2.

Вопросы для проверки знаний.

1. Что называют размером задачи и в каких единицах ее измеряют в ЭВМ ?

2. Что означает, что функции g(n) и f(n) имеют одинаковую скорость роста ?

3. Что означает, что скорость роста одной функции больше скорости роста другой функции ?

4. Что означает, что скорость роста функции g(n) ограничена снизу скоростью роста функции f(n) ?

5. Могут ли значения функции g(n), у которой скорость роста ограничена сверху скоростью роста функции f(n), превышать значения данной функции ?

6. В каком случае скорость роста функции называют устойчивой и что называют константой скорости роста ?

7. Какие скорости роста функций называют полиномиальными, линейными, квадратными и кубическими ?

8. Какие скорости роста функций называют экспоненциальными ?

Практические задания.

1. Определить постоянную скорость роста f(n) функции g(n) =5(n-1)(n+3)/(n+5), константу скорости роста Ср , а также найти значения n0 , С1 , С2 , при которых справедливо соотношение С1 f(n) ≤ g(n) ≤ С2 f(n).

2. Найти скорость роста f(n) и константы скорости роста Ср функций:

а) g1(n)=0,1 (n! – 2n2+ 3n+ 10)/(3n–1);

б) g2(n)=(еn+ 3n10+ 7)(4n3 -6n2 + 2n + 5);

в) g3(n)= 2n+ n n n2 .

3. Доказать, что:

а) скорость роста функции n! превосходит в пределе при n→∞ скорость роста функции 2n ;

б) скорость роста функции 2n превосходит в пределе при n→ ∞ любую (со сколь угодно большим показателем α) скорость роста полиномиальной функции nα .

4. Выяснить для функции скорости роста f(n) = n2(1+(–1)n) + 2n+1:

а) устойчивость скорости роста,

б) ограниченность снизу,

в) ограниченность сверху.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]