Пожалуйста, объясните утверждение, что функция an + b принадлежит O (n ^ 2) и Θ (n)?


12

Допустим, у меня есть линейная функция. Как f(n)= an+bлучше всего доказать, что эта функция принадлежит O (n 2 ) и Θ(n)?

Мне здесь не нужна математическая строгость. Мне нужен ответ программистов. Какой-то логичный способ объяснения.

Именно поэтому я не опубликовал вопрос в Q & A по математике, а вместо этого в Q & A для программистов.


2
@EmmadKareem В литературе часто обозначение Big O часто используется случайно для обозначения жестких границ, которое в основном равно Θ (n). Большой О - это верхняя граница.
Компьютерщик

1
@EmmadKareem "верхняя граница O (n) не является n * n." ,, верхняя граница O (n) отсутствует. O (n) само определяет верхнюю границу. В действительности он может содержать набор функций, которые удовлетворяют условию: f (x) ∈ O (g (x)), поскольку существуют c> 0 (например, c = 1) и x0 (например, x0 = 5), такие что f (x) ) <cg (x) всякий раз, когда x> x0.
Компьютерщик

2
@EmmadKareem На самом деле O (n) \ subset O (n ^ 2) \ subset O (n ^ 3) и т. Д., Таким образом, f \ in O (n ^ 2) транзитивностью \ subset. Обратите внимание, что \ subset не является \ subseteq.
шарфридж

6
«Мне нужен ответ программистов. Какой-то логичный способ объяснения». - ну как вы определяете "логический"? Математика логична. Все , что меньше , чем строгое мышление неправильно здесь. Вы можете попытаться объяснить тему, но без переваривания (в противном случае несложного) математики, стоящей за ней, вы на самом деле не получите ее - у вас будет лишь туманное ощущение того, что это значит.
Тамас Селей

2
@ Geek: Я думаю, вы имеете в виду математику ? cs.SE также будет хорошим адресом.
Рафаэль

Ответы:


20

Обозначение Большого О (O, Theta, Omega) о темпах роста функций.

Когда вы реализуете алгоритм, он имеет определенную характеристику того, как изменяется среда выполнения при увеличении набора данных. Теперь вы можете оптимизировать алгоритм так, чтобы он работал быстрее в 100 раз. Конечно, это замечательно, но, по сути, это все тот же алгоритм. Аналогичным образом, через несколько лет компьютеры могут быть в два раза быстрее, чем сегодня.

Нотация Ландау абстрагирует эти постоянные факторы. Не fимеет значения, всегда ли алгоритм работает в два раза быстрее, чем другой алгоритм g: возможно, gего можно оптимизировать, чтобы он работал в 4 раза быстрее, или вместо этого вы могли бы купить более быстрое оборудование. Если вы посмотрите на это с этой точки зрения, вы можете сказать, что они «одинаковы». (Это не значит, что вы можете (всегда) игнорировать постоянные факторы на практике.)

Большой ой указывает верхнюю границу, это похоже на <=отношение.

Вы согласитесь, что 1 < 2это правда. Означает ли это, что 1не может быть меньше, чем любое другое число? Конечно, нет. Существует бесконечное количество чисел, которые больше, чем 1.

С темпами роста это похоже. O(n)обозначает множество всех функций, которые растут линейно (или медленнее). O(n^2)с другой стороны, обозначает все те функции, которые растут с квадратичной смежностью (или медленнее). Я уверен, что вы согласитесь, что линейная функция растет медленнее, чем квадратичная функция.

Вот почему функция может быть в более чем одном классе "Big-oh".

Вот сравнение различных функций с ограничения: (из "Конкретной математики Кнута")

сравнение темпов роста

Слева направо, функции растут быстрее.

Кроме того, введите описание изображения здесьзначение n ^ 2 растет быстрее, чем n ^ 1, потому что 2> 1.

Определения

определение омега

"F растет быстрее или одинаково быстро, как G"

определение большой О

"F растет медленнее или одинаково быстро, как г"

определение тета

Сочетание двух вышеупомянутых. Это говорит о том, что функция fрастет так же быстро, как g. Это отношение эквивалентности.

интерпретация

Допустим, у вас есть два алгоритма, fи g.

Омега

Предполагается не в тета г, ф в омеге гчто это означает, что независимо от вашего бюджета, нет постоянной вычислительной мощности, которую вы можете добавить в свою систему, так что fона всегда будет работать так же быстро, как и g.

Большой ой

Предполагается не в тета г, F в Большом О гчто означает, что если у вас достаточно данных, fони всегда будут работать быстрее g, независимо от того, сколько вычислительной мощности вы добавите в свою систему.

доказательство

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

Так что вам нужно найти значение c, d, n_0таким образом, что условие выполнено.

Вот как вы можете сделать это для нижней границы c:

доказательство

Важно понимать, что меня произвольно определяют cкак меньшего, чем a-1совершенно нормально. Определение тета (g) говорит, что «существует c». Это может быть любое значение, если оно больше 0. (Если aположительное действительное число, вам, однако, нужно немного изменить доказательство, поскольку оно a - 1может быть отрицательным)

(Я предполагаю aбыть положительным, иначе функция всегда будет отрицательной для больших значений n, что не имеет смысла для функции, обозначающей время выполнения.)

Вы можете попробовать сделать это для верхней границы, это очень похоже. Если вы не знаете, как, я могу предоставить доказательство для вас.

Подсказка: начните с d > a + 1

Внимание

Важно, чтобы вы не доказали это неправильно. Если вы предполагаете, что (an + b) находится в O (n) и идете оттуда, вы не доказали, чего хотели. Вам нужно будет убедиться, что все ваши шаги идут в обе стороны, то есть вместо =>вас <=>.


2
Вот и все. Слишком плохие люди волнуются из-за математики, это очень просто на самом деле.
Тамас Селей

Вопрос гласит: «Мне здесь не нужна математическая строгость. Мне нужен ответ программистов ...» Обозначения, использованные в этом ответе, не выглядят подходящими для вопроса
комнат

1
@gnat Хм, я думал, что вопрос сказал «доказать» в один момент. Во всяком случае, я добавил интерпретации для математических определений.
phant0m

@ phant0m отличный ответ. именно то, что я искал. Математика в ответе сделала его более четким, хотя в первоначальном вопросе «математика» специально не задавалась. Благодаря тонну.
Компьютерщик

@ Гик, я рада, что тебе нравится. Если у вас есть еще вопросы, не стесняйтесь спрашивать, и я могу уточнить / расширить мой ответ.
phant0m

5

Когда вы имеете дело с полиномами, вам важна только степень полинома. То есть an + bтебя волнует только n. Если бы это было an^3 + bn^2 + cn + d, вы бы заботились только о n^3.

Таким образом, полином со степенью d всегда будет в Θ(n^d). Просто.

Теперь нам нужно поговорить о разнице между Θ и О. По сути, это та же разница, что и между ==и <=соответственно. Так Θ(n)означает , что она является всегда в постоянном факторе n. O(n)означает, что оно всегда либо в пределах постоянного фактора, nлибо меньше n.

Это означает, что любая функция в Θ(s), для любого s, также будет в O(s). Кроме того, если функция включена Θ(s)и sвсегда меньше, чем какая-либо другая функция t, эта функция включена, O(t)но нет Θ(t).

Для полноты, есть также Ω(n). Если Θпредставляет ==и Oпредставляет <=, Ωпредставляет >=. Так и an + bесть Ω(1), Θ(n)а O(n^2).

Как я уже говорил ранее, действительно легко понять, в каких классах находятся полиномы - вы просто посмотрите на степень. Есть и другие функции, с которыми легко работать.

Любые функции в форме a^bnдля произвольных aи bнаходятся в Θ(a^n). Для любого значения c >= aони находятся в O(c^n). Каждый многочлен находится в O(2^n). По сути, это просто говорит о том, что экспоненциальные функции всегда выбивают многочлены и что база экспоненциальной функции имеет значение.

Логарифмы противоположны. С одной стороны , log_b nв Θ(log n)течение любого b. Это означает, что база не имеет значения для логарифмов. Это имеет смысл, потому что переключение между различными основаниями в логарифмах просто умножается на константу. Логарифмические функции также находятся в O(n)- то есть логарифмическая функция меньше любого полинома (по крайней мере, степени 1).

Учитывая сумму этих функций, самая большая из них "выигрывает". Так и n + log nесть, Θ(n)потому что nтермин доминирует над log nтермином. Умножение сложнее. Для CS единственное, что вам нужно знать, это что nlog nмежду nи n^2.


1
вполне нормально. По моим воспоминаниям, приведенное выше объяснение настолько близко к классическому Руководству по разработке алгоритмов, насколько это возможно
gnat

1
@ Тихлон приятно писать. Так +1. Но тот, который я принял, был еще лучше.
Компьютерщик

-2

Не прибегая к большому количеству математики, вы берете функцию f (n) = an + b и отбрасываете все константы, поэтому она выглядит так: f (n) = n, а затем вы берете «n» с наивысшей степенью в качестве ответа QED Θ (п)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.