Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: LeetCode :: Explorando a Solução do Problema "Median of Two Sorted Arrays" com xBase/TLPP



_Créditos das imagens: ChatGPT_

# LeetCode :: Explorando a Solução do Problema "Median of Two Sorted Arrays" com xBase/TLPP

No mundo da resolução de problemas algorítmicos, encontrar soluções eficientes é sempre um desafio. Um dos problemas clássicos amplamente abordados em plataformas como o LeetCode é o ["Median of Two Sorted Arrays"](https://leetcode.com/problems/median-of-two-sorted-arrays/). Neste post, quero compartilhar uma análise sobre três versões de implementações que criei utilizando a linguagem Harbour, no padrão xBase, e também destacar que há versões em TLPP disponíveis no repositório. A evolução entre as versões mostra como o refinamento de técnicas pode melhorar a eficiência de um algoritmo.

## O Problema
O objetivo é encontrar a mediana de dois arrays ordenados. Para isso, devemos criar um algoritmo que funcione com complexidade de tempo O(log(m+n)), onde `m` e `n` são os tamanhos dos arrays. Embora a implementação de uma solução eficiente não seja trivial, ela é alcançável com as técnicas certas.

## Versões Implementadas em Harbour/TLPP

Aqui estão as três versões que criei para resolver o problema. Todas estão disponíveis no meu [repositório no GitHub](https://github.com/naldodj/naldodj-xbase-leetcode-solutions):

### **Versão 4.1**: Combinação e Ordenação
[Código 4.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/004/median_of_two_sorted_arrays.4.1.prg)

A primeira abordagem é direta e utiliza a fusão dos dois arrays em um único array ordenado. Depois, a mediana é calculada com base na posição central desse array combinado. Embora simples, essa abordagem possui uma complexidade de tempo O((m+n) log(m+n)) devido ao custo da ordenação.

**Pontos Positivos:**
- Implementação simples e intuitiva.

**Pontos Negativos:**
- Ineficiente para arrays grandes, pois a complexidade não atende ao requisito de O(log(m+n)).

### **Versão 4.2**: Mesclagem Direta
[Código 4.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/004/median_of_two_sorted_arrays.4.2.prg)

Nesta segunda versão, eliminamos a necessidade de criar um array combinado. Utilizamos uma abordagem semelhante ao merge do algoritmo Merge Sort para encontrar diretamente a mediana. O algoritmo itera pelos elementos dos dois arrays de forma ordenada, mantendo apenas as informações necessárias para o cálculo da mediana.

**Pontos Positivos:**
- Complexidade reduzida para O(m+n).
- Menor uso de memória em comparação com a Versão 4.1.

**Pontos Negativos:**
- Embora mais eficiente, ainda não atende ao requisito de O(log(m+n)).

### **Versão 4.3**: Busca Binária e Divisão e Conquista
[Código 4.3](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/004/median_of_two_sorted_arrays.4.3.prg)

Na terceira versão, implementamos uma solução baseada em busca binária e divisão e conquista. Aqui, os dois arrays são tratados de forma assimétrica: sempre aplicamos a busca no menor dos dois arrays para reduzir a complexidade. A ideia central é dividir os arrays em duas partes de forma iterativa, verificando as condições necessárias para encontrar a mediana.

**Pontos Positivos:**
- Atende ao requisito de complexidade O(log(min(m, n))).
- Algoritmo elegante e eficiente para grandes entradas.

**Pontos Negativos:**
- Implementação mais complexa em comparação com as versões anteriores.

## Versões em TLPP

Também escrevi implementações em TLPP, que podem ser encontradas [neste diretório](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/tree/main/src/tlpp/004). As soluções seguem as mesmas abordagens utilizadas nas versões em Harbour, mas adaptadas à sintaxe e particularidades do TLPP. Isso demonstra a flexibilidade dessas linguagens no padrão xBase para resolver problemas de alta complexidade.

## Conclusão

A evolução dessas versões ilustra como é possível refinar soluções algorítmicas com técnicas mais sofisticadas. Da simplicidade da combinação e ordenação ao uso eficiente de busca binária, essas implementações mostram como a escolha da abordagem correta pode impactar diretamente a eficiência do código.

Espero que este post seja útil para quem deseja aprender mais sobre a resolução de problemas algorítmicos utilizando Harbour e TLPP. Se você tiver dúvidas ou sugestões, deixe um comentário! Vamos compartilhar conhecimento juntos.

---

#### Hashtags

#HarbourLang #xBase #Algoritmos #ProgramaçãoAvançada #DesenvolvimentoDeSoluções #LeetCodeBrasil #TLPP #DivisãoEConquista #BuscaBinária #SoluçõesEficientes

---

Comentários

Postagens mais visitadas