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.