Documentacao HASH
Moderador: Moderadores
-
hrodrigom
- Usuário Nível 2

- Mensagens: 63
- Registrado em: 10 Nov 2007 08:04
- Localização: Santa Rita - Paraguay
Documentacao HASH
Boa Tarde pessoal,
Eu tinha uma rotina que em alguns clientes pela quantidade de dados tomava
os inaceitaveis 12 minutos para conclusao.
Resolvi estudar como funciona o HASH e consegui implementar algo que me
deixou maravilhado, baixei esse tempo para 7 seguntos simplesmente criando
uma especie de INDICE em hash para meu array.
Agora pergunto, existe alguma documentacao em portugues ou espanhol sobre
hash.
ja esta sendo de grande ajuda /xharbour/doc/hash.txt.
Mas eu gostaria de uma explicacao mais do meu nivel sobre hash,
quais seriam as aplicacoes possiveis?
Posso trocar meus array por hash, ou nao tem nada a ver.
Hoje ja entendi como funciona
hTeste[1] := 10
hTeste[2] := 20
depois obtenho estes valores, tambem ja consigo testar se uma chave existe
ou nao.. até ai blz..
Mas existe hash multicolunar.. tipo num array.. e se tiver, tem como fazer
um scan dentro de uma destas colunas assim como faço aScan com array. e a
velocidade?
Estou boiando, ou é por ai o caminho?
Grato por qualquer informação.
Eu tinha uma rotina que em alguns clientes pela quantidade de dados tomava
os inaceitaveis 12 minutos para conclusao.
Resolvi estudar como funciona o HASH e consegui implementar algo que me
deixou maravilhado, baixei esse tempo para 7 seguntos simplesmente criando
uma especie de INDICE em hash para meu array.
Agora pergunto, existe alguma documentacao em portugues ou espanhol sobre
hash.
ja esta sendo de grande ajuda /xharbour/doc/hash.txt.
Mas eu gostaria de uma explicacao mais do meu nivel sobre hash,
quais seriam as aplicacoes possiveis?
Posso trocar meus array por hash, ou nao tem nada a ver.
Hoje ja entendi como funciona
hTeste[1] := 10
hTeste[2] := 20
depois obtenho estes valores, tambem ja consigo testar se uma chave existe
ou nao.. até ai blz..
Mas existe hash multicolunar.. tipo num array.. e se tiver, tem como fazer
um scan dentro de uma destas colunas assim como faço aScan com array. e a
velocidade?
Estou boiando, ou é por ai o caminho?
Grato por qualquer informação.
Re: Documentacao HASH
Você não especifica sobre qual hash está falando. Existem vários algoritmos. Se quiser o MD5, visite a página sobre ele na Wikipedia. Mas a melhor documentação está em inglês (não adianta querer fugir da língua inglesa - na nossa área, o que há de melhor está em inglês).hrodrigom escreveu:existe alguma documentacao em portugues ou espanhol sobre hash.
ja esta sendo de grande ajuda /xharbour/doc/hash.txt.
Hash, genericamente falando, é um algoritmo que serve para criar uma "impressão digital" de um conjunto de dados. Dentro dessa característica, que é a única, você cria aplicabilidade para ele. Daí você decide se precisa CRC32, MD5, SHA1, etc, conforme a necessidade de segurança.Mas eu gostaria de uma explicacao mais do meu nivel sobre hash,
quais seriam as aplicacoes possiveis?
Posso trocar meus array por hash, ou nao tem nada a ver.
Eu que fiquei boiando. Não consegui entender pra qual situação você precisa de um hash. Em que situação você usou um hash, que resolveu seu problema com índice? Ou ainda, qual é o problema que você precisa resolver, especificamente?Estou boiando, ou é por ai o caminho?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
hrodrigom
- Usuário Nível 2

- Mensagens: 63
- Registrado em: 10 Nov 2007 08:04
- Localização: Santa Rita - Paraguay
Re: Documentacao HASH
Concordo.Maligno escreveu: Mas a melhor documentação está em inglês (não adianta querer fugir da língua inglesa - na nossa área, o que há de melhor está em inglês).
O que eu gostaria era de ter algum material que explicasse melhor o uso deste tipo de dados. Pois a documentacao explica muito bem (EM INGLES) como manipular estes dados.
Desculpa, acho q nao consegui me expresar bem.Maligno escreveu: Não consegui entender pra qual situação você precisa de um hash.
Para explicar melho que tipo de hash eu estou falando vc poderia ver a documentacao do xharbour
xharbour/doc/hash.txt
ou um exemplo
xharbour/tests/hash.prg
Mas vou tentar me expresar melhor:
Hash no xHarbour pelo que entendo é um tipo de dados, me parece semelhante com arrays, mas muito mais rapido, e com possibilidade de manipular com sintaxe oop.
Na verdade ate ai blz, ja consegui ate dar um uso pratico para este tipo de dados.
Eu criei um hash e para cada chave eu coloquei um valor. o mesmo eu tinha antes em um array, mas o aScan era muito lento.
Array
Código: Selecionar todos
aAdd(array,{'0001',10})
aAdd(array,{'0002',16})
aAdd(array,{'0003',2})
...Hash
Código: Selecionar todos
hTeste := hash()
hTeste['0001'] := 10
hTeste['0002'] := 16
hTeste['0003'] := 2Código: Selecionar todos
variavel_tal := hTeste['0002']Agora, eu gostaria saber se tem como usar um hash para substituir um array multicolunar?
tipo
Código: Selecionar todos
{{'001','TESTE',0},;
{'002','TESTE2',10},;
{'003','TESTE3,14}}Espero que tenha conseguido me expresar melhor desta vez.
Meu portugues é tao bom escrito quando falado
Ah, sim. Agora me toquei do que se trata. Me desculpe. Não é o algoritmo de hash, mas o tipo de dado hash; matriz associativa. Infelizmente não conheço nenhum material em português que explique isso a fundo, a não ser o que consta na Wikipedia em inglês. Clique aqui para ler. Mas se você tem tanta dificuldade no inglês, tente usar o tradutor de páginas do Google. Não fica uma maravilha, mas pode ajudar. 
PS: Pra um paraguaio, seu português está excelente. Melhor do que o de muitos brasileiros.
PS: Pra um paraguaio, seu português está excelente. Melhor do que o de muitos brasileiros.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
hrodrigom
- Usuário Nível 2

- Mensagens: 63
- Registrado em: 10 Nov 2007 08:04
- Localização: Santa Rita - Paraguay
Ate que me defendo no ingles,Maligno escreveu: Mas se você tem tanta dificuldade no inglês
meu problema esta em encontrar documentacao adequada sobre o tema.
Mas mesmo assim, obrigado pelas respostas.
Vou ler o link que me enviastes..
Mas se algum dia vc obter alguma informacao relevante, favor poste no forum. Obrigado
Saudacoes
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
já tentou criar uma matriz associativa onde o resultavo dela é a linha do seu array de várias colunas..
assim vc cria o seu "hash" como no exemplo que vc disse porem retornando a linha correta do seu array, ai basta pegar as outras informacoes diretamente no array
assim vc cria o seu "hash" como no exemplo que vc disse porem retornando a linha correta do seu array, ai basta pegar as outras informacoes diretamente no array
Código: Selecionar todos
{{'001','TESTE',0},;
{'002','TESTE2',10},;
{'003','TESTE3,14}}
hTeste := hash()
hTeste['TESTE'] := 1
hTeste['TESTE2'] := 2
hTeste['TESTE3'] := 3
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
-
hrodrigom
- Usuário Nível 2

- Mensagens: 63
- Registrado em: 10 Nov 2007 08:04
- Localização: Santa Rita - Paraguay
Eu ja tive essa ideia,Luciano Bonfim escreveu:já tentou criar uma matriz associativa onde o resultavo dela é a linha do seu array de várias colunas..
Mas no caso vou ter q ter um hash para cada coluna que eu queira pesquisar.
e se eu quiser reordenar o array vou ter que recriar o hash.
Entao deve ser isso mesmo, eu é que fiquei imaginando a posibilidade de ter um hash com multi-chaves, nao sei se seria essa a expresao correta.
Mas valeu pela resposta.
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Amigo,
anos atrás eu tive o mesmo problema que vc por causa da demora do ASCAN, eu criei uma rotina que faz uma busca binária no array muito mais rápida que o ASCAN. se quiser te passo ela
anos atrás eu tive o mesmo problema que vc por causa da demora do ASCAN, eu criei uma rotina que faz uma busca binária no array muito mais rápida que o ASCAN. se quiser te passo ela
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
lembrando que o array devera estar ordenado pela coluna que vc quer pesquisar.
Código: Selecionar todos
mlinha=buscabin(srchstr,aArray,col_pesq)
function buscabin(mbuscab,a,mcolb)
local i,low,high,mid,mtam_plv,x
low=1
high=len(a)
if high=0
return(0)
endif
mid=int((low+high)/2)
mtam_plv=len(mbuscab)
do while substr(a[mid,mcolb],1,mtam_plv)#mbuscab .and. low<=high
if mbuscab>substr(a[mid,mcolb],1,mtam_plv)
low=mid+1
else
high=mid-1
if high<1
return(0)
endif
endif
mid=int((low+high)/2)
enddo
if substr(a[mid,mcolb],1,mtam_plv)#mbuscab
mid=0
else
for x=mid-1 to 1 step -1
if substr(a[x,mcolb],1,mtam_plv)=mbuscab
mid=x
else
exit
endif
next
endif
return(mid)
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
-
hrodrigom
- Usuário Nível 2

- Mensagens: 63
- Registrado em: 10 Nov 2007 08:04
- Localização: Santa Rita - Paraguay
Obrigado pela Rotina, sera de utilidade.
Saudacoes
Saudacoes
____________________
Rodrigo Machado
FlaRo Sistemas
http://www.flaro.net
Rodrigo Machado
FlaRo Sistemas
http://www.flaro.net
