Либо 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)) )
теперь, если мы создадим аналогичную функцию со слегка смещенным колебанием:
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)).