Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Reclamação] Aula 1 modulo 3 - Resolvendo problemas com algoritmos

Essa aula deveria ser refeita com o professor um pouco mais preparado pra explicar a parte dos canibais e missionarios, o professor já no inicio se confunde dizendo que "vamos deslocar 2 canibais pra margem direita", sendo que os canibais já estavam na margem direita... Não foi o unico ponto em que ele se perdeu.

Outra coisa que poderia fazer é adicionar algo mais visual primeiro, no photoshop ou no proprio canva, colocar os 3 missionarios e os 3 canibais separados pelo rio e mostrar como funciona cada passo e só depois mostrar aqueles estados da forma como foi mostrado, já que para um iniciante isso ficou muito confuso.

Se confundiu até o professor, imagina nós.

4 respostas

Olá, Wanderson. Como vai?

Sua crítica é extremamente justa e pontual. O clássico quebra-cabeça dos Missionários e Canibais é um dos problemas mais tradicionais da ciência da computação para ensinar o conceito de espaço de estados, transição e lógica de busca. No entanto, por envolver muitas regras e movimentos de ida e volta, qualquer deslize na explicação verbal de "direita e esquerda" pode arruinar completamente a linha de raciocínio de quem está assistindo, gerando uma confusão enorme.

Sua sugestão de ter um suporte visual claro antes de jogar os dados puramente em tabelas ou códigos é uma excelente prática de design instrucional. Na computação, nós chamamos isso de representação visual do Espaço de Estados.

Para desatar esse nó da aula e garantir que você compreenda perfeitamente a lógica do algoritmo sem se perder nas direções, vamos desenhar o passo a passo de forma estritamente visual.

As Regras do Jogo

  • Objetivo: Levar os 3 Missionários (M) e os 3 Canibais (C) da margem esquerda para a margem direita.
  • O Barco: Leva no máximo 2 pessoas e não navega sozinho (precisa de pelo menos 1 pessoa para remar).
  • A Regra Crítica: Em nenhuma margem o número de canibais pode ser maior que o de missionários, senão os missionários são devorados. (Se não houver missionários na margem, os canibais podem ficar sozinhos sem problemas).

O Passo a Passo Visual (Solução Ótima)

Para acompanhar sem confusão, imagine que o barco começa na Esquerda. Acompanhe cada transição:

  • Passo 1 (Ida): Sobem 2 Canibais no barco e vão para a direita.

  • Esquerda: 3M, 1C | Direita: 0M, 2C (Seguro)

  • Passo 2 (Volta): 1 Canibal pega o barco e volta para a esquerda.

  • Esquerda: 3M, 2C | Direita: 0M, 1C (Seguro)

  • Passo 3 (Ida): Sobem novamente 2 Canibais no barco e vão para a direita.

  • Esquerda: 3M, 0C | Direita: 0M, 3C (Seguro, pois não há missionários na direita)

  • Passo 4 (Volta): 1 Canibal pega o barco e volta para a esquerda.

  • Esquerda: 3M, 1C | Direita: 0M, 2C (Seguro)

  • Passo 5 (Ida): Agora muda a estratégia. Sobem 2 Missionários no barco e vão para a direita.

  • Esquerda: 1M, 1C | Direita: 2M, 2C (Seguro em ambas as margens, o número é igual)

  • Passo 6 (Volta): Aqui está o movimento mais contra-intuitivo do algoritmo. Volta 1 Missionário e 1 Canibal no barco para a esquerda.

  • Esquerda: 2M, 2C | Direita: 1M, 1C (Seguro)

  • Passo 7 (Ida): Sobem 2 Missionários no barco e vão para a direita.

  • Esquerda: 0M, 2C | Direita: 3M, 1C (Seguro, 3M é maior que 1C na direita)

  • Passo 8 (Volta): 1 Canibal pega o barco e volta para a esquerda.

  • Esquerda: 0M, 3C | Direita: 3M, 0C (Seguro)

  • Passo 9 (Ida): Sobem 2 Canibais no barco e vão para a direita.

  • Esquerda: 0M, 1C | Direita: 3M, 2C (Seguro)

  • Passo 10 (Volta): 1 Canibal volta para a esquerda buscar o último.

  • Esquerda: 0M, 2C | Direita: 3M, 1C (Seguro)

  • Passo 11 (Ida Final): Os 2 Canibais restantes sobem no barco e vão para a direita.

  • Esquerda: 0M, 0C | Direita: 3M, 3C — Fim do problema!


Por que os computadores mostram aquilo em forma de "Estados"?

Depois que nós entendemos o desenho, fica mais fácil entender o que o professor tentou mostrar com aqueles conjuntos de números que pareciam confusos. Um computador não entende desenhos, ele entende vetores, como (3, 3, 1).

Essa tripla significa apenas: (Missionários na esquerda, Canibais na esquerda, Posição do barco onde 1=esquerda e 0=direita).

O papel do Pensamento Computacional é justamente esse: pegar um problema do mundo real (as pessoas e o rio), entender a lógica de forma humana e visual (o passo a passo acima) e depois traduzir isso em regras matemáticas simples que um código consiga testar milhares de vezes por segundo até achar a saída.

Muito obrigado por registrar o seu feedback de forma tão construtiva. Vou repassar o seu comentário diretamente para a equipe de qualidade de conteúdo do curso para que eles avaliem a inserção de um material de apoio visual fixo nessa aula ou uma revisão na edição do vídeo para evitar que essa falha de fala prejudique outros alunos.

Espero que essa linha de passos tenha ajudado a clarear o desafio na sua mente! Se alguma parte do trajeto ainda tiver parecido estranha, me avise por aqui.

Voltando ao problema dos C e M, a resolução apresentada na aula nao cumpre a premissa de não poder ter mais C que M na margem direita como no passo 2. O problema não tem solução com a premissa imposta.
A regra apresentada de (Se não houver missionários na margem, os canibais podem ficar sozinhos sem problemas), foi uma excecao que nao estava no problema original.
Mudou o problema.

Olá, Estudante. Como vai?

Você trouxe um ponto excelente para debate! É ótimo ver você analisando as regras com esse nível de criticidade, pois é exatamente essa atenção aos detalhes lógicos que forma bons desenvolvedores.

Entendo perfeitamente o porquê de você ter sentido que a regra foi "alterada". Quando lemos o enunciado desse problema na linguagem humana padrão, ele frequentemente soa um pouco ambíguo, mas essa aparente "exceção" não foi inventada para forçar uma solução: ela é a formulação matemática original desse clássico na Ciência da Computação.

Vamos desmistificar isso observando como o algoritmo entende a regra:

1. O Contexto do Problema (A Regra Clássica)

A premissa fundamental do jogo não é ditar que "o número absoluto de canibais nunca pode superar o de missionários em qualquer cenário". A premissa real é: "Nenhum missionário pode estar em perigo".

Para que os missionários corram risco de serem devorados, eles precisam estar presentes na margem em desvantagem numérica. Logo, se existem 0 Missionários e 3 Canibais do lado direito do rio, nenhum missionário corre perigo ali, pois simplesmente não há nenhum deles daquele lado. A regra só é ativada quando há pelo menos um missionário na mesma margem.

2. A Tradução para a Lógica de Programação

O seu comentário ilustra perfeitamente o motivo de traduzirmos problemas do mundo real para códigos: a linguagem de máquina não aceita ambiguidades.

Quando construímos esse algoritmo em Python, C# ou Java, nós não dizemos "não deixe ter mais canibais". Nós criamos uma estrutura condicional OR (OU) para validar se um estado é seguro. Uma margem só é segura se:

  • O número de Missionários for igual a zero (M == 0). OU...
  • O número de Missionários for maior ou igual ao de Canibais (M >= C).

Olhando para o Passo 2 que você apontou (onde a margem direita fica com 0 Missionários e 1 Canibal):

  • Condição: M == 0? Sim.
  • Resultado: Estado seguro.

A sua observação foi brilhante porque escancarou o salto que existe entre a interpretação de um texto comum e o rigor matemático de um algoritmo de estado. Sem essa regra do M == 0, como você bem notou, o problema seria matematicamente impossível de ser resolvido.

Parabéns pelo olhar afiado e pelo raciocínio analítico! Continue questionando as estruturas e os limites dos problemas.

Espero que essa explicação tenha clareado a lógica por trás do desafio!

solução!

Sinto que estou falando com o chatgpt, vou encerrar por aqui