# Documentação do Dataset: LeetCode Problems Dataset (Edição Bilíngue PT-BR / EN)

Documentação técnica, proveniência, metodologia de curadoria e especificação estatística do conjunto de dados **LeetCode Problems Dataset Bilíngue** (`leetcode_problems_pt`).

---

## 1. Visão Geral e Proveniência

| Atributo | Detalhe |
| :--- | :--- |
| **Nome do Dataset** | LeetCode Problems Dataset Bilíngue (PT-BR / EN) |
| **Arquivos Principais** | `leetcode_problems_pt.csv`, `leetcode_problems_pt.json` |
| **Volume de Problemas** | **2.830 problemas** gratuitos catalogados e traduzidos |
| **Cobertura de IDs** | Problemas `1` a `3549` (filtrados para questões públicas com enunciado completo) |
| **Origem dos Dados Brutos** | [Hugging Face - Alishohadaee/leetcode-problems-dataset](https://huggingface.co/datasets/Alishohadaee/leetcode-problems-dataset) / [Kaggle](https://www.kaggle.com/datasets/alishohadaee/leetcode-problems-dataset) |
| **Fontes Primárias** | 1. [LeetCode](https://leetcode.com/) (Enunciados, metadados, métricas e editoriais)<br>2. [LeetCodeHelp](https://leetcodehelp.github.io/) (Códigos de solução em Python, Java e C++) |
| **Tradução e Enriquecimento** | Tradução técnica automatizada via **OpenAI `gpt-5.4-mini`** (Batch API com Structured Outputs) |
| **Campos Novos Adicionados** | `title_pt`, `description_pt`, `hints_pt` |
| **Domínio de Aplicação** | NLP, LLMs, Recuperação da Informação, Predição de Complexidade, Educação em Computação |
| **Finalidade Acadêmica** | Base unificada de problemas para os Trabalhos Práticos da disciplina de **Inteligência Artificial II** |

---

### 1.1. Contexto e Motivação

O **LeetCode Problems Dataset Bilíngue** reúne **2.830 problemas de programação** da plataforma LeetCode, integrando descrições completas em formato HTML, metadados de dificuldade, taxonomias temáticas (*topics*), dicas oficiais (*hints*), métricas consolidadas de engajamento da comunidade (*acceptance rate*, *likes*, *dislikes*), códigos de solução em múltiplas linguagens (**Python**, **Java** e **C++**) e a **tradução completa para o Português Brasileiro (PT-BR)**.

Esta versão foi curada e enriquecida especificamente para servir como banco de dados canônico nos trabalhos práticos da disciplina de **Inteligência Artificial II (IA II)**, permitindo aos alunos desenvolverem pipelines de aprendizado de máquina supervisionado, modelos de linguagem (LLMs), sistemas de recomendação de exercícios e agentes de tutoria socrática.

---

### 1.2. Metodologia de Tradução e Curadoria

A tradução do dataset original em inglês para o português brasileiro seguiu diretrizes técnicas rigorosas para garantir máxima fidelidade didática, visual e semântica:

1. **Estruturação com Saída Estrita (*Structured Outputs*):**
   - O modelo `gpt-5.4-mini` operou com *JSON Schema* forçado, garantindo 100% de conformidade sintática e retorno garantido das chaves `title_pt`, `description_pt` e `hints_pt`.
2. **Preservação Integral de HTML e Código:**
   - Todas as tags HTML (`<p>`, `<code>`, `<pre>`, `<strong>`, `<em>`, `<ul>`, `<li>`, `<sup>`, `<sub>`, `<table>`, `<img>`) foram preservadas intactas.
   - Nomes de variáveis, classes, estruturas, funções e parâmetros (ex.: `nums`, `target`, `head`, `val`, `O(n log n)`) não foram modificados.
   - Expressões matemáticas, limites de restrições e blocos de teste permaneceram idênticos ao original.
3. **Padronização do Glossário Técnico (PT-BR):**
   - Convenção uniforme de vocabulário acadêmico: *array* $\rightarrow$ *array*, *linked list* $\rightarrow$ *lista encadeada*, *binary tree* $\rightarrow$ *árvore binária*, *hash table* $\rightarrow$ *tabela hash*, *two pointers* $\rightarrow$ *dois ponteiros*, *dynamic programming* $\rightarrow$ *programação dinâmica*, *prefix tree* $\rightarrow$ *árvore de prefixos*.
4. **Auditoria e Validação Automática:**
   - Foi executada uma rotina de verificação estrutural (contagem de imagens, blocos `<pre>`, tags `<sup>`, `<sub>` e tabelas) que acusou **98,9% de fidelidade estrutural perfeita** e 0 erros de parsing.

---

## 2. Estrutura de Arquivos e Armazenamento

O diretório local disponibiliza o dataset em dois formatos complementares:

```
trabalho/database/
├── leetcode_problems_pt.csv            # Catálogo completo em formato CSV tabular (25 colunas, 2.830 registros)
├── leetcode_problems_pt.json           # Catálogo completo em formato JSON estruturado com tipos nativos
├── relatorio_exploratorio_dataset.ipynb# Jupyter Notebook com análise exploratória e métricas avançadas
├── relatorio_exploratorio_dataset.html # Relatório visual executivo em HTML autônomo com gráficos
├── README.md                           # Documentação técnica e estatísticas consolidadas (este arquivo)
└── schema.md                           # Especificação formal dos schemas Relacional (SQL) e JSON Schema
```

### Métricas de Tamanho em Disco

| Componente | Registros / Tipo | Tamanho em Disco | Tamanho em Bytes | Formato |
| :--- | :--- | :--- | :--- | :--- |
| **`leetcode_problems_pt.csv`** | 2.830 linhas | ~23,32 MB | 23.320.635 bytes | CSV (UTF-8, delimitador `,`) |
| **`leetcode_problems_pt.json`** | 2.830 objetos | ~25,44 MB | 25.437.176 bytes | JSON (UTF-8, lista raiz) |
| **`relatorio_exploratorio_dataset.ipynb`** | Notebook executado | ~1,23 MB | 1.228.058 bytes | IPYNB (Jupyter v4) |
| **`relatorio_exploratorio_dataset.html`** | Relatório com gráficos | ~1,59 MB | 1.586.210 bytes | HTML5 (Standalone) |

---

## 3. Estatísticas Descritivas do Dataset

### 3.1. Distribuição por Grau de Dificuldade

| Dificuldade | Quantidade | Percentual |
| :--- | :---: | :---: |
| **Medium** | 1.417 | 50,07% |
| **Easy** | 752 | 26,57% |
| **Hard** | 661 | 23,36% |
| **Total** | **2.830** | **100,00%** |

---

### 3.2. Distribuição por Categoria Temática

| Categoria | Quantidade | Percentual | Descrição |
| :--- | :---: | :---: | :--- |
| **Algorithms** | 2.675 | 94,52% | Estruturas de dados, algoritmos clássicos, grafos, DP |
| **Database** | 86 | 3,04% | Consultas SQL, modelagem e manipulação de tabelas |
| **JavaScript** | 37 | 1,31% | Funções assíncronas, closures, prototypes e DOM |
| **pandas** | 15 | 0,53% | Operações de DataFrames em Python |
| **Concurrency** | 6 | 0,21% | Multithreading, semáforos, locks e sincronização |
| **Shell** | 4 | 0,14% | Scripts Bash, processamento de texto com awk/sed |

---

### 3.3. Top 20 Tópicos Algorítmicos Mais Frequentes

| Rank | Tópico (*Topic Tag*) | Frequência de Problemas |
| :---: | :--- | :---: |
| 1 | `Array` | 1.626 |
| 2 | `String` | 683 |
| 3 | `Hash Table` | 589 |
| 4 | `Dynamic Programming` | 508 |
| 5 | `Math` | 503 |
| 6 | `Sorting` | 391 |
| 7 | `Greedy` | 366 |
| 8 | `Binary Search` | 259 |
| 9 | `Depth-First Search` | 242 |
| 10 | `Matrix` | 216 |
| 11 | `Bit Manipulation` | 212 |
| 12 | `Breadth-First Search` | 193 |
| 13 | `Prefix Sum` | 184 |
| 14 | `Tree` | 182 |
| 15 | `Two Pointers` | 181 |
| 16 | `Simulation` | 165 |
| 17 | `Heap (Priority Queue)` | 164 |
| 18 | `Counting` | 145 |
| 19 | `Stack` | 138 |
| 20 | `Graph` | 133 |

---

### 3.4. Estatísticas de Aceitação (*Acceptance Rate*)

* **Média:** 55,13%
* **Desvio Padrão:** 17,36%
* **Mínimo:** 9,56%
* **1º Quartil (Q1):** 42,50%
* **Mediana (Q2):** 55,47%
* **3º Quartil (Q3):** 67,90%
* **Máximo:** 94,49%

---

### 3.5. Disponibilidade de Dicas e Códigos de Solução

* **Dicas Oficiais Traduzidas (`hints_pt`):** 2.012 problemas possuem dicas socráticas traduzidas para PT-BR.
* **Soluções em C++ (`solution_code_cpp`):** 857 problemas contam com código completo.
* **Soluções em Java (`solution_code_java`):** 844 problemas contam com código completo.
* **Soluções em Python 3 (`solution_code_python`):** 719 problemas contam com código completo.

---

## 4. Estrutura dos Dados e Campos Bilíngues

O dataset contém **25 colunas** estruturadas:

| Campo | Tipo | Descrição | Exemplo |
| :--- | :--- | :--- | :--- |
| `frontendQuestionId` | `int` | ID sequencial do problema no LeetCode | `1` |
| `title` | `string` | Título original em inglês | `"Two Sum"` |
| `title_pt` | `string` | **Título traduzido em Português (PT-BR)** | `"Soma de Dois Números"` |
| `titleSlug` | `string` | Slug amigável da URL | `"two-sum"` |
| `difficulty` | `string` | Nível de dificuldade (`Easy`, `Medium`, `Hard`) | `"Easy"` |
| `category` | `string` | Domínio do problema | `"Algorithms"` |
| `url` | `string` | URL canônica do problema | `"https://leetcode.com/problems/two-sum/"` |
| `description` | `string` | Enunciado original completo em HTML (Inglês) | `"<p>Given an array of integers...</p>"` |
| `description_pt` | `string` | **Enunciado completo em HTML (Português PT-BR)** | `"<p>Dado um array de inteiros...</p>"` |
| `hints` | `list[str]` | Dicas originais em inglês | `["A really brute force way..."]` |
| `hints_pt` | `list[str]` | **Dicas traduzidas em Português (PT-BR)** | `["Dica 1: Uma forma de força bruta..."]` |
| `topics` | `list[str]` | Lista de tópicos algorítmicos | `["Array", "Hash Table"]` |
| `acceptance_rate` | `float` | Percentual de submissões aceitas | `55.58` |
| `likes` | `int` | Quantidade de avaliações positivas | `61571` |
| `dislikes` | `int` | Quantidade de avaliações negativas | `2223` |
| `solution_code_python` | `string` | Código da solução oficial em Python 3 | `"class Solution:\n def twoSum..."` |
| `solution_code_java` | `string` | Código da solução oficial em Java | `"class Solution {\n public int[]..."` |
| `solution_code_cpp` | `string` | Código da solução oficial em C++ | `"class Solution {\n public: vector<int>..."` |
| `similar_questions` | `list[dict]` | Questões correlacionadas no LeetCode | `[{"title": "3Sum", ...}]` |
| `stats` | `dict` | Estatísticas brutas de submissão | `{"totalAccepted": "17.1M", ...}` |

*(Para a especificação completa de tipos, constraints e JSON Schema, consulte o documento [`schema.md`](file:///mnt/arquivos/GDrive/Documents/Disciplinas/ia2/trabalho/database/schema.md)).*

---

## 5. Como Utilizar o Dataset (Exemplos Práticos)

### 5.1. Carregamento com Python e Pandas

```python
import pandas as pd
import json

# Carregamento do CSV
df = pd.read_csv("leetcode_problems_pt.csv")

print(f"Total de problemas carregados: {len(df)}")
print(df[["frontendQuestionId", "title_pt", "difficulty", "acceptance_rate"]].head())

# Exemplo de filtragem: Questões 'Easy' de Programação Dinâmica em PT-BR
df_easy_dp = df[(df["difficulty"] == "Easy") & (df["topics"].str.contains("Dynamic Programming", na=False))]
print(f"Problemas Easy de DP: {len(df_easy_dp)}")
```

---

### 5.2. Carregamento com Python e JSON Nativo

```python
import json

with open("leetcode_problems_pt.json", "r", encoding="utf-8") as f:
    problems = json.load(f)

# Acessando o primeiro problema
first = problems[0]
print(f"ID: {first['frontendQuestionId']}")
print(f"Título (EN): {first['title']}")
print(f"Título (PT): {first['title_pt']}")
print(f"Dicas PT: {len(first.get('hints_pt', []))}")
```

---

### 5.3. Consultas Analíticas com DuckDB / SQL

```python
import duckdb

con = duckdb.connect()

# Consulta direta no CSV sem necessidade de carregar tudo na memória
query = """
SELECT 
    difficulty,
    COUNT(*) AS total_problemas,
    ROUND(AVG(acceptance_rate), 2) AS taxa_aceitacao_media,
    ROUND(AVG(likes), 0) AS media_likes
FROM 'leetcode_problems_pt.csv'
GROUP BY difficulty
ORDER BY total_problemas DESC;
"""

print(con.execute(query).df())
```

---

## 6. Atribuição e Citação (BibTeX)

Caso utilize esta base de dados em trabalhos acadêmicos ou relatórios técnicos, utilize a seguinte referência:

```bibtex
@misc{leetcode_problems_pt_2026,
  author       = {Aléssio Miranda Júnior and Seyedali Shohadaeolhosseini},
  title        = {LeetCode Problems Dataset (Edição Bilíngue PT-BR/EN)},
  year         = {2026},
  institution  = {Instituto Federal do Norte de Minas Gerais (IFNMG)},
  note         = {Dataset enriquecido com tradução técnica automatizada via LLM e curadoria estrutural para a disciplina de Inteligência Artificial II},
  howpublished = {\url{https://github.com/alessiojr/disciplina-ia2}}
}
```
