Digamos que eu tenho um gráfico com arestas. Eu quero executar o BFS no que tem um tempo de execução de .
Parece natural escrever que o tempo de execução neste gráfico seria e, em seguida, simplificaria para .
Existem armadilhas para usar esse atalho "remove-the-anested-O" (não apenas nesse caso, mas de maneira mais geral)?
terminology
asymptotics
landau-notation
The Unfun Cat
fonte
fonte
Respostas:
Deixe-me começar com uma recomendação: trate a notação Landau da mesma maneira que você deve tratar o arredondamento: arredondar raramente, arredondar tarde. Se você souber algo mais preciso do queO(.) , use-o até concluir todos os cálculos e faça o Landauify no final.
Quanto à questão, vamos examinar esse abuso de notação¹. Como interpretaríamos algo comoh∈O(f+O(g)) ? Devemos substituirO com sua definição de dentro para fora. Então, nós temos
e depois
que é equivalente a
Como certamente²d( f( n ) + c g(n))≤cd(f(n)+g(n)) , vemos que isso é equivalente a h∈O(f+g) ; a perda de precisão é ignorada porO de qualquer forma.
E quanto a outras combinações, digamosh∈O(f+Ω(g)) ? Se tentarmos o mesmo aqui, obtemos
Mas isso é uma tautologia:h é certamente delimitado acima por algo arbitrariamente grande. Portanto, combinar limites superior e inferior dessa maneira não é significativo.
fonte
Eu só queria adicionar isso porque o encontrei recentemente. Embora este atalho seja bom com adição e multiplicação (quando não estiver misturandoO com Ω ; veja a resposta aceita), deve-se tomar cuidado ao usar expoentes. Por exemplo:
fonte
Por definição,O(g) é um conjunto e se você usar essa notação aninhada, você teria um conjunto em um conjunto, o que estaria errado.
A definição da notação O
O erro
Você usou termos comoO(O(n)+k) onde k e n são funções e O(n) é um conjunto. Mas qual é o resultado de uma função adicionada a um conjunto? Não está definido!
Versão correta
Em vez de usar os símbolos do Landau aninhados, você pode fazer o seguinte:O(m+k),m∈O(n)
fonte
Na seção 9.3 "O Manipulação "do livro Concrete Mathematics (Second Edition), Knuth listou algumas regras de manipulação noO -notation (A seguir, assumo que ambos f( N ) e g( N ) são positivos; observe que a ordem das regras foi alterada).
By (3), you can wrap/unwrap a functionf(n) with an O-notation. Then by (5), you can actually wrap/unwrap (or called, nest) it arbitrarily finite times. Using (4), you can also add/remove constant multiplication factors to/from O .
Then, (2) and (6) allow you to manipulate nestedO -notations in the way compatible with + and × .
fonte