Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código

_Créditos das imagens: ChatGPT **Título:** LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código **Introdução** Olá, entusiastas de Harbour/xBase e desafios de programação! Depois de explorarmos como mesclar duas listas ordenadas no [nosso post sobre o LeetCode 21](https://www.blacktdn.com.br/2025/03/blacktdn-leetcode-21-merge-two-sorted.html), vamos dar um passo adiante e enfrentar um problema um pouco mais complexo: o LeetCode 23 - Merge K Sorted Lists. Neste artigo, vamos desvendar uma implementação em Harbour/xBase para este desafio, demonstrando como podemos inteligentemente reutilizar a solução que já construímos para o problema 21. Veremos como a modularidade e a construção sobre soluções anteriores podem simplificar problemas mais complexos. **O Problema: LeetCode 23 - Merge K Sorted Lists** O desafio é o seguinte: dado um array (`aLists` em nossa implementação) contendo `k` listas encadeadas, onde cada lista já está ordenada em ordem cres...

Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (Making-of :: operador de Hash)

  1. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL ;

  2. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (Round 2, Figth!) ; e

  3. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (You Win!)

Os “Bastidores da série: Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL”, irão revelar o poder por trás do pré-processador ADVPL. Nosso astro Principal: “ptxlsxml.ch”.

O Operador de Hash (ao som de Ice T “Colors”).

Antes de mais nada, para que tudo fosse possível, foi necessária uma “pequena” adaptação no código original do Harbour pois o operador de Hash => não é suportado pela linguagem ADVPL. O operador de Hash do Harbour, a exemplo do operador de Array {} (ADVPL/Harbour) tem uma função equivalente.

Para o operador {} temos a função Array() e, para =>, do Harbour, teremos hb_hash(). Sem isso seria impossível a utilização do código Harbour em ADVPL.

As alterações em relação ao operador => foram:

Para o Programa: xlsxml.prg

image

image

Para o programa: xlsxml_s.prg

image

 image

image

image

e, Para o Programa: xlsxml_y.prg

image

image

image 

image

Mas afinal, o que é Hash?

Segundo a WikPédia podemos definir  Hash ou “Vetor associativo” como:

Um vetor associativo é uma estrutura de dados composta de um conjunto não-ordenado de itens formados por um par chave e valor, no qual cada chave possui um valor associado. Essas chaves são definidas pelo usuário e devem ser armazenadas na estrutura. O relacionamento existente entre as chaves e seus respectivos valores é chamado de mapeamento, pois para buscar um valor utiliza-se a chave como índice de busca. Na implementação de um vetor associativo, os elementos são armazenados e recuperados com funções de dispersão. Pode-se buscar o valor de um elemento pela chave e também verificar se existe algum elemento relacionado àquela chave.

A principal vantagem existente na utilização de vetores associativos está na facilidade de realização de buscas por valores. Porém, não é tão eficiente quanto um vetor comum quando todos os elementos do vetor devem ser processados.

A relação entre uma chave e seu valor as vezes é chamada de mapeamento ou ligação. Por exemplo, se o valor associado à chave "bob" é 7, dizemos que nosso vetor mapeia "bob" para 7. Vetores associativos estão intimamente relacionados ao conceito matemático de função bijetora um domínio finito. Como conseqüência, um uso comum e importante de vetores associativos é em memorização.

Onde encontramos essa estrutura/formação:

Em arquivos INI, XML, HTML, etc.

Bem, o maior trabalho na compatibilização do código Harbour com ADVPL, foi, de fato, Hash. Tive que simulá-lo e, com certeza, não o fiz de forma otimizada. Reaproveitei, por suas características, a classe TFINI; que evoluiu a séria candidata ao controle de Hash e passou a denominar-se THash donde TINI passou a derivar. É mister afirmar que, com um pouquinho de estudo, poderemos implementar Hash de forma intuitiva, nativa e, por que não dizer, descente. Mas, isso é uma outra história.

Que venha o Pré-Processador.

[]s

иαldσ dj

Comentários

  1. Fala ae Grande Mestre Lee!!!! Hehehe.. é impressao ou realmente vc esta fodao nos ultimos posts??? Caraca... esse com certeza esta no top10, pena q nem todos que acompanham o blog ou trabalham com Microsiga/Advpl no dia a dia entenderam todo processo e a grande obra de arte por tras de tudo isso... Mas de toda forma que sirva antes de tudo como grande exemplo para que o conhecimento nunca fica engessado como muitos acabam fazendo no decorrer de tempo! Parabens e mais uma vez sem palavras Mestrao!!! Grande abraço!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas