Либо f (n) = O(g (n)), либо g (n) = O (f(n))

Я пытаюсь доказать, что это правильно для любой функции f и g с доменом и co-доменом N. Я видел, что это доказано с использованием пределов, но, по-видимому, вы также можете доказать это без них.

по существу, я пытаюсь доказать, что " если f(n) не имеет большого-O из g(n), то g(n) должен иметь большое-O из f (n). У меня проблема в том, что я пытаюсь понять, что означает "f не имеет большой буквы g".

согласно формальному определению big-O, если f( n) = O (g(n)) тогда n>=N - > f(n)

2 ответов


не правда. Пусть f(n) = 1 Если n нечетно, и нулю в противном случае, и g(n) = 1 Если n еще и ноль в противном случае.

говорил, что f is O(g) сказал бы, что есть константа C > 0 и N > 0 такое, что n > N подразумевает f(n) <= C g(n). Пусть n = 2 * N + 1, так что n - это странно. Тогда f(n) = 1 но g(n) = 0, так что f(n) <= C * g(n) - это невозможно. Таким образом, f is O(g) - это неправда.

аналогично, мы можем показать, что g и O(f) не истинный.


прежде всего, ваше определение big-O-это мало Битт выкл. Ты говоришь:

я думаю, что это означает, что нет c, который выполняет это неравенство для всех значений n.

на самом деле, вам нужно выбрать значение c, которые удовлетворяют неравенству любой стоимостью n.

в любом случае, чтобы ответить на вопрос:

я не верю, что утверждение в вопросе истинно... Давайте посмотрим, можем ли мы придумать встречный пример, где f(n) ≠ O(g(n)) и g(n) ≠ O(f(n)).

примечание: Я буду использовать n и x взаимозаменяемо, так как мне легче так думать.

мы должны были бы придумать две функции, которые постоянно пересекаются друг с другом по мере их продвижения к бесконечности. Не только это, но они должны были бы продолжать пересекать друг друга независимо от константы c что мы multibly их.

так это заставляет меня думать, что функции должны будут чередоваться между двумя различными сложностями времени.

давайте посмотрим на функцию, которая чередуется между y = x и y = x^2:
f(x) = .2 (x * sin(x) + x^2 * (1 - sin(x)) )

Graph 1

теперь, если мы создадим аналогичную функцию со слегка смещенным колебанием:

g(x) = .2 (x * cos(x) + x^2 * (1 - cos(x)) )

тогда эти две функции будут продолжать пересекать пути друг друга до бесконечности.

для любого числа N что вы выберите, независимо от того, как высоко, будет x1 больше N такое, что f(x) = x^2 и g(x) = x. Аналогично, будет x2 такое, что g(x) = x^2 и f(x) = x.

в эти моменты вы не сможете выбрать любой c1 или c2 это гарантирует, что f(x) < c1 * g(x) или g(x) < c2 * f(x).

в заключение, f(n) ≠ O(g(n)) не означает g(n) = O(f (n)).