Notação Big O e Complexidade de Algoritmos

Sdílet
Vložit

Komentáře • 82

  • @CodigoEscola
    @CodigoEscola  Před 3 lety +10

    Se você curtir Big O, acho que vai gostar de conhecer Regex! Confira:
    czcams.com/video/d2uqo6PhdM4/video.html

  • @marcoslucas9515
    @marcoslucas9515 Před 3 lety +93

    Eu não estava conseguindo entender NADA desse assunto !!! Sua explicação é muito clara, Parabéns!!!

  • @feuser-developer
    @feuser-developer Před měsícem +2

    A melhor explicação que encontrei sobre o assunto. Realmente você entende e sabe o que está falando. Direto ao ponto! Continue compartilhando conhecimento

  • @marcosrj21
    @marcosrj21 Před 2 lety +22

    Trabalho há 19 anos com TI e essa é uma das melhores explicações que eu vi. Parabéns.

  • @GabrielSouza-yy2rq
    @GabrielSouza-yy2rq Před 2 lety +4

    Quanto mais a pessoa entende de um assunto, menos ela precisa falar para explicá-lo. É notável que você sabe do que está falando. Diferente de outros canais por aí, até mais "famosos", você está EXPLICANDO o conceito e não REPLICANDO conceitos... Parabéns. E muito obrigado pelo ensinamento!

  • @jeffersonlima249
    @jeffersonlima249 Před 2 lety +5

    Estou assistindo em 2022 para o curso de analise de sistema. Explicação simples e eficiente. Não compreende porque os professores da faculdade conseguem complicar algo tão simples assim.

  • @lontra894
    @lontra894 Před rokem +1

    A explicação definitiva. Sem palavras!

  • @pedroluisgallegossepulveda2587

    Finalmente consegui entender pra dar um passo a frente ! Primeiro vídeo que conseguiu me ensinar de verdade, vc ensina de maneira extremamente clara, parabéns de verdade eu nn tenho nem palavras pra descrever a felicidade de eu finalmente entender esse troço que parecia ter 7 cabeças

  • @guilhermevilasboasroberto2541

    Explicação perfeita, entendi muito bem, obrigado pelo ótimo conteúdo!

  • @patrickbacelar5062
    @patrickbacelar5062 Před 3 lety +2

    A melhor explicação que eu já vi sobre esse assunto.

  • @mylenav
    @mylenav Před rokem

    Didática realmente é um dom de poucos. Não tenho palavras pra te agradecer pelo vídeo. Deus te abençoe grandemente!!

  • @JJbazaga1
    @JJbazaga1 Před 2 lety +1

    Excelente didática, conseguiu explicar um assunto complexo de forma bem clara.

  • @JoyceEvellynRochaSantana

    OBRIGADA PELA AJUDA!
    o único professor que consegui entender :]

  • @silass9993
    @silass9993 Před 2 lety +3

    Ótima explicação!
    Sobre a solução mais eficiente, acredito que a mais fácil seria usar uma função de repetição de string que a maioria das linguagens possuem, mas pensando bem continuaria sendo O(n2), porque a implementação dessas funções de repetição de string deve ter algum loop por baixo dos panos.

  • @mateusrodriguesfiuza3403
    @mateusrodriguesfiuza3403 Před 2 měsíci

    excelente apresentação, vou deixar salvo quando precisar revisar o conteudo.

  • @patrickduartepimentapdp3802

    Sensacional sua explicação, me ajudou bastante no entendimento!

  • @luizfernandoribeiro5230
    @luizfernandoribeiro5230 Před 6 měsíci

    Sem dúvida a melhor explicação! Obrigado!

  • @GabrielSouza-wy7fv
    @GabrielSouza-wy7fv Před 2 lety

    Que explicação simples, foi a melhor que já vi sobre o assunto, parabéns pela didática, bem fácil de compreender.

  • @lelobangelo22
    @lelobangelo22 Před 2 lety +1

    Muito obrigado pelo conteúdo, estava a tempos tentando entender o Big O! Excelente vídeo

  • @DavidSilva-cp8hg
    @DavidSilva-cp8hg Před 3 lety +2

    Fantástica sua explicação, obrigado!

  • @eduardobueno820
    @eduardobueno820 Před rokem

    Parabéns pelo vídeo! Uma das explicações mais didáticas que já vi sobre o tema!

  • @mateusmatos4944
    @mateusmatos4944 Před 3 lety +2

    Boa, mano, conteúdo bem didático e explicativo, fora que explicou na linguagem que estou me especializando, obrigado, amigo

  • @johnlopes1784
    @johnlopes1784 Před 2 lety +1

    Que explicação sensacional!! Parabéns!

  • @leonardoroxo
    @leonardoroxo Před rokem

    Excelente didática na explicação da notação Big O

  • @JoaoPedro-uw8nz
    @JoaoPedro-uw8nz Před 3 lety +1

    Sua explicação é muito boa, parabéns!

  • @darlonhenrique7642
    @darlonhenrique7642 Před 3 lety +2

    Ótima explicação! Obrigado pela aula

  • @kiritosenpai8082
    @kiritosenpai8082 Před 2 lety +2

    O(1) e O(n) foi dba entender só o log que ficou meio confuso pra mim, até agora não vi informações melhores do que a desse video,transformou algo que parece tão complicado de aplicar em algo para pensarmos em otimizar e preservar nosso código obrigado!!

    • @pedrinho-gh4fn
      @pedrinho-gh4fn Před 2 lety +2

      Conhece busca binária? é um exemplo de o(log n), pois nela dividimos os números para encontrar o x, não precisando passar por todos como o O(n)

    • @calopsitarevoltada6109
      @calopsitarevoltada6109 Před 2 lety +3

      @@pedrinho-gh4fn Exato. E se vc tentar ver o número de interações, teríamos:
      2 = 1 interação
      4 = 2 interações
      8 = 3 interações
      ...
      1024 = 10 interações
      ...
      1.048.576 = 20 interações
      E se formos falar de matemática, o valor de log2 n seria a melhor aproximação para este caso de números de interações.

    • @pedrinho-gh4fn
      @pedrinho-gh4fn Před 2 lety +1

      @@calopsitarevoltada6109 perfeito! não sabia que bastavam apenas 20 interações em um número tão grande quanto o ultimo exemplo, que incrível...

    • @NameTopSecret
      @NameTopSecret Před 2 lety

      @@calopsitarevoltada6109 tambem nao sou muito bom com log. dos algoritmos O(log n), O(log2 n) e O(log32 n) qual a ordem do mais eficiente pro menos eficiente? sim, eu vou procurar aprender logaritmo

  • @eletrotech51
    @eletrotech51 Před 28 dny

    muito bom

  • @marimalkavian
    @marimalkavian Před 2 lety +1

    Entendi agora em 9 minutos o que passei uma hora em uma aula maçante da faculdade que entendi nadaaa. Parabéns pelo vídeo

  • @jeankoppenjan486
    @jeankoppenjan486 Před 2 lety

    Excelente explicação!! Me ajudou muito. Obrigado!

  • @ReDeveloperr
    @ReDeveloperr Před 4 měsíci

    Aprendi o que a matéria toda da faculdade nao me ensinou valeuuuuu

  • @alewhois
    @alewhois Před rokem

    Aula muito boa. Parabéns!

  • @gratidao2023
    @gratidao2023 Před 2 lety

    Obrigado por compartilhar e parabéns pela sua excelente didática!

  • @JoaoVitor-hf9em
    @JoaoVitor-hf9em Před rokem

    amei sua explicacao, o melhor!! obrigado

  • @guilherme4414
    @guilherme4414 Před 2 lety

    Melhor explicação, com exemplo na pratica

  • @joaomariofidelis9461
    @joaomariofidelis9461 Před 2 lety +1

    ótima explicação e ótimos exemplos

  • @maick879
    @maick879 Před rokem

    Obrigado, muito boa a explicação.

  • @Andrewsylar
    @Andrewsylar Před 3 lety +1

    Muito bom video, poderia fazer mais videos sobre isso.

  • @DavidSilva-cm4ni
    @DavidSilva-cm4ni Před 3 lety +1

    Parabéns, ótima didática!

  • @angelicafelixdecastro

    Aula perfeita! Parabéns!!

  • @ericpereira7209
    @ericpereira7209 Před rokem

    Muito bom, otima explicação

  • @ceelokogames1945
    @ceelokogames1945 Před rokem

    muito obrigado pela aula!!!

  • @gabrielegarcia773
    @gabrielegarcia773 Před 2 lety

    Gratidão por esse vídeo

  • @mffalcao87s
    @mffalcao87s Před 2 lety

    Parabéns pela didática

  • @gabrielrodrigo5626
    @gabrielrodrigo5626 Před 2 lety

    Ajudou demais!! muito obrigado

  • @juninhovit
    @juninhovit Před 2 lety

    Legal o conceito daria pra imprimir tudo como uma string so acrescentando a
    forçando a quebra de linha uma vez que so de olhar ja e previsível o resultado ou pra ficar só fácil deixar um só FOR pois so um realmente faz sentindo para iterar sobre os elementos

  • @ricardomoura4411
    @ricardomoura4411 Před 2 lety

    cara, muito legal seu video!

  • @EngeLeili
    @EngeLeili Před rokem

    Muito boa explicação.

  • @lenirocha7811
    @lenirocha7811 Před rokem

    Parabéns pela explicação! Me salvou porque em sala de aula eu não consegui entender quase nada kkkkkk Tem algum vídeo sobre otimização? Parece que ninguém conseguiu responder (não achei nos comentários, mas queria ver).

  • @yurisilva9029
    @yurisilva9029 Před 4 měsíci

    Excelente explicação!! Agora, fiquei com uma dúvida, eu conseguiria reduzir a complexidade do algoritmo aí deixando apenas um for, ficaria mais eficiente, porém continuaria sendo O(n). Tem mesmo alguma forma de reduzir mais essa complexidade? Pensei aqui mas sei lá, num caso como esse q eu tenho q iterar sobre números só consigo pensar em O(n) mesmo

  • @hanryclebermoisescaetano9787

    Eu tiro meu chapéu de lenda para lenda!

  • @andersonfluz
    @andersonfluz Před rokem

    Valeu!

  • @davigomes6019
    @davigomes6019 Před 2 lety

    me ajudou dms, muito obrigado.

  • @georgelobo4048
    @georgelobo4048 Před 2 lety

    Perfeito

  • @wilianwwr
    @wilianwwr Před 2 lety +1

    Olhei todos os comentários e não vi a solução. A solução é não montar apenas a linha, mas sim montar o quadrado inteiro diretamente no primeiro for, assim quando você for printar o resultado você não terá que fazer outro loop, o resultado vai de O(2xN) para O(N).
    Edit:
    Solução 1:
    number = 5
    result = ''
    for (let i = 0; i < number; i++) {
    result += result.slice(0, i * 2) + '
    '
    result = result.replace(/
    /g, ` ${number}
    `)
    }
    Solução 2:
    number = 5
    row = new Array(number).fill(number).join(' ') + '
    '
    result = ''
    for (let i = 0; i < number; i++)
    result += row
    Há várias formas de solucionar este problema, mas dúvido muito que qualquer uma das soluções irá melhorar significamente a performance, pois por baixo dos panos o JavaScript ainda irá fazer o loop extra.
    De qualquer forma, Big O é uma notação utilizada para representar escalabilidade, não performance, para melhorar a escalabilidade seria necessário remover os loops por completo, que eu creio ser impossível.

  • @Megatorial
    @Megatorial Před 2 lety +1

    Queria aprender a calcular cada um, por exemplo o log quando é: n log n eu cálculo 5 log 4?

  • @yuriancelmo
    @yuriancelmo Před 2 lety +2

    Dá pra mostrar a linha de acordo com a quantidade. Pelo menos em python eu sei que dá pra fazer algo como abaixo
    ex
    for(int i= 0 ; i < 5 ; i++){
    console.log((i + " " )* i);
    }

    • @wilianwwr
      @wilianwwr Před 2 lety +1

      Em JavaScript, sempre que você tenta multiplicar, dividir, subtrair uma string, ele irá tentar converter a string para number, caso ele não consiga, o resultado será NaN (Not a Number).
      Mas mesmo em Python sua solução não está correta, pois você está utilizando a variável "i" para printrar e multiplicar. Deveria ser: console.log((numero + " ") * numero).

  • @danrleiribeiro7959
    @danrleiribeiro7959 Před 2 lety +2

    Pra melhorar ainda mais, basta printar no console o número hahaha
    Print (
    """
    num num num num num
    num num num num num
    num num num num num
    num num num num num
    num num num num num
    """
    )

  • @fabsouza
    @fabsouza Před 2 lety

    Pode passar a solução do desafio do final do vídeo? Como melhorar exemplo mais ainda que o O(N). Fiquei curioso.

  • @antoniomarcosbarbosa
    @antoniomarcosbarbosa Před 3 lety +3

    Muito bom. Qual é a simplificação que vc comentou no vídeo?

    • @CodigoEscola
      @CodigoEscola  Před 3 lety +9

      Nos dois laços temos um ciclo para cada unidade. Então, por exemplo, preencher 11111111 demandariam 8 ciclos. Você ir duplicando a lista a cada ciclo ao invés de adicionar unitariamente. Dessa forma, 11111111 demandariam 4 ciclos.

    • @lucasfelipe-ze5sy
      @lucasfelipe-ze5sy Před 3 lety +5

      @@CodigoEscola mas essa solução só funciona se pudermos ter certeza que todos os números recebidos serão pares, certo?

    • @marlonrayo
      @marlonrayo Před 3 lety +5

      @@lucasfelipe-ze5sy Sim, mas você poderia por exemplo adicionar a validação de impar ou par, o que adicionaria uma complexidade de O(1) ou O(2) e assim por diante, porém como desconsideramos os termos de ordem maior não aumentaríamos a complexidade.

  • @cgalvaojr
    @cgalvaojr Před 2 lety

    Não vi se responderam, mas acho que a melhor forma de otimizar esse algoritmo seria eliminando o segundo laço. Já que ele é exatamente igual ao primeiro. Seria só dar o console.log no primeiro mesmo.

    • @caiocaminha9784
      @caiocaminha9784 Před 2 lety +2

      fazendo isso ele printaria
      5
      5 5
      5 5,5
      5 5 5 5
      5 5 5 5 5

  • @caiomartins8255
    @caiomartins8255 Před 2 lety

    muito bom!

  • @davirodriguesdecarvalho9888

    sabe me informar a complexidade computacional do algoritmo A* ?

  • @matheusjordan619
    @matheusjordan619 Před 2 lety +1

    Consegui deixar o algoritmo mais eficiente dessa forma O(1xN) => O(N), removendo um laço.
    function meuNumero(numero) {
    let linha = ''
    const iteracoes = numero*numero
    for (let i = 1; i {
    meuNumero(5)
    })()

    • @gpressutto5
      @gpressutto5 Před 2 lety +5

      Você fez n*n, então isso é O(n2), só está disfarçado por ter apenas 1 for.

    • @israel-rodrigues
      @israel-rodrigues Před 2 lety

      ​@@gpressutto5 tem certeza disso?
      Uma multiplicação simples não é O(1)?

    • @gpressutto5
      @gpressutto5 Před 2 lety +2

      @@israel-rodrigues não é uma multiplicidade simples, é n*n, que é n^2. Faz o teste: se n for 3 esse loop vai rodar 9 vezes, se for 5, 25 vezes.

  • @adriel45dev
    @adriel45dev Před 2 měsíci

    8:50 function meuNumero(numero) {
    // solução 1
    let line1;
    for (let i = 0; i < numero ** 2; i++) {
    line1 = `${numero} ${i % numero == 0 && "
    "}`;
    }
    // solução 2
    const line2 = `${numero} `.repeat(numero);
    console.log(`${line2}
    `.repeat(numero));
    console.log(`Seu número é ${numero}`);
    console.log(`Seu número é ${numero}`);
    }
    meuNumero(8);

  • @thydev6
    @thydev6 Před rokem +1

    okay consegui , e melhor sem laço lkkk segue aí:
    var square = n =>{ console.log(''.padStart(n,n).split(n).join('
    '.padStart(n+1,n)))}
    square(3)
    333
    333
    333
    square(5)
    55555
    55555
    55555
    55555
    55555
    Neste caso o big-O seria O(1), certo ?
    Ótimo vídeo!
    At

    • @stripe2020
      @stripe2020 Před 5 měsíci

      Você usou lambda expressions, que na verdade se transforma debaixo dos panos em loops sim, e se não estou errado, é um loop otimizado para paralelismo, ele é bem mais pesado do que um "for" comum para operações curtas e otimizado para grandes cargas de dados.