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 ?
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 ?
Respostas:
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ã.
"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.
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.
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.
"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
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 :
É 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.
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 :)