Big O Notation: O Pesadelo do Programador Iniciante

Big O Notation: O Pesadelo do Programador Iniciante

O que é Big O Notation?

Visão geral da seção: Nesta seção, o palestrante explica o que é Big O Notation e como ela é usada para medir a eficiência de algoritmos em termos de tempo e espaço.

Conceito básico

  • Big O Notation é uma notação usada para medir a eficiência de algoritmos em termos de tempo e espaço.
  • É uma forma concisa e padrão de descrever algo que seria muito longo para explicar.
  • Com Big O Notation, você pode comparar diferentes algoritmos para ver qual tem melhor desempenho em termos de tempo e espaço.

Como funciona

  • A notação Big O indica o quão rapidamente o tempo ou espaço necessário para executar um algoritmo aumenta à medida que o tamanho da entrada aumenta.
  • Existem sete maneiras diferentes de representar esse crescimento.
  • Por exemplo, um algoritmo com uma notação Big O de n significa que seu tempo máximo de execução cresce linearmente com o tamanho da entrada.

Exemplos práticos

  • Uma função simples que imprime o primeiro elemento de uma lista tem uma notação Big O constante (O(1)).
  • Um loop for que percorre todos os elementos em uma lista tem uma notação Big O linear (O(n)).
  • Um loop for dentro do outro teria uma notação quadrática (O(n²)).

Como usar a notação Big O na prática?

Visão geral da seção: Nesta seção, o palestrante explica como usar a notação Big O na prática ao avaliar diferentes algoritmos.

Avaliando algoritmos

  • Ao avaliar diferentes algoritmos, escolha aquele com a menor notação Big O possível.
  • No entanto, a notação Big O não é uma medida precisa do desempenho de um algoritmo em todos os casos.
  • É importante considerar outros fatores, como o tamanho da entrada e as limitações do hardware.

Exemplo prático

  • Um algoritmo com uma notação Big O de n² pode ser mais rápido que um algoritmo com uma notação Big O de n para entradas pequenas.
  • No entanto, à medida que o tamanho da entrada aumenta, o algoritmo com a notação Big O de n se tornará mais eficiente.

Conclusão

Visão geral da seção: Nesta seção final, o palestrante resume os principais pontos sobre a notação Big O e sua aplicação na avaliação de algoritmos.

Principais pontos

  • A notação Big O é usada para medir a eficiência de algoritmos em termos de tempo e espaço.
  • Ela indica quão rapidamente o tempo ou espaço necessário para executar um algoritmo aumenta à medida que o tamanho da entrada aumenta.
  • Ao avaliar diferentes algoritmos, escolha aquele com a menor notação Big O possível. No entanto, considere outros fatores também.
  • A notação Big O não é uma medida precisa do desempenho de um algoritmo em todos os casos.

Crescimento de Funções

Visão Geral da Seção: Nesta seção, o palestrante discute o crescimento de funções e como determinar a complexidade de um algoritmo.

Notações Big O

  • A notação Big O é usada para descrever a complexidade de um algoritmo.
  • Existem várias notações Big O, incluindo tempo constante, logarítmico, linear, n log n, quadrático, cúbico e exponencial.
  • A complexidade do algoritmo depende do tamanho da entrada.

Algoritmo Simples para Percorrer uma Matriz

  • Um exemplo de algoritmo simples é percorrer uma matriz para encontrar um elemento específico.
  • A complexidade desse algoritmo é linear ou O(n).
  • A complexidade também pode ser expressa como O(l x c), onde l é o número de linhas e c é o número de colunas na matriz.

Busca Binária em Árvores Binárias

  • A busca binária em árvores binárias é um exemplo de algoritmo com crescimento logarítmico ou O(log n).
  • As árvores binárias são estruturas de dados que têm raízes e filhos.
  • Na busca binária em árvores binárias, a árvore é dividida repetidamente ao meio até que o elemento seja encontrado.

Árvore B e Busca Binária

Visão Geral da Seção: Nesta seção, o palestrante discute as árvores B e sua utilização na busca binária.

Árvore B

  • A árvore B é uma estrutura de dados usada em sistemas de gerenciamento de banco de dados.
  • É uma árvore binária com um número variável de filhos.

Busca Binária em Árvores B

  • A busca binária em árvores B é semelhante à busca binária em árvores binárias.
  • A complexidade da busca binária em árvores B é logarítmica ou O(log n).

Crescimento Linear

Visão Geral da Seção: Nesta seção, o palestrante discute o crescimento linear e como determinar a complexidade de um algoritmo.

Crescimento Linear

  • O crescimento linear ocorre quando a complexidade do algoritmo aumenta proporcionalmente ao tamanho da entrada.
  • Exemplos incluem percorrer uma matriz para encontrar um elemento específico.
  • A complexidade pode ser expressa como O(n) ou O(l x c), onde l é o número de linhas e c é o número de colunas na matriz.

Ordem de Crescimento e Big O Notation

Visão Geral da Seção: Nesta seção, o palestrante discute a ordem de crescimento dos algoritmos e como o Big O Notation é usado para descrevê-los.

Ordem de Crescimento

  • A ordem de crescimento dos algoritmos pode ser logarítmica, fatorial ou não linear.
  • Na prática, a ordem de crescimento pode ser diferente do que é descrito pelo Big O Notation.

Big O Notation

  • O Big O Notation desconsidera constantes na descrição da ordem de crescimento dos algoritmos.
  • É importante considerar tanto o melhor caso quanto o pior caso ao escolher um algoritmo para resolver um problema específico.
  • A escolha do algoritmo depende do tamanho dos dados e do comportamento do algoritmo no pior e no melhor caso.

Recursos Adicionais

Visão Geral da Seção: Nesta seção, o palestrante compartilha recursos adicionais para aqueles interessados em aprender mais sobre algoritmos.

Vídeos Relacionados

  • Há vários vídeos disponíveis no canal que explicam diferentes conceitos relacionados a algoritmos, incluindo como implementar uma busca em árvore binária.

Assinatura de Membros

  • Os membros do canal têm acesso a conteúdo exclusivo relacionado a algoritmos e outros tópicos técnicos. Clique no botão "Seja Membro" para saber mais.
Video description

✅ Torne-se membro para obter conteúdo exclusivo: https://www.youtube.com/channel/UCyHOBY6IDZF9zOKJPou2Rgg/join 🚨 Importante: Sobre a Matriz Se a matriz for uma matriz quadrada (NxN) então a complexidade seria O(N^2) e não O(N*M) ou pra simplificar no video falei O(LINHA*COLUNA). Se o tamanho da matriz quadrada aumentar (ou seja, N aumenta), o tempo de execução crescerá quadráticamente com N. Como falei, é importante comunicar na entrevista se estão falando da quantidade de células ou das dimensões assim como saber se a matriz é quadrada ou não. Sobre a Árvore Binária Como falei se a árvore estiver ordenada (balanceada) vamos ter um O(log(n)) mas se ela não estiver ordenada teremos O(n) ou O(h) onde o h é a altura da árvore. O site para ver todas notações que comentei no video: http://bigocheatsheet.com 🕹 LANÇAMOS UM JOGO: https://bit.ly/jogo-programadores ✅ 𝗢𝗦 𝗠𝗘𝗟𝗛𝗢𝗥𝗘𝗦 𝗩𝗜𝗗𝗘𝗢𝗦 𝗗𝗢 𝗖𝗔𝗡𝗔𝗟 ▸ Programador Junior quando posso me considerar um? https://youtu.be/wBbFLgW54x4 ▸ 2023 Programadores https://youtu.be/LB76xqh_4eI ▸ Minha Carteira de Trabalho como Programador Júnior - Pleno - Senior https://youtu.be/hQ1H1IQHdXs ▸ programador Junior, o que as empresas esperam que tu saiba https://youtu.be/WPTQ8fZ0aQk ▸ Como Aprender a Programar e Como iniciar no mundo da programação? https://youtu.be/l_5qTI5EHgc ▸ Reagindo a Currículo de Desenvolvedores https://youtu.be/ae7vzA80rVo ▸ programação é difícil ( poucos conseguem aprender ) https://youtu.be/wvPAODEdQNI ▸ O QUE ESPERAM DE JUNIOR (na Programação) https://youtu.be/ap-mxR8TX1U ✅ Livros, Cursos, Equipamentos, Discord, Aplicativo Memo ↴ https://lucasmontano.com