O que exatamente a notação grande representa?


179

Estou realmente confuso sobre as diferenças entre notação O grande, Omega grande e grande Theta.

Eu entendo que grande O é o limite superior e grande Omega é o limite inferior, mas o que exatamente representa big (teta)?

Eu li que isso significa um limite , mas o que isso significa?


Respostas:


93

Isso significa que o algoritmo é grande-O e grande-Ômega na função fornecida.

Por exemplo, se for Ө(n), existe alguma constante k, de modo que sua função (tempo de execução, qualquer que seja), seja maior que n*ka suficientemente grande ne algumas outras constantes, de Kmodo que sua função seja menor que n*Ka suficientemente grande n.

Em outras palavras, para suficientemente grande n, ele está imprensado entre duas funções lineares:

Por k < Ke nsuficientemente grande,n*k < f(n) < n*K


Não, essas variáveis ​​são um pouco confusas, não são relacionadas.
Aaron Robeson

@committedandroider Não, são minúsculas e maiúsculas, portanto, diferentes, ele está usando o estilo matemático típico no qual duas variáveis ​​"semelhantes" (mas não relacionadas de forma alguma aqui) usam maiúsculas e minúsculas.
Santropedro 07/07/19

329

Primeiro vamos entender o que são grandes O, grandes Theta e grandes Omega. Eles são todos os conjuntos de funções.

O grande O está dando um limite superior assintótico , enquanto o grande Omega está dando um limite inferior. Big Theta dá os dois.

Tudo o que é Ө(f(n))também é O(f(n)), mas não o contrário.
T(n)é dito estar dentro Ө(f(n))se estiver dentro O(f(n))e dentro Omega(f(n)).
Na terminologia de conjuntos, Ө(f(n))é a interseção de O(f(n))eOmega(f(n))

Por exemplo, o pior caso de classificação de mesclagem é ambos O(n*log(n))e Omega(n*log(n))- e também é Ө(n*log(n)), mas também é O(n^2), pois n^2é assintoticamente "maior" que ele. No entanto, é não Ө(n^2) , já que o algoritmo não é Omega(n^2).

Uma explicação matemática um pouco mais profunda

O(n)é o limite superior assintótico. Se T(n)for O(f(n)), significa que, de um certo n0, existe uma constante Ctal que T(n) <= C * f(n). Por outro lado, o Omega grande diz que existe uma constante C2que T(n) >= C2 * f(n))).

Não confunda!

Não deve ser confundida com a análise de casos piores, melhores e médios: todas as três notações (Omega, O, Theta) não estão relacionadas à melhor, pior e média análise de algoritmos. Cada um deles pode ser aplicado a cada análise.

Nós geralmente o usamos para analisar a complexidade de algoritmos (como o exemplo de classificação de mesclagem acima). Quando dizemos "Algoritmo A é O(f(n))", o que realmente queremos dizer é "A complexidade dos algoritmos sob a pior análise de 1 caso é O(f(n))" - ou seja - ela escala "semelhante" (ou formalmente, não pior que) a função f(n).

Por que nos preocupamos com o limite assintótico de um algoritmo?

Bem, existem muitas razões para isso, mas acredito que as mais importantes são:

  1. É muito mais difícil determinar a função exata da complexidade, assim "comprometemos" as notações big-O / big-Theta, que são suficientemente informativas teoricamente.
  2. O número exato de operações também depende da plataforma . Por exemplo, se tivermos um vetor (lista) de 16 números. Quantas operações serão necessárias? A resposta é: depende. Algumas CPUs permitem adições de vetores, enquanto outras não, então a resposta varia entre diferentes implementações e máquinas diferentes, o que é uma propriedade indesejada. A notação big-O, no entanto, é muito mais constante entre máquinas e implementações.

Para demonstrar esse problema, consulte os seguintes gráficos: insira a descrição da imagem aqui

É claro que f(n) = 2*né "pior" que f(n) = n. Mas a diferença não é tão drástica quanto na outra função. Podemos ver que f(n)=lognrapidamente ficando muito mais baixo do que as outras funções e f(n) = n^2está rapidamente ficando muito mais alto que as outras.
Portanto - por causa dos motivos acima, "ignoramos" os fatores constantes (2 * no exemplo dos gráficos) e pegamos apenas a notação big-O.

No exemplo acima, f(n)=n, f(n)=2*nambos estarão dentro O(n)e dentro Omega(n)- e, portanto, também estarão dentro Theta(n).
Por outro lado - f(n)=lognestará em O(n)(que é "melhor" do que f(n)=n), mas não será em Omega(n)- e, portanto, também não estará em Theta(n).
Simetricamente, f(n)=n^2estará em Omega(n), mas NÃO em O(n), e, portanto, - também NÃO Theta(n).


1 Geralmente, embora nem sempre. quando falta a classe de análise (pior, média e melhor), realmente queremos dizer o pior caso.


4
@krishnaChandra: f(n) = n^2é assintoticamente mais forte e n, portanto, é Omega (n). No entanto, não é O (n) (porque, para nvalores grandes , é maior c*n, para todos n). Como dissemos que Theta (n) é a interseção de O (n) e Ômega (n), uma vez que não é O (n), não pode ser Theta (n) também.
amit

8
É ótimo ver alguém explicar como a notação big-O não está relacionada ao melhor / pior caso de execução de um algoritmo. Existem muitos sites que surgem quando eu pesquiso no google o tópico que diz O (T (n)) significa o pior caso de tempo de execução.
Will Sewell

1
@almel É 2 * n (2n, duas vezes n) não 2 ^ n
amit

5
@VishalK 1. Big O é o limite superior , pois n tende ao infinito. 2. Omega é o limite inferior , pois n tende ao infinito. 3. Teta é tanto o limite superior quanto o inferior , pois n tende ao infinito. Observe que todos os limites são válidos apenas "como n tende ao infinito", porque os limites não são válidos para valores baixos de n (menor que n0 ). Os limites são válidos para todos nn0 , mas não abaixo de n0 onde os termos de ordem inferior se tornam dominantes.
bain

1
@hey_you Leia a resposta novamente. big O, Theta, Omega são para funções, não para algoritmos. A classificação de mesclagem é o pior caso de Omega (n). Também é O (n ^ 2) melhor caso. É também o pior caso de Theta (nlogn). Basicamente, para cada análise (pior / melhor / média / ...) você tem uma função de complexidade T_best(n), T_worst(n), T_average(n). Eles não precisam ser idênticos (e principalmente, não são). O / Omega / Theta pode ser aplicado a qualquer um deles independentemente.
Amit

14

Teta (n): Uma função f(n)pertence Theta(g(n)), se houver constantes positivas c1e c2tais que f(n)possam ser encaixadas entrec1(g(n)) e c2(g(n)). ou seja, fornece limites superior e inferior.

Teta (g (n)) = {f (n): existem constantes positivas c1, c2 e n1 de modo que 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) para todos n> = n1}

quando dizemos f(n)=c2(g(n))ouf(n)=c1(g(n)) representa um limite assintoticamente rígido.

O (n): fornece apenas o limite superior (pode ou não ser apertado)

O (g (n)) = {f (n): existem constantes positivas c e n1 de tal forma que 0 <= f (n) <= cg (n) para todos n> = n1}

ex : o limite 2*(n^2) = O(n^2)é assintoticamente apertado, enquanto o limite 2*n = O(n^2)não é assintoticamente apertado.

o (n): fornece apenas o limite superior (nunca um limite apertado)

a diferença notável entre O (n) e o (n) é f (n) é menor que cg (n) para todos n> = n1, mas não é igual ao de O (n).

ex : 2*n = o(n^2), mas2*(n^2) != o(n^2)


1
Você não mencionou o Omega grande, que se refere ao limite inferior. Caso contrário, muito boa primeira resposta e bem-vindo!
bohney

1
gostei da maneira como ele definiu a definição de Theta (n). Voto a favor!
user720694


1

Notação Big Theta:

Nada para atrapalhar amigo !!

Se temos funções com valor positivo f (n) eg (n) adota um argumento com valor positivo n então ϴ (g (n)) definido como {f (n): existem constantes c1, c2 e n1 para todos n> = n1}

onde c1 g (n) <= f (n) <= c2 g (n)

Vamos dar um exemplo:

Seja f (n) =

g (n) =

c1 = 5 ec2 = 8 en1 = 1

Entre todas as notações, ϴ fornece a melhor intuição sobre a taxa de crescimento da função, porque nos dá um vínculo estreito, diferente do big-oh e do big -ega, que fornece os limites superior e inferior, respectivamente.

ϴ nos diz que g (n) é o mais próximo possível de f (n), a taxa de crescimento de g (n) é o mais próximo possível da taxa de crescimento de f (n).

veja a imagem para ter uma melhor intuição


0

Antes de mais nada teoria

  1. O grande = limite superior O (n)

  2. Theta = Função da ordem - theta (n)

  3. Omega = Notação Q (Limite inferior) Q (n)

Por que as pessoas estão tão confusas?

Em muitos blogs e livros, como esta declaração é enfatizada é como

"Este é Big O (n ^ 3)" etc.

e as pessoas muitas vezes confundem como o tempo

O (n) == teta (n) == Q (n)

Mas o que vale a pena lembrar é que são apenas funções matemáticas com nomes O, Theta e Omega

então eles têm a mesma fórmula geral de polinômio,

Deixei,

f (n) = 2n4 + 100n2 + 10n + 50 então,

g (n) = n4, então g (n) é a função que assume a função como entrada e retorna variável com Biggerst Power,

Mesmo f (n) & g (n) para Abaixo de todas as explicações

Big O - Função (Fornece Limite Superior)

Grande O (n4) = 3n4, porque 3n4> 2n4

3n4 é o valor de Big O (n4) Assim como f (x) = 3x

n4 está desempenhando um papel de x aqui, então,

Substituindo n4 por x'so, Big O (x ') = 2x', agora estamos felizes o conceito geral é

Então 0 ≤ f (n) ≤ O (x ')

O (x ') = cg (n) = 3n4

Valorização,

0 ≤ 2n4 + 100n2 + 10n + 50 ≤ 3n4

3n4 é nosso limite superior

Teta (n) fornece limite inferior

Teta (n4) = cg (n) = 2n4 Porque 2n4 ≤ Nosso Exemplo f (n)

2n4 é o valor de teta (n4)

então, 0 ≤ cg (n) ≤ f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4 é nosso limite inferior

Omega n - Função Order

Isso é calculado para descobrir que o limite inferior do tempo é semelhante ao limite superior,

Caso 1). O limite superior é semelhante ao limite inferior

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

Caso 2). se o limite superior não for semelhante ao limite inferior

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

Espero que isso explique !!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.