none
Arvore Binária de pesquisa vba RRS feed

  • Pergunta

  • Boa Noite
    Gostaria de saber se existe alguma técnica para criar arvores binarias de pesquisa em vba. Vi uns tópicos de classes em vba que deu-me esperança, porem não consegui replicar da mesma forma como eu faria em java por exemplo. (obs: só posso usar vba no ambiente onde trabalho)

    Desde já agradeço a atenção.

    terça-feira, 7 de outubro de 2014 02:27

Respostas

  • Sub pMain()
      Dim vTest As Variant
      Dim bFound As String
      
      'Vetor de teste
      vTest = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
      
      'O número 7 existe no vetor de teste?
      bFound = pBinarySearch(7, vTest)
      
      If bFound Then
        MsgBox "Elemento encontrado no vetor de teste.", vbInformation
      Else
        MsgBox "Elemento não encontrado no vetor de teste.", vbExclamation
      End If
      
    End Sub
    
    Function pBinarySearch(vElement As Variant, vArray As Variant) As Boolean
      Dim lLower As Long
      Dim lUpper As Long
      Dim l As Long
      Dim result As Boolean
      
      lLower = LBound(vArray)
      lUpper = UBound(vArray)
      
      Do While lLower <= lUpper
        l = (lLower + lUpper) / 2
        If vElement = vArray(l) Then
          pBinarySearch = True
          Exit Do
        ElseIf vElement < vArray(l) Then
          lUpper = (l - 1)
        Else
          lLower = (l + 1)
        End If
      Loop
    End Function
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta lwilmsen sexta-feira, 10 de outubro de 2014 12:19
    terça-feira, 7 de outubro de 2014 22:28
    Moderador
  • Olá, acabei utilizando os recursos do excel mesmo e inclui uma barra de progresso que achei la no seu site (bem legal, diminui a ansiedade, hehe). Muito obrigado!
    sexta-feira, 10 de outubro de 2014 12:31

Todas as Respostas

  • Sub pMain()
      Dim vTest As Variant
      Dim bFound As String
      
      'Vetor de teste
      vTest = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
      
      'O número 7 existe no vetor de teste?
      bFound = pBinarySearch(7, vTest)
      
      If bFound Then
        MsgBox "Elemento encontrado no vetor de teste.", vbInformation
      Else
        MsgBox "Elemento não encontrado no vetor de teste.", vbExclamation
      End If
      
    End Sub
    
    Function pBinarySearch(vElement As Variant, vArray As Variant) As Boolean
      Dim lLower As Long
      Dim lUpper As Long
      Dim l As Long
      Dim result As Boolean
      
      lLower = LBound(vArray)
      lUpper = UBound(vArray)
      
      Do While lLower <= lUpper
        l = (lLower + lUpper) / 2
        If vElement = vArray(l) Then
          pBinarySearch = True
          Exit Do
        ElseIf vElement < vArray(l) Then
          lUpper = (l - 1)
        Else
          lLower = (l + 1)
        End If
      Loop
    End Function
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta lwilmsen sexta-feira, 10 de outubro de 2014 12:19
    terça-feira, 7 de outubro de 2014 22:28
    Moderador
  • Olá Felipe, primeiro agradeço a excelente contribuição, segundo quero pedir desculpas pois não quis entrar na complexidade do problema e me expressei mau no que preciso.

    O meu problema é o seguinte, tenho que trabalhar com arquivos em txt com mais de 100 mil linhas, os campos principais são: "referencia", "valor" e "tipo de documento" e estão separados por "|".

    Eu posso ignorar os valores que se anulam (quando "referencia" e "valor" são iguais ao comparar duas linhas), e ao final, preciso colocar em abas diferentes por "tipo de documento".

    A ideia que tive foi ir montando uma arvore em tempos de execução e se o valor+referencia já estiverem na arvore não inclui, ao final desmonto a arvore colocando nas abas correspondentes por "tipo de documento" no excel.

    Aceito outras sugestões.

    quarta-feira, 8 de outubro de 2014 13:37
  • Entendi. Penso então que o problema, na verdade, não está relacionado com algoritmo de busca binário. Poderia disponibilizar uma amostra do arquivo TXT (algumas linhas) para eu sugerir um código?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 8 de outubro de 2014 21:20
    Moderador
  • Olá, acabei utilizando os recursos do excel mesmo e inclui uma barra de progresso que achei la no seu site (bem legal, diminui a ansiedade, hehe). Muito obrigado!
    sexta-feira, 10 de outubro de 2014 12:31