Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Agentes de IA em Harbour (xBase)

_Créditos das imagens: ChatGPT 💡 **Agentes de IA em Harbour (xBase)** [**naldodj-hb-ai-agents**](https://github.com/naldodj/naldodj-hb-ai-agents), um framework open-source para criação de agentes de IA autônomos em Harbour! 🚀 Inspirado no trabalho original da FiveTech Software, este projeto expande essa ideia para desenvolvedores xBase, permitindo a automação de tarefas com classes como `TAgent` e `TOLlama`. Agora, seu código pode manipular arquivos, realizar cálculos e até responder perguntas como "Que horas são?". 🔹 **Destaques:** ✅ **Modular e prático** – Crie pastas, edite arquivos e interaja de forma inteligente. ✅ **Requisitos mínimos** – Harbour + Ollama instalados localmente. ✅ **Confiabilidade** – Inclui uma suíte de testes (`hb_agents.prg`). 📌 Confira no GitHub: [naldodj-hb-ai-agents](https://github.com/naldodj/naldodj-hb-ai-agents). 📌 Referência: [Class TOllama with Agents](https://forums.fivetechsupport.com/viewtopic.php?t=45590) (FiveTec...

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