Por favor, explique a afirmação de que a função an + b pertence a O (n ^ 2) e Θ (n)?


12

Digamos que eu tenha uma função linear f(n)= an+b, qual é a melhor maneira de provar que essa função pertence a O (n 2 ) e Θ(n)?

Não preciso de rigor matemático aqui. Eu preciso de uma resposta de programadores. Alguma maneira lógica de explicar.

Foi exatamente por isso que não postei a pergunta nas perguntas e respostas em matemática e, em vez disso, nas perguntas e respostas dos programadores.


2
@EmmadKareem Na literatura, muitas vezes a notação Big O é frequentemente usada casualmente para representar limites estreitos que são basicamente Θ (n). Big O é o limite superior, na verdade.
28712 Geek

1
@EmmadKareem "o limite superior de O (n) não é n * n.", Não há limite superior de O (n). O (n) em si define o limite superior. Na verdade, ele pode conter um conjunto de funções que satisfazem a condição: f (x) ∈ O (g (x)) como existe c> 0 (por exemplo, c = 1) e x0 (por exemplo, x0 = 5), de modo que f (x ) <cg (x) sempre que x> x0.
28712 Geek

2
@EmmadKareem Na verdade O (n) \ subconjunto O (n ^ 2) \ subconjunto O (n ^ 3) e assim por diante, portanto, f \ in O (n ^ 2) pela transitividade de \ subconjunto. Observe que \ subset não é \ subseteq.
23912 scarfridge

6
"Preciso de uma resposta dos programadores. Alguma maneira lógica de explicar." - bem, como você define "lógico"? A matemática é lógica. Qualquer coisa menos que um pensamento rigoroso está errado aqui. Você pode tentar explicar o tópico, mas sem digerir a matemática (caso contrário não é difícil) por trás dela, você realmente não entenderá - você terá apenas uma noção nebulosa do que isso significa.
Tamás Szelei

2
@ Geek: Eu acho que você quer dizer matemática ? cs.SE também seria um bom endereço.
Raphael

Respostas:


20

A notação Big Oh (O, Theta, Omega) é sobre taxas de crescimento de funções.

Quando você implementa um algoritmo, ele tem uma certa característica de como o tempo de execução muda quando você aumenta o conjunto de dados. Agora, você pode otimizar o algoritmo para que ele funcione mais rapidamente por um fator de 100. Claro, isso é ótimo, mas essencialmente ainda é o mesmo algoritmo. Da mesma forma, em alguns anos, os computadores podem ser duas vezes mais rápidos do que são hoje.

A notação Landau abstrai esses fatores constantes. Não se importa se um algoritmo fé sempre duas vezes mais rápido que outro g: talvez gpossa ser otimizado para executar 4 vezes mais rápido, ou você poderá comprar um hardware mais rápido. Se você olhar dessa perspectiva, pode dizer que eles são "iguais". (Isso não quer dizer que você pode (sempre) ignorar fatores constantes na prática.)

Oh grande especifica um limite superior, é semelhante à <=relação.

Você concorda que isso 1 < 2é verdade. Isso significa que 1não pode ser menor que qualquer outro número? Certamente não. Há uma quantidade infinita de números maiores que 1.

Com taxas de crescimento, é semelhante. O(n)denota o conjunto de todas as funções que crescem linearmente (ou mais lentamente). O(n^2)por outro lado, denota todas essas funções, que crescem com compelxidade quadrática (ou mais lenta). Estou certo de que você concorda que uma função linear cresce mais lentamente que uma função quadrática.

É por isso que uma função pode estar em mais de uma classe "Big-oh".

Aqui está uma comparação de diferentes funções com restrições: (da matemática de Knuth's Concrete)

comparações de taxa de crescimento

Da esquerda para a direita, as funções crescem mais rapidamente.

Além disso, o insira a descrição da imagem aquisignificado de n ^ 2 cresce mais rápido que n ^ 1 porque 2> 1.

Definições

definição Omega

"f cresce mais rápido ou igualmente rápido que g"

definição grande Oh

"f cresce mais devagar ou mais rápido que g"

definição Theta

A combinação dos dois acima. Diz que a função fcresce "igualmente rápido" como g. É uma relação de equivalência.

Interpretação

Digamos que você tenha dois algoritmos, fe g.

Ómega

Assumindo f não em Theta de g, f em Omega de gsignifica que, independentemente do seu orçamento, não há uma quantidade constante de poder de computação que você pode adicionar ao seu sistema, de modo que fsempre funcione tão rápido quanto g.

Oh grande

Assumindo f não em Theta de g, f em Big Oh of gsignifica que, se você tiver dados suficientes, fsempre será executado com mais rapidez g, independentemente da quantidade de poder de computação que você adicionar ao seu sistema.

Prova

Se você realmente está tentando provar isso, precisa mostrar, usando as definições da notação Landau, que sua função satisfaz as condições necessárias.

Então, você precisa encontrar valores para c, d, n_0de tal forma que a condição se mantém.

Aqui está como você pode fazer isso no limite inferior com c:

prova

É importante perceber que me definir arbitrariamente ccomo menor do que a-1é perfeitamente adequado. A definição de Theta (g) diz que "existe um c". Pode ser qualquer valor desde que seja maior que 0. (Se afor um número real positivo, você precisará alterar a prova um pouco, pois a - 1pode ser negativo)

(Suponho aque seja positivo, caso contrário, a função sempre será negativa para grandes valores de n, o que não faz sentido para uma função que denota o tempo de execução.)

Você pode tentar fazer isso no limite superior, é bem parecido. Se você não souber, posso fornecer uma prova para você.

Dica: comece com d > a + 1

Atenção

É importante que você não prove o contrário. Se você assume que (an + b) está em O (n) e segue a partir daí, você não provou o que queria. Você precisará verificar se todas as suas etapas seguem nos dois sentidos, ou seja, em vez de =>você <=>.


2
É isso aí. Pessoas muito más surtam por causa da matemática, na verdade é muito simples.
Tamás Szelei 28/07/12

questão afirma: "Eu não preciso de rigor matemático aqui eu preciso de uma resposta programadores ...." Notação usada neste resposta não parece ser um bom ajuste para a pergunta
mosquito

1
@gnat Hmm, eu pensei que a pergunta dizia "provar" em um ponto. De qualquer forma, adicionei interpretações para as definições matemáticas.
Phant0m

@ phant0m ótima resposta. Exatamente o que eu estava procurando . A matemática da resposta a tornou mais sólida, embora a "matemática" não tenha sido solicitada especificamente na pergunta original. Muito obrigado.
28712 Geek

@ Geek, estou feliz que você gosta. Se você tiver mais perguntas, não hesite em perguntar e eu posso esclarecer / expandir minha resposta.
Phant0m

5

Ao lidar com polinômios, você se preocupa apenas com o grau do polinômio. Ou seja, an + bvocê só se importa n. Se fosse an^3 + bn^2 + cn + d, você só se importaria n^3.

Portanto, um polinômio com grau d sempre estará Θ(n^d). Simples.

Agora precisamos falar sobre a diferença entre Θ e O. Essencialmente, é a mesma diferença entre ==e <=respectivamente. Isso Θ(n)significa que ele está sempre dentro de um fator constante de n. O(n)significa que ele está sempre dentro de um fator constante igual nou inferior a n.

Isso significa que qualquer função em Θ(s), para qualquer s, também estará em O(s). Além disso, se uma função está dentro Θ(s)e sé sempre menor do que alguma outra função t, essa função está dentro, O(t)mas não Θ(t).

Por uma questão de completude, também existe Ω(n). Se Θrepresenta ==e Orepresenta <=, Ωrepresenta >=. Então an + bestá dentro Ω(1), Θ(n)e O(n^2).

Como eu disse anteriormente, é realmente fácil descobrir em que polinômios de classe se trata - basta ver o grau. Existem outras funções fáceis de trabalhar também.

Quaisquer funções na forma de a^bnpara arbitrária ae bestão em Θ(a^n). Para qualquer valor c >= a, eles estão em O(c^n). Cada polinomial está em O(2^n). Essencialmente, isso apenas diz que funções exponenciais sempre superam polinômios e que a base da função exponencial é importante.

Logaritmos são o oposto. Por um lado, log_b né Θ(log n)para qualquer b. Isso significa que a base não importa para logaritmos. Isso faz sentido, porque alternar entre diferentes bases nos logaritmos está apenas se multiplicando por uma constante. As funções logarítmicas também estão em O(n)- ou seja, uma função logarítmica é menor que qualquer polinômio (pelo menos no grau 1).

Dada uma soma dessas funções, a maior "vence". O mesmo n + log nocorre Θ(n)porque o ntermo domina o log ntermo. A multiplicação é mais complicada. Para CS, a única coisa que você precisa saber nlog né entre ne n^2.


1
muito bom. Por minha lembrança acima explicação é tão perto clássica Algoritmo Projeto manual quanto ele ganha
mosquito

1
@Tikhlon bom escrever-se. Mas o que eu aceitei foi ainda melhor.
28712 Geek

-2

Sem usar muita matemática, você pega a função f (n) = an + b e elimina todas as constantes, para que se pareça com isto f (n) = n, então você pega o "n" com o grau mais alto como resposta QED N (n)

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.