2015-03-19 3 views
3

Если мне удалось доказать, что f(n) = o(g(n)) (small o), кажется достаточно разумным, что сумма двух функций f(n) + g(n) должна быть тесно связана с «большой» функцией g(n)., если f (n) = o (g (n)), то g (n) + f (n) = Θ (g (n))?

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

+0

Уравнение не имеет смысла. f (n) - действительная функция, а g (n) - функция сложности. Вы не можете «суммировать» их вместе, они несовместимы. –

+1

@LieRyan Нет ничего неотъемлемо несовместимого в отношении 'f' и' g'. Обычно вы не видели, чтобы их добавляли вместе, если вы обсуждали асимптотическую сложность времени алгоритмов, но это не единственная вещь, для которой используется 'o()'. – Sneftel

+0

@LieRyan Я думаю, что это идеальное звуковое уравнение, например. см. [Википедия] (https://en.wikipedia.org/wiki/Big_O_notation#Little-o_notation) или [некоторые примечания к лекции MIT] (http://web.mit.edu/16.070/www/lecture/big_o.pdf) для справки. – collapsar

ответ

2

Следующая рассуждение показывает 'плотно связаны' в смысле асимптотической идентичности (Theta):

f = o(g) 
<=> lim_n->oo (f(n)/g(n)) = 0 
=> lim_n->oo ((f(n)+g(n))/g(n)) 
    = lim_n->oo (f(n)/g(n)) + lim_n->oo (g(n)/g(n)) 
    =   0    +   1 
0
f(n) = o(g(n)) means that |f(n)|<|C*g(n)| 
+ 
g(n) = Θ(g(n)) means that |C1*g(n)|<=|g(n)|<=|C2*g(n)| 
------------------------------------------------------- 
f(n)+g(n) = Θ(g(n))+o(g(n))=Θ(g(n)) because |C1*g(n)|<=|g(n)+f(n)|<|(C+C2)*g(n)| 
0

Это довольно легко.

Если f(n) = o(g(n)), то строго мы k, что делает |f(n)| < 0.5 * |g(n)| когда n > k (в соответствии с определением мало-O).

Таким образом, 0.5 * |g(n)| < |f(n) + g(n)| < 1.5 * |g(n)| = Θ(g(n)) для n > k.

QED.

Если f(n) и g(n) все положительно определены, то вам не нужно сильное условие малой о. Однако, когда это не так, тогда требуется сильное условие, потому что иначе f(n) может полностью отменить g(n). (например, f(n) = -g(n))

+0

Строго говоря, вы только доказали, что 'f + g' ограничено множителем с постоянным множителем' g' сверху (так что 'f + g = O (g)' [Big-O]) - завершить асимптотику эквивалентности, вы должны утверждать то же самое снизу. Приведенные вами аргументы также относятся к 'f = O (g), f! = O (g)' и не используют более сильное условие для Litte-O. – collapsar

+0

@collapsar Да, вы правы. Я сделал только половину этого. Отредактировал мой ответ. – Tippisum

Смежные вопросы