Big O Notation (Descubra Agora se Seus Algoritmos São Eficientes) // Dicionário do Programador
Vložit
- čas přidán 25. 08. 2024
- ☁️ 𝗛𝗢𝗦𝗧𝗜𝗡𝗚𝗘𝗥 𝗖𝗢𝗠 𝗗𝗘𝗦𝗖𝗢𝗡𝗧𝗢 𝗗𝗢𝗦 𝗖𝗗𝗙𝗦 → codft.me/hosti...
Analisar o desempenho de seus próprios algoritmos é o que te diferencia entre os devs que não entendem muito bem o que está codificando. O Big O é o método mais simples para saber para onde o algoritmo está indo. Esse é um assunto complexo porém abordamos de uma forma mais voltada aos códigos!
🎙️ Compilado Podcast
→ CZcams: codft.me/canal...
→ Spotify: codft.me/compi...
→ Newsletter: compilado.codi...
🔗 Mais links do Código Fonte TV
→ codigofonte.tv
#BigO #Algoritmos #Matematica
Interessante que o mercado ignora bastante esse tipo de prática (estou a quase 19 anos como DEV, com formação prática e não teórica, e só ouvir falar depois de uma entrevista para uma big tech). Deve ser por isso que no fim você tem muito problema de desempenho e sempre sai aquela máxima: "Nossa, que estranho!" (Principalmente quando você passa lindo por um teste com 10, 20 elementos e quando cai em produção, o negócio vai interagir com milhares ou milhões de itens)
ignora por que nao serve pra nada... mesmo que vc saiba a complexidade, idai? nao vai fazer vc otimizar mais... nao é atoa que o mercado nao usa...
@@dnl2003 e é por isso que a maioria dos projetos são tão cheio de bugs, lentos e ineficientes em produção. É sim possível vc melhorar a performance da aplicação depois dessa análise de complexidade.
@@eduardooliveira8296 kkkkkkkkkk.. Claro.. o fato do cara ser um programador ruim tem tudo a ver com big O Notation.. O mercado vai passar adotar por isso... confia...
@@dnl2003 vc não entendeu o que falei, mas segue o jogo. ABS e sucesso....
@@dnl2003 serve muito, um algoritmo bem escrito com complexidade baixa e a estrutura de dados certa, faz você economizar bastante dinheiro. Tá aí a diferença de um Dev acima da média. Para entrar numa big tech, a primeira entrevista técnica é sobre isso.
Estou fazendo algumas entrevistas fora do pais e vejo que principalmente para BigTechs e empresas de fora, diferente do Brasil, eles pedem mais esses conhecimentos básicos que costumamos esquecer após a faculdade do que entendimento de frameworks específicos.
Caramba... estou me preparando para as big techs e o assunto que estou eh exatamente este...
Pensei: vou pesquisar um video...
E voces me aparecem com um video de hoje... fantastic...
Mesma coisa aqui man. Quase 20 anos de desenvolvimento nas costas (com formação prática e nunca teórica) e só ouvi falar disso por conta de uma entrevista.
@@eduardooliveira8296 Rapaz, estou lendo o livro Cracking the code interview... ele fala que a gente tem que deminar esse Big O notation.
Nossa, lembrei das minhas aulas na universidade, se tivesse esse vídeo de vocês seria bem mais fácil aprende a complexidade dos algoritmos. kkkkkk
Comecei a estudar programação de cabeça no começo desse ano. E sem sombra de dúvidas, o Big O me pegou muito agora kkkkkk.
Gosto muito dos videos de vocês. szz
Sensacional! Estou fazendo uma revisão da matéria de '' Estrutura de dados'' da faculdade e vocês são simplesmente perfeitos e didáticos. Já ganharam mais uma inscrita. Fico muito grata por compartilharem os seus conhecimentos!
Estou estudando exatamente isso na faculdade!
O que a gente acaba aprendendo na prática aparece para nós em forma de teoria quando estudamos, e aí precisa relembrar dos conceitos matemáticos estudados lá no colegial... que no meu caso já fazem uns 20 anos!
Muito bacana CDF´s. Abraço!
Mundo de Beakman! A referência não poderia ser melhor! Parabéns pelo conteúdo de qualidade, bem construído e relevante como sempre
Parabéns pela super aula. Sempre assisto o conteúdo do canal para reforçar e aprender mais a parte teórica da faculdade!
big fan do mundo de beakman também :D
Muito bom o vídeo! Apenas uma correção em 7:10 é dito que o Pesquisa binária no melhor caso é O(n) mas o correto seria O(1) caso o elemento buscado esteja exatamente no meio do array.
Parabéns pelo programa, cada vez melhor, já na espera do próximo vídeo...
Na faculdade de Ciencia da Computação tive que montar Pesquisa por Interpolação. Tem caso médio O(log(log n)) que chamamos de Bi-logarítmico.
Excelente vídeo! Existem truques de redução de complexidade para os O(n²) e O(n³) onde podemos amortizá-los usando computação vetorial (SIMD).
As CPUs atuais possuem instruções para lidar com isso, além de que as GPUs são dedicadas para amortizar esses algoritmos. A complexidade matematicamente não muda,
só nos aproveitamos de certa independencia a nivel de dados de determinados algoritmos, como os de computação gráfica que costumam ser paralelizáveis por hardware.
Maneiro, estou fazendo Bacharel em TI mas me interesso por Ciência, quero ainda me especializar cair de cabeça nesse mundo de estrutura e tratamento de dados. Na minha faculdade deram só uma comentada sobre Big O e já vim aqui tentar entender um pouco mais :p
minha faculdade recomendou esse vídeo no material didático, estou bem contente com o conteúdo que passam. Certamente recomendando esse ótimo canal sinto que estou no caminho certo
Nossa, que legal a proposta, caiu uma lagrima aqui lembrando da infancia assistindo mundo de Beakman!! fica mais facil de entender esses conceitos com uma explicacao assim, q nos faz sentir em casa!! Obrigado!!
O vídeo veio no momento certo! To fazendo a cadeira de Complexidade de Algoritmo, já vi Divisão e Conquista (6:50 entendi a referência) e no agr to vendo Algoritmos Gulosos =D
toda dúvida que tenho na minha cambaleante jornada pra me tornar programador eu busco no canal de vocês e até hoje nunca falhou, cês tão top d+
ok, entendi foi porra nenhuma mas ok, seguirei estudando
Tive essa aula sobre big O hoje de manhã, facilitou muito o entendimento, obrigado
Big O é papo pra "gente grande" 😂
E mesmo assim, de vez em quando, a gente cai em algumas ciladas...especialmente usando funções padrão da linguagem - é sempre importante entender tudo o que seu código está executando!
Verdade .. Muitas das vezes temos um problema e para solucionar passamos por varias etapas e em uma delas vai e usa algo pronto ignorando o desempenho pra resolver logo o todos
Pois é. Nesse caso vale a curiosidade de ir mais a fundo e ver o que as funções/bibliotecas estão fazendo, e se for o caso vale até reescrever funções de maneira mais adequada ao nosso contexto.
Oi casal, parabéns pelo vídeo. Viu, eu estava fazendo todos os exemplos e achei uma falha num frame do vídeo. No minuto 6:37 você está falando sobre busca binária que tem o tempo logarítmico O(log n) (que está correto) porém na sua legenda foi colocado O(n log n) que naquela escala estaria um passo menos performático e que a busca binária não se encaixa, se possível corrija esse quadradinho roxo.
nossa parasse que os dois estavam estudando junto comigo e viram minha dificuldade no assunto muito bom
Nossa! A primeira vez que ouvi falar a respeito de Big O foi em um vídeo do @LucasMontano, mas foi um comentário trivial e satírico sobre saber ou não sobre Big O em uma entrevista para uma Big Tech. Enfim, fiquei como o termo na mente, mas sem fazer ideia do que se tratava. E não muito tarde, me deparo com o assunto na disciplina de Estrutura de Dados na faculdade, ai agora não tive como fugir, e para entender melhor nada como iniciar buscando no "dicionário" e para o nosso caso temos a felicidade de ter este canal, que nos trazendo inúmeros termos com sua didática e humor sensacionais. Obrigado casal dev.
Muito "lá ele" no vídeo kkkk, obrigado pelo conhecimento. Nota 10
Boa explicação!
Já deixei minha curtida ai para meus brothers...
Saudades da época em que eu estudava no colégio Eniac, em Guarulhos. Monitores dos laboratórios e professores de programação usavam jaleco
Muito boa a aula , parabéns pelo conteúdo
Oche, achei que vocês usa jaleco porque são cientistas da computação, e faz total sentido.
Tem uma segunda referência que é tíbio e perônio do castelo tá Tim bum
Só falta o Lester! Vcs são excelentes! Abraço!
Kkkkkk Só agora peguei a referência das canetas...
Excelente explicação, parabéns
🎉🎉
As canetas nos bolsos são códigos binários? Azul é 0 ou 1?
Interessante
Tenho 3 dúvidas:
1) No minuto 6:35 é falado que o tempo é logarítmico (ou seja O(log n)) mas é apresentada na tela o O(n log n). É isso mesmo? Se é isso poderia me explicar por que é assim?
2) No 7:11 diz que o melhor caso é O(n) e no pior caso, é O(log n). Pelo gráfico mostrado anteriormente, o O(log n) não seria mais eficiente/rápido que o O(n), portanto o melhor caso não seria O(log n) e o pior O(n)?
3) Por fim, vcs estão usando o O para denotar pior e melhor caso, o ideal não seria usar as outras simbologias como theta?
fala sobre recursividade também
Foi o "Olá Mundo!!!" kkk
Saudades de quando o patrocinador era a Hostgator e o Gabriel fazia a voz daquele jacaré kkkkk
magnificoooo
Pesquisei sobre big O a pouquíssimo tempo
Parece até que eles lêem mentes 😄
Caneta Azul = 1
Caneta Vermelha = 0
11001101 = CD (hexa)
Favor ajustar para 11001111 = CF (código fonte)
é toque foi mal, agora vou voltar pro video
🤣🤣🤣
Rapaz
Meu Deus,minha cabeça vai explodiiiii
Eu entendo bem a teoria, mas a prática é outra história. Sei quando estou com uma complexidade de tempo O(n^2) usando um loop for dentro do outro. O que me falta sao exemplos de como melhorar a performance desse código. Outra coisa que nao entendo: em .NET o Linq facilita muito a leitura do código, mas é bem menos eficiente de que um for loop. Mesmo assim é uma prática extremamente apreciada!
Estou estudando sobre algoritmos e estou vendo que realmente alguns se sobressaem bastante sobre outros, minha dúvida é a seguinte: As funções das linguagens de programação usam algum algoritmo padrão? por exemplo, quando estou usando um "sort()" do JavaScript para ordenar um array, qual algoritmo está sendo usado por baixo dos panos?
Se não me engano, o JS utiliza o Insertion Sort para ordenar valores, cuja complexidade no pior caso apresenta complexidade quadrática, isto é, O(n²). Dessa forma ele se torna viável apenas para ordenar entradas com uma massa de dados muito pequenas, pois para ordenar um array de tamanho n = 100, ele levaria em torno de 100² operações (10.000). Para caso de uma massa de dados muito grande, como n = 1000, seria mais viável um algoritmo de complexidade menor, como no caso do Merge Sort, cuja complexidade no pior caso é de O(n log n).
Se formos comparar os dois algoritmos para n = 1000, teremos:
Insertion Sort = O(n²) -> 1000² = 1.000.000 operações
Merge Sort = O(n log n) -> 1000 * log 1000 -> 1000 * 3 = 3000 operações.
Portanto, veja que para uma massa de dados maior no pior caso, o Merge Sort torna-se mais eficiente do que o Insertion Sort.
So um ponto se ele diminui o tempo de de execução a cada iteracao entao o pior caso nao seria o(n) e o melhor o(n log n) ? citado no minuto 7
até q em fim uma parte de PAA..🤗😍
E no caso do um array no ordenado? Seria mais interessante fazer um "sort" e seguir a lógica proposta ? Isso não aumentaria o grau de complexidade. Depois de ver esse vídeo não consigo mais ver um loop dentro de outro loop sem falar ... Visshhhh! hahahaha!
Alguém pode me tirar uma dúvida? Aos 9:20 ele disse que: O(1 + n/2 + n) é igual a O(n), mas eu não entendi como isso é possível?
Imagina que n é 3
1 + 3/2 + 3 =
1 + 1.5 + 3 =
5.5
Como O(5.5) pode ser igual a O(3)?
(Não sou muito bom em matemática, então se meu cálculo tiver errado pf me corrijam)
obrigado por compartilhar o conhecimento
Vídeo bem interessante.
Muito bom!
Sou graduando em Engenharia de Computação, ainda n cheguei nesse assunto, mas isso me lembrou de P vs. NP
Então chegou.
Quando aprendi memorização, e apliquei no algoritmo de Fibonacci, a diferença no tempo é estúpida. Pequenas alterações no código e uma grande melhora!
já tinha visto resultados do canal mas esse é o primeiro vídeo que eu assisto. o Lester aparece? 🤣
Top 👏🏻👏🏻👏🏻
A sequência certa não seria (n * log n) > n > log n?
No começo do vídeo ao explicar as categorias ficou (n * log n) como se fosse tempo logarítimico. Mas na verdade isso é logarítimico linear. Isso acontece em Merge-sort por exemplo, que vai dividindo mas na hora de juntar os resultados passa por todos os itens.
A busca binária no pior caso não seria (log n)? Uma vez que o pior caso tem que dividir o array até o final, para o caso em que o valor buscado não está na lista.
A busca binária não tem como ser O(n) acredito.
Muito bacana o vídeo!
Eu estou estudando isso no momento
para ver isso na prática um bom jeito é implementar algoritmo da mochila de força bruta e o da mochila fracionada, com 50 itens de entrada, enquanto o da mochila da resultado em alguns micro segundos, o força bruta leva uns 30 minutos, pq ele é n! e o de mochila fracionada depende de um algoritmo de ordenação q na maioria das linguagens é n log n
Desde que eu comecei a estudar programação, quando eu criava algum código, eu sempre me perguntava se não tinha como reduzir o código, ou fazer de uma forma menos complexa... Kkkkk
pra que aprender matematica pra programar cade o povo que fala que nao precisa de matematica nem de faculdade pra programar ... eh a galera que nao sabe resolver nenhum algoritimo ...
Vi esse tema nos conteúdos desse semestre na faculdade 😅
😂é a hora que agente pensa em trancar a faculdade viu obrigado pela ótima aula
opa, queria tirar uma duvida sobre o vscode, o meu em especifico ele fica desfocado do nada, não sei o motivo e não sei como arrumar, se alg puder me ajudar fico grato :)
programadores de verdade usam jaleco ! kkk brincadeira. vcs são incríveis, excelente vídeo.
😁😁😁
7:30 Famoso Código Hadouken kkkkkkkk
"Tudo bem até aqui?" Não 😭😭😭
Começa em 2:00
O que quer dizer a constante C na definição matemática do BigO? Eu vi forum aleatórios falando que é o tempo médio das operações básicas de cada computador, mas n tenho certeza se é isso não. Se tiverem material de referência eu agradeço muito :)
A constante C é o fator que não varia em relação ao tamanho da entrada do algoritmo. E na minha visão não tem muito haver com o computador e sim com o algoritmo. Vamos supor que você use um algoritmo que O(n²) e eu use um que é O(n) para um problema. Isso significa que o seu faz n² operações e o meu faz n operações. Só que cada operação do seu algoritmo custa 1 real, e cada operação do meu custa 100 reais.
Ou seja, pra você C = 1 e pra mim C = 100. Se a gente olhar apenas para o C vamos concluir que o seu algoritmo é mais barato e o meu é mais caro. Mas isso só vai ser verdade para n < 100. Se n for 1000, o seu custaria 1000000 e meu custaria 100000, e conforme o tamanho aumenta a diferença entre os custos também aumenta. Sabendo que o tamanho vai crescer, o C pode ser ignorado.
tava estudando sobre isso na semana passada kkkkk
Trabalho há 7 anos em T.I. e nunca havia realmente entendido essa notação. Continuo não entendendo.
XD
😭😆
int main(){
printf("Hello World");
return 0;
} //sempre foi o que mas chorei de legria
Será que a fórmula do big o;
Conseguiria calcular um Hacker?
Estou na 3a semana de análise e desenvolvimento de Sistemas...me sinto tão perdido não quero ficar de fora dessa ...mas tá osso !...😔
Nossa! Eu sou muito burro.
Há alguma técnica pra baixar a complexidade?
Há várias.
entendi literalmente nada
.
Algorítimo para preparar um bolo simples: Opção 1: Aplique o algorítimo da receita da vóvó - 30 (trinta) linhas, ou Opção 2: Aplique um algorítimo de 2 (duas) linhas: Compre uma caixa de sorvete, adicione farinha de trigo, mistures tudo e leve ao forno;
galera nao sabe nem fazer soma direito aushdaushdauhds
Esse bagulho é quase inútil para a maioria dos programadores de hoje. É só não abusar do for e usar as funções q toda linguagem tem que trabalham com o melhor big O de ordenação e busca, além de q os pc de hoje são mais rápidos do que a 20,30 anos atrás. Ser programador hj é facil.
Concordo que ser programador hoje é muito mais fácil, mas é por isso que a grande maioria dos projetos novos saem com problemas absurdos de performance quando sobem para a produção.
Ordenação e busca são os menores dos problemas. A gente só aprende eles na faculdade pra entender os conceitos de complexidade. A ordenação é O(n log n), a busca é O(n) se o vetor estiver desordenado e O(log n) se estiver ordenado. Ambos são polinomiais, o inferno é quando o problema é exponencial ou fatorial. As libs de machine learning por exemplo pode levar dias pra executar.
haha vai usar uma linguagem que não tenha um garbage collector ou então escreve uma linha de código que faz com que o GC não limpe sozinho, aí tu vai ver a importância de se ter cuidado com isso
Lembrando que quem mexe com WEB tem que cuidar com o JS pq o servidor é parrudo, mas nem todo pc de usuário é assim
@@fernandocasare8500 Coletor de lixo não tem nada a ver big O e com o que eu disse. Não viaja.
A outra parte eu não entendi. Escreva direito.
Há bom tempo tenho estudado programação e até na faculdade nunca consegui entender essa notação direito e nem nas video aulas aqui na plataforma não tinha visto uma explicação tão bem detalhada e que realmente apresenta o que é, me ajudou bastante. Muito obd, vocês são feras!!!👨🎓