Essas notações destinam-se a denotar o crescimento assintótico. As constantes não crescem e, portanto, é praticamente igual a constante que você escolhe. No entanto, existe uma convenção de que você escolhe 1 para indicar nenhum crescimento.
Suponho que isso se deva ao fato de que você deseja simplificar os termos matemáticos em questão. Quando você tem um fator constante, apenas divida por ele e tudo o que resta é 1. Isso facilita as comparações.
Exemplo:
O (34 * n ^ 2) = O (1 * n ^ 2) = O (n ^ 2)
e
O (2567,2343 * n ^ 2/5) = O (n ^ 2)
Entendeu o que eu quis dizer? Como esses termos matemáticos se tornam cada vez mais complicados, você não deseja ter constantes ruidosas quando não são relevantes para as informações em que está interessado. Por que devo escrever O (2342.4534675767) quando é mais fácil expressar com O (1), que comunica os fatos do caso sem ambiguidade.
Além disso, o artigo da Wikipedia sobre complexidade de tempo também implica que é uma convenção:
Diz-se que um algoritmo é tempo constante (também escrito como tempo O (1)) ...
O(5 * n^2)
pareceria menos natural, enquanto soltar* 1
é matemática básica.Tudo isso é muito ondulado, mas há uma razão matemática para não usarmos Theta (c) e, em vez disso, usar Theta (1). Usarei a notação Big O para mostrar isso.
Tem a ver com uma propriedade da notação Big Theta (assim como Big O e Big Omega). Se você tem uma função com taxa de crescimento
O(g(x))
e outra com taxa de crescimentoO(c * g(x))
ondec
é constante, diria que elas têm a mesma taxa de crescimento. Isso éO(c * g(x)) = O(g(x))
Podemos dizer isso porque a definição da notação Big O (
f(x) = O(g(x))
) significa que temos uma funçãof(x)
e uma funçãog(x)
tais que,|f(x)| <= k * |g(x)|
para alguns valores constantesk
e grandes o suficiente dex
. Ao multiplicar pela constantec
, teríamos:O(c * g(x)) => k * |c * g(x)| = k * |c| * |g(x)| <= k' * g(x)
Ondek' = k * |c|
Observe que,
|k' * g(x)| <= k'' g(x)
para alguns valores constantesk''
e grandes o suficiente dex
, o que significak' * g(x)
cresce a uma taxa deO(g(x))
e, portanto,O(c * g(x)) = O(g(x))
Quando
g(x) = 1
, temosO(1)
crescimento, dizerO(c)
crescimento por algum valor dec
não nos diz nada, porque a constante já está incluída na definição da notação Big O. SimplificadoO(c) = O(1)
fonte
Bem, é claro que você poderia escrever Theta (c) (ou O (c)), mas por que isso difere de Theta (n)? n é apenas uma variável que indica o tamanho da entrada. Você pode escrever "A função é Theta (c) onde c é uma constante". O adendo importante é ... onde c é uma constante . Você precisa declarar explicitamente que um identificador não é uma variável.
Considere a teoria dos grafos em que os limites de um algoritmo são freqüentemente descritos como uma função de | V | e | E |, ou a contagem de nós e arestas, respectivamente. Então, pode ser prudente afirmar "A função é Theta (| V | * | E | ^ 2)".
Teta (1) no entanto é sempre uma constante - assumindo práticas matemáticas normais.
fonte
Theta(1) however is always a constant
.Esta é a parte que eu não get.Theta (c) é sempre uma constante como well.Right Então eu queria saber se o?1
Tem um significado especialc
nem sempre é uma constante, poisc
é uma variável se você não declarar explicitamente que ela deve ser de fato interpretada como uma constante ... Qual é exatamente a diferença sutil que é evitada1
.c
não é uma constante;c
é uma carta. Outras letras representam variáveis, como você espera que o leitor saiba que essa também não é?A notação teta é sobre crescimento em função de alguma variável - normalmente n. Se fosse necessário esclarecer qual variável se destina, a maneira de escrevê-la seria Theta (n ^ 0). A partir daí, é um passo simples para aplicar a identidade n ^ 0 = 1 (para n! = 0).
fonte
n^0
denotar tempo constante e nãon^1
no seu exemplo?O ( c ) significa especificamente que a classe de algoritmos associada cresce linearmente com c , onde c é o tamanho de uma entrada para o algoritmo ou um parâmetro para o algoritmo . Não é o mesmo c que é usado para explicar a notação O, porque esse c é relevante apenas para a explicação, não para o uso. O ( c ) contém um c diferente que deve vir do contexto de entrada do algoritmo.
fonte