O que é O em Big O?


23

O que é Big e O na notação Big O? Eu li as definições e ele não diz o que é O pronunciado como 'oh'. Por exemplo - eu entendo que O (n) é a complexidade de um algoritmo linear em que n pode ser o número de operações. mas o que é um O ?


13
É a 15ª letra do alfabeto inglês. É também a 15ª letra do alfabeto grego.
Joel Etherton

1
Apenas para esclarecer: você está procurando o motivo pelo qual O é o símbolo usado (em vez de Q ou E ou algo mais) e qual o significado, se houver, O sobre outros símbolos?
FrustratedWithFormsDesigner

6
@ Joel: Na verdade, é Omicron, e essa é a pista de por que essa carta em particular foi escolhida.
Jörg W Mittag

esta resposta refuta (corretamente, eu acho) a teoria Omicron.
Hawkeye Parker

Respostas:


31

Bem, meu palpite seria ordem, que coincide com a Wikipedia .

Edit: (minha própria (qualquer melhoria apreciada)) tradução do artigo da wikipedia em alemão

A letra maiúscula O (na verdade um omícron capital na época) como símbolo da ordem de (alemão: "Ordnung von") foi usada pela primeira vez pelo teórico alemão dos números Paul Bachman na segunda edição de seu livro sobre teoria dos números analíticos. em 1894. A notação ganhou popularidade devido ao trabalho de Edmund Landau, outro teórico alemão dos números, com quem esta nomenclatura está amplamente associada atualmente, especialmente na terminologia alemã.


5
Embora possa ser o caso de muitos matemáticos se referirem a ele como tal, não foi originalmente assim. Se você ler livros de teoria dos números do início do século 20, não encontrará essa explicação. É o que é e não consigo ler alemão para descobrir qual era o pensamento dele na notação.
Jonathan Henson

1
@ Jonathan: Post atualizado.
back2dos

Muito agradável! Procurei em todos os meus livros de teoria dos números e não consegui encontrar uma explicação do O em nenhum lugar. +1
Jonathan Henson

2
Eu sempre pronunciei isso como ordem de apenas dizer O não significa muito.
Newtopian 14/09/11

16

"Grande" significa "capital" e "O" significa ordem, como em "ordem de complexidade". Assim nomeado devido à convenção de escrever "ordem de complexidade" como O (f (x)), por exemplo, com uma letra maiúscula 'O' ou um 'Big O'. Ninguém fala muito sobre isso porque 'todo mundo' entende o que significa, e entendê-lo realmente não ajuda a entender a análise de complexidade.

Para uma compreensão da análise de complexidade, acho que o link postado por topgun_ivard é um bom ponto de partida. Um bom livro introdutório cobrindo estruturas de dados ou algoritmos também pode ajudar.


5
Sinto muito, mas a notação de Bachmann-Landau foi inventada por um matemático alemão, por isso acho que ele não o teria nomeado após uma palavra em inglês. De fato, mesmo que tivesse sido inventado por um matemático americano, provavelmente ainda teria o nome de uma palavra alemã, porque quando foi inventada (por volta de 1920, eu acho), o idioma internacional da matemática era o alemão. Além disso, nem remotamente tem nada a ver com complexidade.
Jörg W Mittag

1
@ Jörg: Sim, mas que não iria ser apenas Ordnung , que o artigo wiki reivindicações alemães para ser a origem: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@ Ethel, você poderia fazer uma pequena alteração no seu artigo para que eu possa votar em você? Você está realmente correto. Você tem que editar antes que eu possa votar.
Jonathan Henson

1
@ Jonathan, eu não tenho certeza exatamente qual mudança menor você deseja. Você pode simplesmente prosseguir e fazer a edição que deseja? Ou, poderíamos simplesmente deixar resposta estande back2dos, parece que ele poderia ter acabado com a melhor resposta de qualquer maneira devido a alguma investigação de excelência :)
Ethel Evans

1
Hum, interessante. Na Suécia, Big Oh é geralmente chamado de "ordo" (latim para, bem, ordem) em vez de "ordenação" (a palavra sueca para ordem).
Vatine 21/09/12

11

O significa ordem.

Foi introduzido originalmente pelo matemático alemão Paul Bachmann no segundo volume de seus livros sobre teoria dos números Die Analytische Zahlentheorie , publicado em 1894 (p. 401) . Ele observa, após uma fórmula em que ele primeiro usa a notação:

(...) wenn wir durch das Zeichen O (n) einde Grösse ausdrucken, deren Ordnung em Bezug auf n morrem Ordnung von n überschreitet nicht (...)

Minha tradução:

(...) onde com a notação O (n) indicamos uma magnitude cuja ordem com referência a n não excede a ordem de n (...)

Em contraste com o que outros disseram, nada em seu texto indica que este seja de fato um omikron da capital grega. Ele usa muitos caracteres gregos e latinos, então não há realmente nenhuma maneira de dizer. Dado o uso continuado de "Ordnung n log n " etc. no texto, fica claro que significa "Ordnung" (alemão para "ordem" se houver alguma dúvida) em qualquer caso, mas isso ainda pode deixar em aberto o uso de um grego extravagante O.

No entanto, a origem do omikron é provavelmente um retrônimo devido a Donald Knuth, que introduziu os símbolos omega (Ω) e theta (Θ) para conceitos relacionados em seu artigo Big Omicron e Big Omega e Big Theta , ou possivelmente Hardy e Littlewood que introduziu um símbolo ômega anteriormente.


2
Interessante. Suponho que esteja certo. Eu apenas procurei as definições nos livros de Landau e Bachmann, e eles de fato a) usam um Oh latino, não um Omikron grego, b) ambos usam a palavra "Ordnung", ec) Landau afirma explicitamente que significa "Ordnung" . Eu estou corrigido.
Jörg W Mittag

Que palavra melhor poderia ser encontrada? Quero dizer, de um alemão? Ordnung ist das halbe Leben!
JensG

Penso que a primeira frase da sua resposta (correta, votada, impressionante) deve ser: 'O significa "Ordnung" (que significa alemão "Ordem"). Ajudaria esta resposta a chamar a atenção de outros leitores.
Hawkeye Parker

5

Gosto deste artigo , esperando que você o ache útil também!

Citando uma seção do artigo:
Big Greek Letters

Big O é frequentemente mal utilizado. Big O ou Big Oh é realmente a abreviação de Big Omicron. Representa o limite superior da complexidade assintótica. Portanto, se um algoritmo é O (n log n), existe uma constante c tal que o limite superior é cn log n.

Θ (n log n) (Big Theta) está mais fortemente vinculado que isso. Tal algoritmo significa que existem duas constantes c1 e c2, de modo que c1n log n <f (n) <c2n log n.

Ω (n log n) (Big Omega) diz que o algoritmo tem um limite inferior de cn log n.

Existem outros, mas esses são os mais comuns e o Big O é o mais comum de todos. Essa distinção é tipicamente sem importância, mas vale a pena notar. A notação correta é a notação correta, afinal.

O que é Big O?

A notação Big O procura descrever a complexidade relativa de um algoritmo, reduzindo a taxa de crescimento aos fatores-chave quando o fator-chave tende ao infinito. Por esse motivo, você frequentemente ouvirá a frase complexidade assintótica. Ao fazer isso, todos os outros fatores são ignorados. É uma representação relativa da complexidade.

O que não é grande O?

Big O não é um teste de desempenho de um algoritmo. Também é nocional ou abstrato, pois tende a ignorar outros fatores. A complexidade do algoritmo de classificação é normalmente reduzida ao número de elementos que estão sendo classificados como sendo o fator principal. Isso é bom, mas não leva em conta problemas como:

Uso de memória: um algoritmo pode usar muito mais memória que outro. Dependendo da situação, isso pode ser algo completamente irrelevante a crítico; Custo da comparação: pode ser que comparar elementos seja realmente caro, o que potencialmente mudará qualquer comparação no mundo real entre algoritmos; Custo dos elementos móveis: copiar elementos normalmente é barato, mas esse não é necessariamente o caso; etc.


5
Simplesmente vincular um artigo não é muito útil. Geralmente, é uma boa ideia parafrasear ou citar a seção que considera especialmente relevante para o segmento.
Demian Brecht

3
Os votos negativos são realmente necessários? O artigo que ele vinculou é muito relevante e IMHO bastante útil. Enquanto isso, a resposta mais votada é um link para um artigo da Wikipedia. +1 para compensar a hipocrisia da mente colméia.
Brandon Moretz

1
-1, porque o artigo, apesar de ser um artigo muito agradável e bem escrito, não tem nada a ver com a pergunta.
Jörg W Mittag

@ Jorg, eu nunca disse que o artigo resolveria o problema, mas compartilhei porque o achei útil quando estava analisando esses conceitos.
Topgun_ivard 13/09

3
@topgun_ivard: Então, o que acontece se ele se transformar em um link morto? Parafrasear permite: 1) o público deste tópico obter uma versão do Coles notes do seu link (tempo é dinheiro) e 2) garantir que sua postagem não seja irrelevante em um link inoperante.
Demian Brecht

2

"f (x) é grande-oh de g (x)"

É uma maneira matemática de prever o crescimento de funções.

Seja f e g funções do conjunto de números inteiros ou do conjunto ou números reais para o conjunto de números reais. Dizemos que f (x) é O (g (x)) se houver constantes C e k tais que | f (x) | <= C | g (x) | onde quer que x> k.

Você leria isso como "f (x) é grande-oh de g (x)"

O big-O às vezes é chamado de símbolo de Landau, em homenagem ao matemático alemão Edmund Landau. Eu não acho que isso representa algo além disso. Você também tem as notações big-Omega e big-Theta semelhantes. Os símbolos são tão arbitrários como sempre, usando teta para indicar os ângulos em seus triângulos na sua aula de geometria plana no ensino médio.

Correção @ back2dos forneceu uma explicação satisfatória para o O referente à ordem. Bom trabalho. Veja a resposta dele.

Donald Knuth o aplicou no estudo da complexidade dos programas de computador.

Se você deseja descobrir o motivo pelo qual a notação foi usada, leia

"Analytische Zahlentheorie", de Paul Bachmann, de 1892


2

Edição: Acontece que eu estou errado. No entanto, talvez isso ajude alguém a manter seus símbolos retos, então não vou excluí-lo.


Na verdade, é não a letra Latina Oh , é a letra grega Omicron . Infelizmente, esses dois têm exatamente o mesmo glifo; portanto, com o tempo, a versão original foi corrompida e agora é apenas Oh .

A escolha do símbolo não tem realmente nenhum significado particular, foi escolhida como um dispositivo mnemônico :

  • Omicron tem as letras MICRO, e a semântica do símbolo Omicron significa aproximadamente "menor que"
  • Ómega tem as letras MEGA, e a semântica do símbolo Omega aproximadamente significa "maior que"
  • Theta (Θ) parece um sinal de igual e a semântica do símbolo Theta significa aproximadamente "igual a"

É isso aí. Não há um significado real, é apenas um jogo de palavras, se você quiser, para ajudá-lo a lembrar a semântica mais facilmente.


2
Embora eu adorasse acreditar na sua proposta mnemônica (é uma ideia muito legal), precisarei ver algumas provas de que essa é a verdadeira intenção original de Bachmann. Forneça e eu adicionarei +1 a você.
Jonathan Henson

2
@ Jonathan Henson: Aparentemente, que foi induzido em erro pelo Prof. Knuth :-)
Jörg W Mittag

-5

ATUALIZAÇÃO: Tentativa de limpar minha resposta e ser mais preciso

A notação Big O é uma maneira de caracterizar funções de acordo com as taxas de crescimento. O O significa ordem (primeira ordem sendo n segunda ordem sendo n ao quadrado etc). E, se não me engano, este seria o pior cenário para um tempo de execução de métodos (ou armazenamento) com N elementos. Quanto maior a ordem, pior o desempenho do método.
Por exemplo, procurar um registro em uma matriz é O (1) (acredito em alguma implementação de tabelas de hash que também é o caso). Adicionar um valor ao final de uma lista de links seria O (N) porque você precisa chegar ao final da lista antes de poder adicionar o elemento etc.

Esta resposta deve ser um pouco mais correta do que minha primeira tentativa :)


2
-1 porque isso é simplesmente incorreto e AND respondeu a uma pergunta separada do que foi solicitado. A questão era por que a letra "O" é usada, não "como funciona a notação Big O?". Você está incorreto sobre como o Big-oh também funciona ... o loop através de uma matriz é O (n) onde n é o tamanho da matriz, não O (1). A notação não tem nada a ver com "ciclos" de um algoritmo ... é uma medida do limite superior do tempo de execução de um algoritmo.
Casey Patton

Não para discutir com você aqui, mas foi isso que eu quis dizer. O que significa tempo de execução, certo? Bem, o tempo de execução é determinado pelo que deve ser processado na máquina. Eu acho que meio que uso o ciclo liberalmente aqui. Pelo ciclo, acho que eu deveria ter dito iterate-through ou algo assim. Você está certo sobre o limite superior, porém, ele não determina a média. Portanto, eu aceito o downgrade.
SoftwareSavant
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.