Usuário com melhor resposta
Arvore Binária de pesquisa vba

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.
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
-
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!
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 17 de outubro de 2014 00:11
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
-
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.
-
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
-
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!
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 17 de outubro de 2014 00:11