A melhor explicação que encontrei sobre o assunto. Realmente você entende e sabe o que está falando. Direto ao ponto! Continue compartilhando conhecimento
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!
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.
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
Ó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.
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 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.
@@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
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
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).
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
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.
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); }
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).
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 """ )
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 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.
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.
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) })()
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);
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
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.
Se você curtir Big O, acho que vai gostar de conhecer Regex! Confira:
czcams.com/video/d2uqo6PhdM4/video.html
Eu não estava conseguindo entender NADA desse assunto !!! Sua explicação é muito clara, Parabéns!!!
A melhor explicação que encontrei sobre o assunto. Realmente você entende e sabe o que está falando. Direto ao ponto! Continue compartilhando conhecimento
Trabalho há 19 anos com TI e essa é uma das melhores explicações que eu vi. Parabéns.
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!
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.
A explicação definitiva. Sem palavras!
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
Explicação perfeita, entendi muito bem, obrigado pelo ótimo conteúdo!
A melhor explicação que eu já vi sobre esse assunto.
Didática realmente é um dom de poucos. Não tenho palavras pra te agradecer pelo vídeo. Deus te abençoe grandemente!!
Excelente didática, conseguiu explicar um assunto complexo de forma bem clara.
OBRIGADA PELA AJUDA!
o único professor que consegui entender :]
Ó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.
excelente apresentação, vou deixar salvo quando precisar revisar o conteudo.
Sensacional sua explicação, me ajudou bastante no entendimento!
Sem dúvida a melhor explicação! Obrigado!
Que explicação simples, foi a melhor que já vi sobre o assunto, parabéns pela didática, bem fácil de compreender.
Muito obrigado pelo conteúdo, estava a tempos tentando entender o Big O! Excelente vídeo
Fantástica sua explicação, obrigado!
Parabéns pelo vídeo! Uma das explicações mais didáticas que já vi sobre o tema!
Muito obrigado
Boa, mano, conteúdo bem didático e explicativo, fora que explicou na linguagem que estou me especializando, obrigado, amigo
Que explicação sensacional!! Parabéns!
Excelente didática na explicação da notação Big O
Sua explicação é muito boa, parabéns!
Ótima explicação! Obrigado pela aula
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!!
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)
@@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.
@@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...
@@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
muito bom
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
Excelente explicação!! Me ajudou muito. Obrigado!
Aprendi o que a matéria toda da faculdade nao me ensinou valeuuuuu
Aula muito boa. Parabéns!
Obrigado por compartilhar e parabéns pela sua excelente didática!
Disponha!
amei sua explicacao, o melhor!! obrigado
Melhor explicação, com exemplo na pratica
ótima explicação e ótimos exemplos
Obrigado, muito boa a explicação.
Muito bom video, poderia fazer mais videos sobre isso.
Parabéns, ótima didática!
Aula perfeita! Parabéns!!
Muito bom, otima explicação
muito obrigado pela aula!!!
Gratidão por esse vídeo
Parabéns pela didática
Ajudou demais!! muito obrigado
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
cara, muito legal seu video!
Muito boa explicação.
Obrigado
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).
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
Eu tiro meu chapéu de lenda para lenda!
Valeu!
me ajudou dms, muito obrigado.
Perfeito
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.
Queria aprender a calcular cada um, por exemplo o log quando é: n log n eu cálculo 5 log 4?
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);
}
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).
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
"""
)
Pode passar a solução do desafio do final do vídeo? Como melhorar exemplo mais ainda que o O(N). Fiquei curioso.
Muito bom. Qual é a simplificação que vc comentou no vídeo?
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.
@@CodigoEscola mas essa solução só funciona se pudermos ter certeza que todos os números recebidos serão pares, certo?
@@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.
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.
fazendo isso ele printaria
5
5 5
5 5,5
5 5 5 5
5 5 5 5 5
muito bom!
sabe me informar a complexidade computacional do algoritmo A* ?
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)
})()
Você fez n*n, então isso é O(n2), só está disfarçado por ter apenas 1 for.
@@gpressutto5 tem certeza disso?
Uma multiplicação simples não é O(1)?
@@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.
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);
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
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.