ÁRVORE BINÁRIA de BUSCA | Estruturas de Dados #13

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 พ.ย. 2024

ความคิดเห็น • 83

  • @eric-6422
    @eric-6422 7 หลายเดือนก่อน +3

    Agradeço todos os dias pela existencia desse video.

    • @pgdinamica
      @pgdinamica  7 หลายเดือนก่อน

      Amém 🙏🏾

  • @kizzy_terra
    @kizzy_terra 5 ปีที่แล้ว +14

    Estava aguardando esse vídeo! 🙏🏾🙌🏾

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว

      👨🏾‍💻👩🏾‍💻

  • @thaisepessoa7173
    @thaisepessoa7173 4 ปีที่แล้ว +54

    Meu professor passava seus vídeos nas aulas aqui da UFAM

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว +20

      Nossa, que prestígio! :O
      Obrigado por informar, fico feliz :)
      Bons estudos!

  • @marciosousa7868
    @marciosousa7868 ปีที่แล้ว +1

    Ótimo, gostei muito de suas explicações, muito obrigado. ^^

  • @chupacabrasbr
    @chupacabrasbr 3 หลายเดือนก่อน +1

    Excelente conteúdo !

    • @pgdinamica
      @pgdinamica  3 หลายเดือนก่อน

      Muito obrigado!

  • @gustavorocha9774
    @gustavorocha9774 3 ปีที่แล้ว +3

    Que vídeos maravilhosos! Não esperava tanto dessa matéria até ver essa sequencia de vídeos! Obrigado por tornar programação mais empolgante do que já é.

  • @josineidesoares1402
    @josineidesoares1402 3 หลายเดือนก่อน

    Muito bom, meu professor da facul selecionou seus videos como revisão para a prova.

    • @pgdinamica
      @pgdinamica  3 หลายเดือนก่อน

      Que legal! Fico feliz em saber :)

  • @anderssonalvesdasilva423
    @anderssonalvesdasilva423 4 ปีที่แล้ว +1

    Seus vídeos são incríveis, didáticos e fáceis de entender. Parabéns. Estou aprendendo muito.

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว

      Obrigado! Fico feliz em saber :)
      Bons estudos!

  • @pedroalmeida1681
    @pedroalmeida1681 6 หลายเดือนก่อน

    Obrigado irmao! Bela explicação, parabens...

    • @pgdinamica
      @pgdinamica  6 หลายเดือนก่อน

      Valeu!

  • @fonsekleandro
    @fonsekleandro 3 ปีที่แล้ว +1

    Parabéns pelo vídeo! Assinei até a Alura pra me ajudar a aprender/entender esse conceito, e só depois descobri esse canal. A qualidade didática desse vídeo está anos-luz a frente dos outros materias que eu consultei.

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Muito obrigado 😊

  • @pedro.balbino
    @pedro.balbino 3 ปีที่แล้ว +4

    Esse canal tá fazendo valer minha faculdade !!!

  • @tiagonascimento2232
    @tiagonascimento2232 5 ปีที่แล้ว +1

    Excelente!!!!!!!!!!!!!!

  • @theredao
    @theredao 4 ปีที่แล้ว +1

    Seus conteúdos são excelentes, parabéns! Já virem fã!

  • @danielmelo9064
    @danielmelo9064 ปีที่แล้ว +1

    Aula maravilhosa!

  • @raniel0511
    @raniel0511 3 ปีที่แล้ว

    Assistido ✔️
    Árvores forever.

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      É uma das estruturas que mais gosto :D

  • @AndersonMarques-ik3tp
    @AndersonMarques-ik3tp 4 ปีที่แล้ว

    Incrível essa aula! d+

  • @acfribe
    @acfribe 3 ปีที่แล้ว

    Muito Bom

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Valeu, Augusto! 🙂

  • @brunno_gonzalez_dev
    @brunno_gonzalez_dev ปีที่แล้ว

    Aula animal!!

  • @hiraokii
    @hiraokii 4 ปีที่แล้ว

    Incrível

  • @gabrielprado6333
    @gabrielprado6333 4 ปีที่แล้ว

    Aguardo ansiosamente as arvores AVL e Rubro Negra. Já tem alguma previsão?

  • @NilsMendesTavares
    @NilsMendesTavares ปีที่แล้ว

    Mano, parabéns pelo vídeo! Explicação nota 10.
    Mano, tô tendo problema na execução do código, o meu só está retornando 3 números. Como faço para corrigir?
    Obs: estou usando o código que você disponibilizou no replit e estou testando ele replit também.

  • @leandrosoares1663
    @leandrosoares1663 2 ปีที่แล้ว

    Prezado Hallison, obrigado pelo vídeo, está salvando meu mestrado!
    Eu fiquei com duas duvidas que provavelmente são básicas.
    Como a altura é calculada abaixo se você não usa nenhuma função do tipo de Len e etc. Você define a função height e depois simplesmente itera, confesso que fiquei perdido.
    def height(self, node=None):
    if node is None:
    node = self.root
    hleft = 0
    hright = 0
    if node.left:
    hleft = self.height(node.left)
    if node.right:
    hright = self.height(node.right)
    if hright > hleft:
    return hright + 1
    else:
    return hleft + 1
    Da mesma forma não consegui visualizar a logica do código abaixo e como conseguimos printar todos os nós, sendo que uso a função print apenas para o nó principal.
    def simetric_traversal(self,node=None):
    if node is None:
    node = self.root
    if node.left:
    print('(', end = '')
    self.simetric_traversal(node.left)
    print(node, end = '')
    if node.right:
    self.simetric_traversal(node.right)
    print(')', end ='')
    Se puder tentar me ajudar eu agradeço.
    Abraço!

    • @pgdinamica
      @pgdinamica  2 ปีที่แล้ว +1

      Oi, Leandro, seu problema está em entender procedimentos recursivos. Você pode estudar problemas mais básicos como Fatorial, Fibonacci e a Torre de Hanoi pra revisar/praticar.
      Repare que nos dois casos, as funções chamam a si mesmas. Neste momento, a execução é “pausada” naquela linha da chamada anterior e inicia do começo com um novo valor. Você precisa seguir a execução do código (com papel e caneta) pra entender. Vou tentar digitar um exemplo do primeiro caso pra te ajudar. Pensa numa árvore que tem apenas a raiz (A) e um filho à direita (B). Você já sabe que a altura tem que ser 2. Vamos seguir o código *height* passando a raiz A:
      Como A só tem filho à direita, não entramos no primeiro if e o valor de hleft se mantém 0 como foi inicializado. No segundo if, hright vai receber um valor que ainda não sabemos qual; será o resultado da chamada recursiva passando o valor B (filho à direita de A).
      Nesse momento, verificamos tudo de novo… B não é None; hleft (outro hleft, diferente do primeiro, pois é outro escopo) é 0; hright é 0. B não tem filho à esquerda e nem à direita, então hleft e hright se mantém 0. É falso que hright > hleft (são iguais), então entramos no else e retornamos hleft + 1 (ou seja 0+1) = 1.
      Agora, que retornamos, continuamos a primeira execução, que estava parada. O hright da execução da raiz recebe o valor 1. É verdade que hright > hleft (pois 1 > 0) então entramos no if e, finalmente, retornamos o valor da altura hright + 1 = 2 👏🏾👏🏾👏🏾👏🏾
      Você tem que aprender a seguir a execução da função pra entender. Este o tipo de coisa que o professor tenta ensinar pro aluno na faculdade com programação no papel, mas muita gente menospreza falando que nunca vai programar no papel na vida real. Só que o valor deste exercício está no raciocínio que deve ser desenvolvido, não na solução do problema real 🙂.
      Recursão é uma boa ideia de vídeo, vou avança-la na lista de prioridades de conteúdo. Quem sabe não rola mês que vem 🤔

  • @vemprogramar
    @vemprogramar 3 ปีที่แล้ว

    Rapaz...vc salvou minha nota 🤣
    Muito obrigado!
    Que canal fantástico e que maneira de ensinar! 👏👏👏👏👏👏👏👏

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Muito obrigado! A nota é consequência do que você conseguiu expressar na prova. Eu contribuí com apenas uma parcela neste processo ;)

  • @homejonny9326
    @homejonny9326 3 ปีที่แล้ว

    professor nato

  • @jacksonburnley4686
    @jacksonburnley4686 4 ปีที่แล้ว

    Hey, primeiramente obrigado pelos seus videos, tem me ajudado muito!
    Tem a possibilidade de você falar sobre b-tree? Tô adorando sua didática em binária e gostaria de aprender sobre árvores-B.

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว +1

      Obrigado! Tem, sim, mas provavelmente só no próximo mês...vou ver o que consigo fazer pra agilizar!

  • @joaomaia2898
    @joaomaia2898 2 ปีที่แล้ว

    mestre, que microfone ta usando? parabéns, excelente trabalho! obrigado pela iniciativa.

    • @pgdinamica
      @pgdinamica  2 ปีที่แล้ว

      Microfone de lapela da Boya by-m1

  • @marcusoliveira2522
    @marcusoliveira2522 4 หลายเดือนก่อน +1

    2024 e eu aqui

    • @pgdinamica
      @pgdinamica  4 หลายเดือนก่อน

      Bons estudos! Traz mais gente pra me incentivar a terminar a playlist 😅

  • @ulissesargileu4664
    @ulissesargileu4664 3 ปีที่แล้ว

    Aí Hallison, posso dizer que a ideia da árvore binária de busca é poder ordenar sem ter que passar pelos algoritmos de ordenação com o percurso simétrico, economizando processamento ?

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Sim, pode. Repara, no entanto, que se você só precisa ordenar uns dados uma vez, provavelmente, vai usar um algoritmo de ordenação. Agora, se você precisa manter seus dados sempre ordenados, daí vale a pena construir uma árvore e fazer as operações de busca, inserção e remoção nela.

  • @matheusfelipe1107
    @matheusfelipe1107 4 ปีที่แล้ว

    Muito legal, Hallison.
    Tenho uma dúvida: sempre quando assisto alguma aula sobre esse tipo de estrutura/algoritmo de busca vejo que em grande parte é usado somente valores númericos inteiros ou fracionados - suponho que seja para facilitar o entendimento. Com valores do tipo string acredito que esse mesmo trabalho seja feito com base na ordem alfabética, correto? E em outros tipos de dados (binário, hexadecimal etc), que não amazene dados inteiros ou fracionados na conversão binario->decimal/float, como funcionaria essa estrutura e a busca? ou ela não é própria para isso?

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว +2

      Essa estrutura de dados, assim como os algoritmos que você está habituado a ver não dependem do tipo de dado. O que você precisa é de tipos em que seja possível definir uma ordem, ou seja, comparar quaisquer dois elementos. Essa é uma questão matemática. Do ponto de vista de implementação, basta que seja possível usar o operador "

    • @matheusfelipe1107
      @matheusfelipe1107 4 ปีที่แล้ว

      @@pgdinamica Perfeito! Muito obrigado pelo esclarecimento ;)

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว +1

      🤙🏾

  • @jefferson-y9x
    @jefferson-y9x 2 ปีที่แล้ว

    boa noite professor, poderia me tirar uma duvida me ajudar a um critério de parada que poderia ser estipulado quando da realização de busca em árvores?
    .

  • @juliocesarjuvenal4912
    @juliocesarjuvenal4912 3 ปีที่แล้ว

    Poderia fazer um video em arvore mas na linguagem c estrutura de dados

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Se você focar em *entender* a ideia por trás dos algoritmos e estruturas de dados, será capaz de implementar em *qualquer* outra linguagem :)

  • @adriellibarboza5320
    @adriellibarboza5320 ปีที่แล้ว +1

    Ainda não entendi ,como isso se aplica no dia a dia da programação ? Tipo...cadastros ? Busca de ID's ? Estou confusa em visualizaar as aplicações do dia a dia ,se alguém puder me explicar ou exemplificar ,por favor

    • @pgdinamica
      @pgdinamica  ปีที่แล้ว +1

      Bancos de dados, sistemas operacionais, HTML... em quase tudo você vai encontrar uma estrutura de árvore (nem sempre binária) para organizar informação.
      Acabei de buscar "matemática" no Google e ele informou no topo: "Aproximadamente 491.000.000 resultados (0,33 segundos)" como fazer isso tão rápido sem estruturas de dados eficientes? Qualquer pessoa que tente projetar um sistema complexo pra resolver problemas e lidar com grandes quantidades de dados vai se deparar com a necessidade de estruturas de dados eficientes como uma árvore binária de busca.
      Você consegue imaginar a quantidade de operações envolvidas pra gerar cada quadro de uma animação da Pixar ou um jogo de vídeo game, por exemplo? Tem vídeo aqui no canal implementando um visualizador por Ray Tracing (th-cam.com/users/liveLlNaI6upK94?feature=share) e já levou um tempo razoável para fazer uma cena simples, imagina ter que calcular interseções de raios 3840x2160 raios (resolução 4K) contra bilhões de polígonos em uma cena! Você tem que fazer uma divisão da cena que segue um modelo inspirado na árvore binária.
      Um dos algoritmos mais usados para compressão (medium.com/programacaodinamica/desvendando-os-arquivos-de-imagens-17f1f95dc4b0) é baseado na árvore de Huffman.

    • @adriellibarboza5320
      @adriellibarboza5320 ปีที่แล้ว

      @@pgdinamica Valeeeeuuu , entendi agora , obrigada !!!!

  • @srdiegorodrigues
    @srdiegorodrigues ปีที่แล้ว

    Como posso implementar a busca na árvore binária, para que ela possa retornar cada nó visitado, dentro de uma lista, até encontrar o nó alvo?

  • @baumths
    @baumths 4 ปีที่แล้ว

    Ótimo vídeo!
    Gostei do tema do vs code, lembra o nome?

    • @pgdinamica
      @pgdinamica  4 ปีที่แล้ว +1

      Cobalt2. Cobalt era um tema do TextMate, que eu amava! Sempre tento encontrar um parecido quando mudo de editor, este é o mais próximo que consegui, mas o original é ainda mais bonito.

    • @baumths
      @baumths 4 ปีที่แล้ว

      @@pgdinamica Nice! Muito obrigado!

  • @linkopaladino
    @linkopaladino ปีที่แล้ว

    Poderia me mandar o link do primeiro video, não estou conseguindo ver a ordem dos videos

    • @pgdinamica
      @pgdinamica  ปีที่แล้ว

      Aqui está a playlist: th-cam.com/play/PL5TJqBvpXQv5Bb71AE5Cd_kB5rNsfU4Cp.html&si=DF7lLJV6PSprgnN8

    • @linkopaladino
      @linkopaladino ปีที่แล้ว

      @@pgdinamica MUITO obrigado, parabéns pelas aulas, você é muito inteligente, que Deus te abençoe muito.

  • @fernandodmedeiros603
    @fernandodmedeiros603 ปีที่แล้ว +1

    Mestre, muito bons os vídeos mas neste #13 a partir dos 22 min ficou muito corrido... Fica a sugestão de editar e regravar na mesma vibe que vinha sendo apresentado o conteúdo. Abs

    • @pgdinamica
      @pgdinamica  ปีที่แล้ว

      O que ficou prejudicado de entender? Como posso te ajudar com a sua dúvida agora?

    • @fernandodmedeiros603
      @fernandodmedeiros603 ปีที่แล้ว

      Nada muito!
      Mas ficou meio corridas as alterações e correções dos erros…
      Mas tudo certo.
      Obrigado pelo retorno

  • @rubemalvesfigueredo9143
    @rubemalvesfigueredo9143 3 ปีที่แล้ว

    Prezado, gostei muito de sua aula, porém eu tenho uma dúvida, que é mais um desafio.
    Como seria o tratamento dado para a entrada que um usuário fizer de uma árvore?
    Exemplo: Entre com uma árvore [ ex:(5(4(11(7()())(2()()))()) (8(13()())(4()(1()())))) ],
    como o usuário poderá entrar com uma árvore como esta e tratarmos cada valor?
    Como verificar se esta é uma árvore binaria de busca verdadeira, através de um script em C?

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Oi, Rubem, não sei se entendi a sua primeira pergunta. Pra recuperar uma árvore a partir da entrada, você tem que saber qual foi o tipo de percurso que gerou essa sequência. Você pode percorrer a árvore em pré-ordem, pós-ordem, ordem simétrica ou em níveis, ao longo desta série sobre árvores, eu mostro cada um dos percursos (os vídeos geralmente não tem o nome do percurso no título, pois os percursos são um recurso para algum outro objetivo; por exemplo, no vídeo sobre altura da árvore ensino o percurso em pós ordem para calcular a altura). Se você não souber como a árvore foi percorrida, não tem como garantir que vai reconstruí-la na ordem correta. Sabendo o percurso, o usuário entra com uma lista normal de números.
      Quanto à segunda pergunta, você precisa pensar na propriedade de uma árvore binária de busca: *para cada nó, o filho a esquerda é menor e o a direita, maior*. Como tem que valer para todo nó da árvore, você tem que percorrer a árvore, por exemplo em pós-ordem, e toda vez que você visitar um nó, basta verificar se o filho à esquerda é menor (ou igual) a ele e se o filho a direita é maior que ele.

    • @rubemalvesfigueredo9143
      @rubemalvesfigueredo9143 3 ปีที่แล้ว

      @@pgdinamica Prezado Hallison, acho que realmente você não entendeu o que perguntei. Tentarei ser um pouco mais direto. A questão é: Desenvolva um script em C no qual o usuário entre com uma árvore [exemplo de entrada: (5(4(11(7()())(2()()))()) (8(13()())(4()(1()())))) ] e tenha como saída, se a árvore é uma árvore binária de busca VERDADEIRA ou FALSA. Ou seja, a árvore apresentada na entrada, se for uma árvore binária de busca, VERDADEIRO, se não, a resposta será FALSO. O problema maior é: como entramos com uma árvore, conforme o exemplo, e tratamos cada um dos valores dos nós para sabermos qual seria a árvore binária de busca verdadeira e assim poder comprar com a árvore que foi dada como entrada?

    • @MichelLedig
      @MichelLedig 3 ปีที่แล้ว

      @@rubemalvesfigueredo9143 essa entrada é só pra voce montar a árvore, depois é só você verificar se em algum momento o No pai aponta pra um valor maior na sua esquerda ou menor na sua direita. Caso entre em uma dessas condições é FALSO (não eh arvore binaria de busca) se não entrar em nenhuma é VERDADEIRO(é uma arvore binaria de busca)
      Me parece que seu maior problema vai ser tratar esse input e criar a arvore em C do que de fato responder o conceito da questao, boa sorte!

  • @Hilow3
    @Hilow3 ปีที่แล้ว

    essa arvore no começo não tem altura 5 e sim 4

    • @pgdinamica
      @pgdinamica  ปีที่แล้ว

      Tem altura 5, sim.

    • @Hilow3
      @Hilow3 ปีที่แล้ว

      ​@@pgdinamicaué sério? Altura não é a maior distância da raiz até a folha mais longe? 61 até 89 um passo, 89 a 66 dois, 66 a 79 três e 79 a 82 quatro

  • @kuririnOffc
    @kuririnOffc 3 ปีที่แล้ว

    QQ ué critério posso elencar como parada?

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      Oi, Diego, se você puder ser mais específico como:
      "Quando quero fazer TAL COISA, qual seria um bom critério de parada?"
      ou
      "No minuto TAL, qual seria um bom critério de parada?"
      Me ajuda a entender para responder :)

    • @kuririnOffc
      @kuririnOffc 3 ปีที่แล้ว

      @@pgdinamica sim :)
      Bom emna busca Binaria tem critérios que fazer com que a busca se encerre, me diz um critério...

    • @pgdinamica
      @pgdinamica  3 ปีที่แล้ว

      th-cam.com/video/EgLE5HwRy_M/w-d-xo.html