Você pode operar e tirar conclusões sobre as funções descritas assintoticamente?

7

Esta pergunta é baseada em trabalhos de casa (embora não esteja usando o problema real)!

Digamos que você tenha uma função descrita como:

f(n)O(2n2).

Você pode então tratar isso como:

f(n)=2n2

e executa matemática nela e mantém seu significado assintótico?

No caso acima, eu poderia conjeturar que f(n)O(2n2) implica f(n)/2O(n2) (supondo que os coeficientes sejam importantes neste exemplo)?

user58907
fonte
6
Você precisaria ter muito cuidado. Lembre-se de que O () é um conjunto de funções. Tomar apenas um representante pode levar a conclusões falsas.
AdrianN
11
"Você pode então tratar isso como:" - não. "mantenha seu significado assintótico" - o que você quer dizer com isso? Algumas informações são transferidas, outras não. "No caso acima, eu poderia conjeturar" - você pode conjeturar o que quiser; o que é interessante é se você pode provar alguma coisa. Veja aqui como provar relações assintóticas. Você também pode acessar diretamente as definições: qual é a reivindicação após o desdobramentoO? O que você sabe sobref depois de se desdobrar O? Preencha o espaço intermediário.
Raphael

Respostas:

8

Para algumas operações, como adição, multiplicação, você pode operar diretamente na notação assintótica. Por exemplo, seg(n)=O(n2) e f(n)=O(n2), então g(n)+f(n)=O(n2) e g(n)f(n)=O(n4). Para algumas outras operações, como divisão, depende então. Por exemplo, parag(n)=O(n2) e f(n)=O(n2), não é correto dizer g(n)f(n)=O(1 1) (considerar g(n)=n2 e f(n)=n) No entanto, sec é uma constante fixa, então g(n)c=O(n2).

PSPACEhard
fonte
existe alguma documentação sobre quais operações são geralmente "permitidas" para notação assintótica? Ou você pode simplesmente inferir que a exponenciação é sempre permitida (multiplicação) e a logarítmica é dependente (divisão)?
Tyler Kelly
3
@ user3470987 Embora possa haver uma lista em algum lugar, você também pode gerá-la on-the-fly. Este é um excelente exercício.
Yuval Filmus
11
@ user3470987 Essa é uma questão de gosto. Pessoas como eu aconselham você a nunca fazer isso, pois isso pode facilmente levar a confusão e erros.
Raphael
3

Para responder a perguntas como a sua conjectura, use a definição de O. Parafraseando da wikipedia no momento da escrita:

fO(g) iff f(x)M×g(x) para todos x>x0 0, para algumas constantes M e x0 0.

Então se f(n)O(2n2), então f(n)C×2n2  n>n0 0 para algumas constantes C e n0 0 (Estou chamando C ao invés de Mpara evitar confusão depois). Você notará que podemos combinar o2C em uma constante, o que lhe diz O(2n2)=O(n2).

O que podemos dizer sobre f(n)/2? Agora podemos usar álgebra normal na desigualdade, como dividir os dois lados por 2 para obter:

f(n)/2Cn2  n>n0 0

Isso ainda O(n2)? To check this, we need to find constants M and x0 such that the definition above holds. In this case, M=C and x0=n0 works. Notice that M=327.6C is also valid; you can use whatever method you want to find these constants, as long as you know they are constant.

In the real world you'll be able to "shortcut" most of this when doing your analysis, as NP-hard does in his answer, but those are just shortcuts for writing it out rigorously like this (which is what I would expect on homework specifically about O). If you're not sure whether it's valid, get the Os out by using the definition, perform algebra on the inequality, then get it back into O by finding the appropriate constants (or simply showing that they do exist).

Carl Leth
fonte