-
Árvores de Decisão em Ciência da Computação usadas em inteligência artificial
Uma Árvore de Decisão é: •um nó folha (ou nó resposta) que contém o nome de uma classe ou o símbolo nulo (nulo indica que não é possível atribuir nenhuma
-
Métodos Ensemble em Ciência da Computação usadas em inteligência artificial
Estes métodos são a combinação de diferentes modelos para se obter um único resultado. Eles são construídos de maneira similar aos algoritmos mais simples, como regressão linear ou árvore de
-
Árvores em Ciência da Computação usadas em inteligência artificial
Árvores de decisão ou árvores de classificação são definidas informalmente como modelos de aprendizado supervisionado que representam regras de decisão baseadas nos valores dos atributos. São muito usadas em inteligência
-
Epigramas interessantes do primeiro laureado com o prêmio Turing da ACM!
Oi caro(a) leitor(a), começo com a definição de epigrama. Depois com os comentários do Alan J. Perlis sobre os fenômenos que cercam os computadores e produzem uma base surpreendentemente rica
-
Cinco enxadristas famosos que aparecem em várias listas de melhores de todos os tempos!
A lista dos cinco enxadristas está ordenada pela data de nascimento, seguida por uma curta biografia do gênio enxadrista Começo com um desafio! No menu jogos deste site, tem um
-
Guia prático para escolher entre Estatística, Aprendizado de Máquina e Rede Neural: objetivos, tipo de previsão, volume de dados e recomendações
Como escolher o melhor modelo? — Métodos e critérios práticos Como escolher o melhor modelo? — Um guia prático
Infográfico: guia rápido para escolher entre Estatística, Aprendizado de Máquina e Rede Neural. (Criação: Herez) Este post resume um infográfico prático que ajuda a decidir entre modelos estatísticos, técnicas de aprendizado de máquina e redes neurais, com base no objetivo da análise, no tipo de previsão e no volume de dados disponível.
1. Qual é o seu objetivo?
Antes de escolher uma técnica, defina se você precisa explicar e entender relações entre variáveis ou predizer resultados futuros. Interpretabilidade favorece abordagens estatísticas; predição costuma favorecer técnicas de machine learning.
2. Tipo de previsão
- Valor numérico contínuo — regressão (preço, temperatura).
- Categoria — classificação binária ou multiclasse (spam, churn).
- Vários rótulos — problemas multilabel ou visão computacional.
3. Volume de dados
Regra prática: com pouco a moderado (até ~10k linhas) prefira modelos estatísticos ou algoritmos clássicos de ML; com muito dado (acima de ~10k e especialmente multimídia) redes neurais podem trazer ganhos.
Resumo das abordagens
Estatística
Use quando o foco for interpretabilidade e entendimento causal. Exemplos: regressão linear, regressão logística, ANOVA. Indicado para conjuntos menores e quando é essencial explicar efeitos.
Aprendizado de Máquina
Boa escolha para previsões com dados estruturados (tabelas). Exemplos: Random Forest, XGBoost, SVM. Oferece bom desempenho com volumes moderados e é relativamente rápido de treinar e validar.
Rede Neural
Indicada para problemas complexos e grandes volumes de dados (imagens, áudio, texto). Exemplos: CNNs, RNNs, Transformers. Requer recursos computacionais e cuidado com overfitting.
Dicas práticas
- Comece simples e evolua: teste modelos estatísticos e clássicos antes de partir para redes profundas.
- Compare modelos com validação adequada e métricas relevantes ao problema.
- Priorize qualidade dos dados: limpeza, engenharia de features e balanceamento são frequentemente mais decisivos que a escolha do modelo.
- Documente experimentos e garanta reprodutibilidade (scripts, seeds, versões de dependências).
Quadro rápido
Tipo Objetivo Estatística Entender e explicar Aprendizado de Máquina Prever com dados estruturados (pouco a moderado) Rede Neural Prever problemas complexos com muito dado Quer saber mais?
Se você gostou deste guia e quer materiais complementares, exemplos de código ou o arquivo do infográfico em alta resolução, visite meu site e portfólio em Herez.com.br. Lá você encontra artigos, repositórios e recursos práticos para aplicar essas recomendações em projetos reais.
-
Enunciado completo do jogo Campo Minado (Minesweeper)
Jogo Campo Minado — Enunciado e Implementação | Herez Jogo Campo Minado
Enunciado completo do jogo Campo Minado (Minesweeper): regras, especificações das classes a implementar (Tabuleiro, JogadorHumano, JogadorAutomatico), exemplos de uso, dicas de implementação e critérios de avaliação e entrega. Leia também o jogo hospedado em herez.com.br/campo-minado/.
1. Introdução
O objetivo é implementar uma versão do jogo Campo Minado, incluindo a construção do tabuleiro e a implementação de jogadores (humano e automático). Antes de começar, recomenda-se jogar algumas partidas em uma implementação conhecida para compreender as regras.
😂 Piadas sobre o jogo Campo Minado
- 1. Por que o programador levou uma pá para o jogo? Porque ouviu que ia ter muitas minas para depurar. 😂
- 2. Jogador automático: “Escolho a posição (1,1)!” Tabuleiro: “Surpresa!” Jogador automático: “Era só um teste unitário.” 😂
- 3. Como o Campo Minado pede feedback? “Clique aqui para reportar um bug… e aqui para explodir ele.” 😂
- 4. Por que o primeiro clique nunca é uma mina? Porque o jogo também acredita em segundas chances. 😉
- 5. Dica de otimização: se o seu algoritmo sempre perde, troque o nome da função para
ganhar()— pelo menos o log vai ficar bonito. 😂 - 6. O que disse o tabuleiro ao jogador indeciso? “Relaxa, eu já marquei suas dúvidas com uma bandeira.” 😂
- 7. Por que o professor pediu o código do Tabuleiro? Para ver se o aluno sabia lidar com exceções… e com explosões. 😉
- 8. Se a IA do jogo perder no xadrez, ela culpa o tabuleiro; se perder no Campo Minado, culpa o RNG. 😂
💣 Piadas rápidas — Campo Minado & Programadores
- 1. Por que o programador adora o Campo Minado? Porque é o único lugar onde marcar uma bandeira é considerado progresso. 😂
- 2. Primeiro clique seguro: quando o jogo garante que a primeira jogada não explode, é o equivalente a um teste unitário que passa na primeira execução. 😂
- 3. O jogador automático disse que ia usar heurística — na prática, virou um gerador de números aleatórios com diploma. 😂
- 4. Como o programador chama uma posição suspeita? “TODO: verificar depois” — e marca com uma bandeira para lembrar. 😂
- 5. Dica de debugging: se o seu algoritmo sempre encontra minas, talvez o bug esteja no RNG — ou no karma. 😂
- 6. Professor: “Mostre o código.” Aluno: “Mostre o tabuleiro.” Ambos esperam que ninguém exploda durante a demonstração. 😂
- 7. Por que o tabuleiro é um bom colega de trabalho? Porque sempre revela o que precisa ser melhorado — às vezes com muita energia. ⚡️
- 8. Se a IA perde no xadrez, culpa a estratégia; se perde no Campo Minado, culpa o RNG — o clássico “não é bug, é aleatoriedade”. 😂
2. Regras do jogo
O jogo é jogado em um tabuleiro quadriculado (matriz
n × m) comkminas posicionadas aleatoriamente. O jogador revela posições até encontrar todas as minas ou até revelar uma posição com mina (perdendo).Comportamento ao revelar uma posição
- Se a posição contém uma mina → jogador perde; o tabuleiro revela todas as minas.
- Se a posição não contém mina → a posição é rotulada com o número de minas nas oito posições adjacentes.
- Se esse número for zero → todas as posições adjacentes são reveladas recursivamente (efeito “expansão”).
Observação: o jogo deve garantir que a primeira escolha do jogador nunca seja uma posição com mina.
3. Especificação do exercício
Implementar as seguintes classes em Java, respeitando as interfaces pedidas para permitir testes automáticos:
3.1 Classe
TabuleiroA classe
Tabuleirodeve oferecer os construtores e métodos abaixo.// Construtores: public Tabuleiro(int n, int m, int k); public Tabuleiro(int i); // Métodos de acesso: public int numLinhas(); public int numColunas(); public int numMinas(); // Métodos de usuário: public int numPosRestantes(); public int numPosReveladas(); public int numJogadas(); public boolean fim(); public boolean ganhou(); public boolean perdeu(); public void recomeca(); public void imprimeTabuleiro(); public int jogada(int i, int j);Comportamento do construtor:
Tabuleiro(int i)cria níveis predefinidos:- Fácil:
n=8, m=8, k=10(i = 1) - Médio:
n=16, m=16, k=40(i = 2) - Difícil:
n=16, m=30, k=99(i = 3)
Se os parâmetros do construtor com três inteiros não forem viáveis, criar um tabuleiro de nível fácil.
Retorno do método
jogada-1→ posição contém mina (jogador perdeu)0→ todas as posições foram reveladas (jogador venceu)1→ posição foi revelada com sucesso2→ posição já havia sido revelada antes-2→ parâmetros inválidos
Após fim da partida,
jogadadeve sempre devolver o mesmo valor (0 ou -1).3.1.1 Representação do tabuleiro
Sugestão de representação por matriz de inteiros com valores:
-2→ posição contém mina;-1→ posição não contém mina e não foi revelada;i(0 ≤ i ≤ 8) → posição revelada comiminas nas 8 vizinhas.
Dica: crie uma moldura (borda) e use matriz de tamanho
(n+2) × (m+2)para simplificar verificações de vizinhança.3.1.2 Exemplo de uso
> Tabuleiro tab = new Tabuleiro(1); > tab.jogada(1,7) 1 > tab.imprimeTabuleiro() 1 2 3 4 5 6 7 8 /-----------------\ 1 | + + 1 0 0 0 0 0 | 1 2 | + + 3 2 1 1 0 0 | 2 3 | + + + + + 1 0 0 | 3 4 | + + 3 2 1 1 0 0 | 4 5 | + + 1 0 0 0 1 1 | 5 6 | + + 3 2 1 1 2 + | 6 7 | + + + + + + + + | 7 8 | + + + + + + + + | 8 \-----------------/3.2 Classe
JogadorHumanoPermitir que uma pessoa jogue via teclado. Cada objeto deve oferecer o método
public void iniciaJogo(), que conduz a partida, pedindo nível (ou tabuleiro personalizado) e coordenadas a cada iteração.3.3 Classe
JogadorAutomaticoDeve fornecer o método
public boolean iniciaJogo(Tabuleiro t), que joga a partida no tabuleirote retornatruese vencer. Estratégia simples (aleatória) é aceitável; estratégias mais inteligentes são opcionais.4. Itens opcionais
- Marcar o tempo do jogo;
- Adicionar marcação de posições suspeitas (flags);
- Tornar o jogador automático mais inteligente;
- Criar interface gráfica.
5. Observações importantes
Sobre elaboração: o trabalho pode ser feito em dupla com programação pareada; siga as regras de cooperação descritas no enunciado.
Sobre entrega: escreva cada classe em arquivo separado e inclua o cabeçalho sugerido no início de cada arquivo.
6. Critérios de avaliação e entrega
- Exercícios copiados receberão nota ZERO.
- Exercícios atrasados não serão aceitos.
- Qualidade de comentários, indentação e clareza das saídas influenciam a nota.
- Prazo de entrega: 27/06/2026.
7. Cabeçalho sugerido para arquivos
/***********************************************************/ /** Exercício-Programa -- Campo Minado Arquivo: <nome do arquivo> <nome do(a) aluno(a)> <número do(a) aluno(a)> <data de entrega> /***********************************************************/Link relacionado: versão hospedada e recursos adicionais em https://herez.com.br/campo-minado/. -
Comandos Linux para gerenciar Memória e Processos
Comandos essenciais e exemplos práticos | Herez Comandos essenciais e exemplos práticos | Herez
Este post descreve comandos básicos de sistema e processos em Linux, detalha o que cada comando faz e traz exemplos profissionais de como Herez os utilizou em operações reais de administração e automação.
Comandos e explicações
date
O que faz: mostra a data e hora atuais do sistema.
$ dateExemplo profissional (Herez): ao investigar logs de um deploy automatizado, Herez usoudatepara confirmar o timestamp do servidor antes de correlacionar entradas de log entre máquinas em fusos horários diferentes.uptime
O que faz: informa há quanto tempo o sistema está ligado, carga média e usuários conectados.
$ uptimeExemplo profissional (Herez): após um pico de latência, Herez executouuptimepara verificar se a carga média estava elevada e correlacionou com um cron job que iniciou no mesmo período.whoami
O que faz: exibe o usuário atual no shell.
$ whoamiExemplo profissional (Herez): durante manutenção remota, Herez usouwhoamiem scripts de deploy para garantir que comandos críticos eram executados com o usuário correto (evitando executar como root por engano).free -h
O que faz: mostra uso de memória (RAM e swap) em formato legível (-h = human readable).
$ free -hExemplo profissional (Herez): ao diagnosticar um serviço que consumia memória, Herez rodoufree -hantes e depois de reiniciar o serviço para quantificar a redução de uso de memória e ajustar limites de container.df -h
O que faz: exibe espaço em disco usado e disponível em todas as partições, em formato legível.
$ df -hExemplo profissional (Herez): em um incidente de falta de espaço, Herez usoudf -hpara identificar partições quase cheias e priorizar limpeza de logs e arquivos temporários.du -sh pasta
O que faz: mostra o tamanho total de um diretório especificado de forma resumida e legível (-s = summary, -h = human readable).
$ du -sh /var/logExemplo profissional (Herez): para localizar diretórios que consumiam espaço, Herez executoudu -shem subpastas de /var e identificou logs antigos que foram compactados e arquivados.uname -a
O que faz: exibe informações detalhadas do kernel e do sistema operacional.
$ uname -aExemplo profissional (Herez): antes de compilar um módulo de kernel para otimização, Herez usouuname -apara confirmar versão do kernel e arquitetura da máquina.ps
O que faz: lista processos em execução no shell atual.
$ psExemplo profissional (Herez): em scripts de verificação, Herez usoupspara checar se um processo de manutenção havia sido iniciado corretamente antes de prosseguir com etapas dependentes.ps aux
O que faz: lista todos os processos do sistema com detalhes (usuário, CPU, memória, comando).
$ ps auxExemplo profissional (Herez): para identificar processos que consumiam CPU excessiva, Herez rodoups aux --sort=-%cpue isolou o PID do serviço a ser otimizado.top
O que faz: monitor em tempo real dos processos, uso de CPU, memória e carga do sistema.
$ topExemplo profissional (Herez): durante um pico de uso, Herez abriutoppara observar comportamento em tempo real e identificar processos que precisavam ser reiniciados ou limitados via cgroups.kill PID
O que faz: envia sinal SIGTERM ao processo identificado por
PID, solicitando encerramento gracioso.$ kill 12345Exemplo profissional (Herez): ao encerrar um worker que não respondia a requisições, Herez primeiro tentoukill PIDpara permitir limpeza de recursos antes de forçar encerramento.kill -9 PID
O que faz: envia sinal SIGKILL ao processo, forçando encerramento imediato sem chance de limpeza.
$ kill -9 12345Exemplo profissional (Herez): quando um processo travado não respondia a SIGTERM e comprometia a estabilidade do serviço, Herez usoukill -9como último recurso, documentando o evento e acionando reinício controlado.Boas práticas e recomendações
- Documente ações críticas: sempre registre PID, horário e motivo ao encerrar processos em produção.
- Prefira encerramento gracioso: tente
kill PIDantes dekill -9para evitar corrupção de dados. - Monitore continuamente: combine
topeps auxcom ferramentas de monitoramento para alertas proativos. - Automatize verificações: scripts que usam
uptime,free -hedf -hajudam a detectar degradação antes de incidentes.
Observação: estes comandos são poderosos; execute-os com cuidado em ambientes de produção e, quando possível, em janelas de manutenção ou ambientes de teste.
Biografia do autor: Doutor Herez possui Bacharelado em Análise de Sistemas, Mestrado em Engenharia de Computação/Software, Doutorado em Ciência da Computação e seu primeiro diploma acadêmico em Processamento de Dados em 1996. Início profissional na carreira em T.I. em 1993 com o primeiro certificado de programação de computadores em 1986 e início da participação em curso de programação em 1985. Microsoft Certified Professional desde 2000, entre outros títulos oficiais de diversos grandes fabricantes internacionais de software, também criou cursos e provas oficiais voltados à programação de computadores. Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: análise e desenvolvimento de sistemas, engenharia de software, métodos de pesquisa e métodos ágeis.
