Асимптотическая ограниченная граница для квадратичных функций

В CLRS (Введение в алгоритмы Cormen, Leiserson, Rivest и Stein) для функции

f (n) = an 2 + bn + c

они сказали

Предположим, что мы берем константы c 1= a/4, c 2= 7 a/4, а n 0= 2 · max (| b |/a, √ (| c |/a)).
Тогда 0 ≤ c 1 n 2 ≤ a 2 + bn + c ≤ c 2 n 2 для всех n ≥ n 0.
Поэтому f (n) является Θ (n 2).

Но они не указали, как появились значения этих констант?
Я пытался это доказать, но не мог. Скажите, пожалуйста, как пришли эти константы?

Ответ 1

Нет ничего особенного в этих конкретных константах (кроме того, что в контексте некоторого значения n они будут удовлетворять тети f). Никакой магии. Если вы можете найти другие положительные константы, в которых справедливо соотношение, которое справедливо (фактически, c1 может быть ka для любого 0<k<1). Хотя, поскольку они есть, проанализируйте c1:

Нам нужно, чтобы оно удовлетворяло следующему неравенству:

c1*n^2 <= an^2 + bn + c

Пусть принимают значение: c1 = a/4. Для чего n мы можем гарантировать, что выполняется неравенство? Мы могли бы решить:

a/4*n^2 <= an^2 + bn + c
<==> 0 <= 3a/4*n^2 + bn + c

Квадратичный имеет решения в (-b +- sqrt(b^2-3ac)) / (3a/2), только положительный из которых представляет какой-либо интерес, так как мы имеем положительный старший многочлен коэффициента, поэтому нам нужно n > 2 * (sqrt(b^2-3ac) - b) / 3a, которое хорошо определено в предположении b^2 >= 3ac (а если нет, то квадратичная положительно определенная, что еще лучше, так как ее ^ = 0 всюду и неравенство выполняется для всех п). Я должен указать, что это правильное решение, хотя мы сделаем немного больше работы, пока не придем к представлению книги.

Мы можем разбить наш анализ на 2 случая. Во-первых, предположим |b|/a >= sqrt(|c|/a). Поэтому мы можем связать сверху sqrt(...) с 4b^2 и потребовать n > 2/3 * [sqrt(4b^2)-b]/a, которая может быть ограничена сверху 2/3 * 3|b|/a = 2|b|/a.

Второй случай, допустим |b|/a < sqrt(|c|/a). Таким образом, мы можем связать сверху sqrt(...) с 4a|c| и потребовать n > 2/3 * [sqrt(4a|c|)-b]/a, который может быть ограничен верхним значением 2/3 * 3*sqrt(a|c|)/a = 2sqrt(|c|/a).

Итак, в каждом случае мы видим, что при выполнении max(|b|/a, sqrt(|c|/a)) наше неравенство имеет место, когда n > 2 * max

Аналогично для c2.

Ответ 2

Идея состоит в том, чтобы (при достаточно большом n) "захватить" интересующую функцию между двумя "чистыми" функциями роста (имеющими только одну константу пропорциональности). На этом рисунке две квадратичные функции (выделенные красным и синим) попадают в ловушку между двумя чистыми функциями роста (черными), а в каждом случае указывается минимально возможное значение n 0.

enter image description here

Итак, как только вы выбрали значения c 1 и c 2, вы можете найти значение n 0, пересекая ваши функции с двумя чистыми функциями роста и пересечением самой правой точки.

Но вы не заботитесь о получении наименьшего возможного значения для n 0 - здесь мы делаем асимптотику, поэтому любое достаточно большое значение будет делать - так что вы можете использовать приближения, чтобы получить верхнюю связанный с ним.

См. ответ davin о том, как получить верхнюю границу для n 0 в форму, указанную в CLRS.

Ответ 3

c1 и c2 можно выбрать произвольно, пока 0 < c1 < a и a < c2 < infinity. n0 вычисляется из этого, так что для всех n>=n0 выполняется неравенство 0 <= c1*n^2 <= an^2 + bn + c <= c2*n^2.

Ответ 4

Чтобы доказать, что любой многочлен f (n) = a0 + a1 * n + a2 * n ^ 2 + a3 * n ^ 3 +... + am * n ^ m равен theta (n ^ m), следуйте двум простые шаги. шаг 1. показывают, что f (n) является большим Oh (n ^ m) шаг 2. показывают, что f (n) является большим Омега (n ^ m)

Если оба вышеуказанных условия сохраняются хорошо, то определенно f (n) велико. Theta (n ^ m).

Это обобщение. Полагая m = 2, вы получаете f (n) bigTheta (n ^ 2) Простой.. не так ли?

Ответ 5

хорошо его легко 1.c1 <= a + b/n + c/n ^ 2 Теперь здесь a > 0, а b, c - либо положительные, либо отрицательные Теперь мы должны выбрать значение n такое, что b/n + c/n ^ 2 никогда не превосходит a в RHS вышеизложенного, потому что иначе оно станет отрицательным, и так будет c1. но по определению c1 является положительной константой

Итак, мы хотим убедиться a > б/п + с/п ^ 2

если выберем n = 2 * max (| b |/a, sqrt (| c |/a)) мы получим b/n + c/n ^ 2 как выражение, значение которого меньше a/2 + a/4.

таким образом, a + b/n + c/n ^ 2 будет иметь максимальное значение как a + a/2 + a/4 и минимальное значение как a- (a/2 + a/4), которое есть не что иное, как значения c2 и c1.

c1 = a-a/2-a/4 = a/4 c2 = a + a/2 + a/4 = 7a/4

Это понятие можно распространить на любые значения для любого многочлена.

ура!!!

Ответ 6

P (n) = an 2 + bn + c = an 2 (1 + b/(an) + c/(an 2)) = an 2 (1 ± (| b |/a)/n ± (√ (| c |/a)/n) 2
поэтому, если взять, например, q = max (| b |/a, √ (| c |/a)), чем P (n) ≤ an 2 (1 + (q/n) + (q/n) 2) и если мы возьмем n 0= q, мы получим вторую константу c 2= 3a аналогично для нижней границы