0

Estratégias para resoluções de problemas | Pense como um programador. (Parte 2)

#Lógica de Programação
Ígor Vieira
Ígor Vieira

Fala pessoal, tudo bem?


Continuando com as nossas séries de artigos, dessa vez falando sobre mais uma estratégia para resolução de problemas, vamos falar agora sobre como conseguir planejar técnicas sistemáticas para enfrentar alguns problemas, mesmo quando isso não parece possível.



Quebra-cabeça deslizante (Ou seria racha-cuca ?)

Um quebra cabeça deslizante ou racha-cuca como eu acho ser conhecido aqui no Brasil/Minas gerais é um quebra cabeça que vem em diferentes tamanhos, vamos ver dois deles.


Eles podem oferecer váaarios mecanismos de resolução de problema, porém o que nós vamos exemplificar agora e a versão 3×3


Racha-cuca 3x3.

descrição:

O racha-cuca oferece um grid de 3x3 preenchido com oito peças, numeradas de 1 a 8, e com um espaço vazio. Inicialmente, o grid vem aleatório, e uma peça pode ser deslizada para o espaço vazio, deixando o espaço que estava anteriormente vazio. O objetivo é deslizar as peças até o racha-cuca está em um ordem, como 1, 2, 3… etc. Com o 1 na esquerda superior.


Como era antes:

https://imgur.com/WljmJfZ


Concluído o Objetivo:

https://imgur.com/YPCrjrg


Obs.: Se você nunca teve contato com o racha-cuca, vou deixar aqui um link para que você possa jogar online e se familiarizar hehe


https://www.helpfulgames.com/subjects/brain-training/sliding-puzzle.html


O problema do racha cuca é bem diferente daquele que vimos no artigo passado, da raposa o ganso e a pipoca. Naquele problema a dificuldade vem basicamente da se pensar nas operações possíveis.


Nesse caso do racha cuca, isso não acontece, porque independente da configuração inicial do quebra cabeça você tem todas as suas opções claras, basicamente você pode arrastar as 3 peças adjacentes ao espaço vazio. Eisso já te da inumerada todas as possibilidades que você pode ter.


A dificuldade desse problema vem da longa “cadeia” de operações que requer a solução final. Você pode seguir uma cadeia de operações que vai colocar todas as peças no lugar certo, porém, você também pode fazer a cadeia de operações que não. Por causa disso, é difícil dizer qual cadeia particular vai fazer com que você tenha algum progresso para chegar no objetivo final.


Como você não tem uma maneira de medir o progresso no racha cuca, você provavelmente vai ficar inclinado a só tentar mover as peças até conseguir terminar o quebra cabeça(o que eu fiz minha vida inteira).


Contundo, porém e, entretanto, isso não pode ser a melhor forma de se conseguir fazer o racha-cuca, certo? Existem estratégias possíveis, ele não é nada mais nada menos do que um problema.


Vamos simplificar um pouco e mostrar agora uma abordagem, para resolução desse categoria de problema exemplificado pelo racha-cuca.


Considerando agora um racha-cuca menor com um grid que é retangular e não um quadrado.


Racha-cuca de 3x2.

Descrição:


O 3×2 possui um grid que é preenchido com 5 peças, numerado de 4 á 8, e um espaço em branco.


Inicialmente, o grid vem com uma configuração aleatória. Uma peça pode ser deslizada para o espaço em branco adjacente, deixando a localização da mesma vazia. O objetivo é deslizar as peças no grid fazendo com que elas fiquem numeradas na configuração final. Com o 4 na esquerda superior.


https://imgur.com/UhhLtlT


Você vai perceber que nesse exemplo, as nossas peças dessa vez são numeradas de 4 á 8 em vez de 1 á 5. A razão disso acontecer vai ficar mais clara logo logo.


Apesar desse exemplo ter o mesmo problema do exemplo anterior, com 8 peças, é muito mais fácil agora, com 5 peças do que anteriormente.


Se você a partir desse racha-cuca de 5 peças começar a deslizar, provavelmente você vai conseguir rapidinho numerar as peças certinho.


Eu, por exemplo, tenho a seguinte estratégia (essa é a mesma estratégia que eu uso para qualquer racha-cuca, já chego lá).


Se você perceber, linhas de cima do retângulo, forma um trenzinho.

https://imgur.com/UhhLtlT


A partir dessa observação, você vai ver que se você ir deslizando as peças na forma de um círculo, você pode rodar elas para qualquer lugar do grid, preservando a ordem relativa das peças.


Agora pensando de forma mais simples de se fazer, se você pegar 3 peças e um espaço vazio, você consegue fazer a mesma coisa.


https://imgur.com/T3HUeLo


podemos, por exemplo, rotar o 8, para o espaço vazio, depois o 4 para o espaço vazio acima, depois o 7 para o lugar do 4 e assim por diante, conseguindo deixar qualquer desses números no lugar que você quiser nesse caminho do “trenzinho”.


Usando o “trenzinho” nós pode mover uma série de peças, mas manter ainda, manter as suas relações. Agora, vamos retornar paro nosso exemplo do racha-cuca de 2×3.


https://imgur.com/T3HUeLo


Apesar de algumas peças estarem na sua configuração final, por exemplo, na configuração ordenada, o 4 vai estar acima do 7 e consequentemente essas duas peças são adjacentes.


Nós agora, podemos usar o “trenzinho” de seis posições, para trazer o 4 e o 7 para sua “posição final”, e enquanto a nós fazemos isso, as peças que ficaram estão praticamente corretas, só precisamos deslizar o 8 pra esquerda.


Agora, como essa técnica permite com que nós possam resolver qualquer racha-cuca ? Considerando a configuração do nosso racha-cuca de 3x3, nos podemos usar este “trenzinho” com 6 posições para mover as peças adjacentes 1 e 2 para que as 2 e 3 também fiquem adjacentes, exemplo:


https://imgur.com/WhPvwxF


Isso coloca o 1, 2 e 3 em quadrados adjacentes, e agora, com um “trenzinho” de 8 posições, nos podemos mover o 1, 2 e 3 para suas posições finais corretas.


Exemplo:

https://imgur.com/hhsURCH


Perceba que a posição das peças 4-8. Elas estão na configuração que nós virmos no racha-cuca de 2x3. Essa é a observação primordial. Tendo as peças 1-3 nas suas posições corretas, nós podemos resolver o resto do quebra cabeça com uma separação menor, e mais fácil do mesmo.


Note também que precisamos resolver primeiro uma linha inteira ou coluna para que o método do “trenzinho” funcione. Se nós colocarmos as peças 1 e 2 nas suas posições corretas, mas a peça 3 ainda estiver fora de lugar, não tem jeito de mexer nada na quina da direita superior sem mexer uma ou duas peças da linha de cima fora de lugar.


Essa mesma técnica sistemática, pode ser usada para resolver todos os racha-cucas, até mesmo os de 15 peças, o que faríamos é ir resolvendo pedacinho por pedacinho, começando a mover as peças de 1-4 pra suas posições corretas, deixando um grid 3×4 e depois movendo as peças da coluna esquerda deixando um grid agora de 3×3 e nesse ponto. O problema foi reduzido para um racha-cuca de 8 peças.



O que aprendemos com isso?


podemos aprender com o problema do racha-cuca que basicamente o número de movimento com as peças é grande o suficiente para que seja difícil ou quase “impossível” para gente planejar ou ter claro na nossa cabeça como resolver e deixar com a configuração certa completamente de início.


Entretendo, nossa inabilidade de planejar uma solução completa não nos impede de criar estratégias ou usar técnicas sistemas para resolver um problema.


Na hora de programar a resolução problema, a gente com toda certeza, vai se deparar com situação onde vai ser tenso criar um caminho feliz na nossa cabeça para codar essa determinada solução, porém nós nunca devemos deixar com que isso se torne uma desculpa para não planejar, criar método ou estratégia que facilite nossa abordagem ao problema.


É muito melhor desenvolver uma estrategia para atacar o problema do que simplesmente ficar na tentativa e erro. Além disso, nesse exemplo do “trenzinho” eu só consegui desenvolver uma estratégia, olhando pro quebra cabeça menor, pro racha-cuca de 3x2.


Frequentemente essa abordagem vai te ajudar muito, se você conseguir reduzir um problema grande, em vários probleminhas menores, vai ser muito mais fácil conseguir achar uma resolução.


Finalmente, outra lição que a gente pode apreender com o racha-cuca é que muitas vezes o problema pode ser divido de uma forma que não é obvia, por que, por exemplo, mexer uma peça no racha-cuca não afeta somente aquele peça mas sim, todos os movimentos que você vai fazer depois. Alguém pode pensar que resolver um quebra cabeça desses é possível resolver de uma vez só, mas não por partes, mas achar um jeito de dividir os problemas geralmente é um tempo bem gasto, mesmo se você não achar de primeira um jeito bom de dividir o mesmo, você vai provavelmente aprender algo que pode te ajudar a resolver ele.


Mais importante: resolver problemas com um objetivo, método ou estratégia é SEMPRE melhor do que ficar na tentativa e erro, mesmo quando você consegue atingir o seu objetivo dessa forma.


Muito obrigado se você conseguiu ler até aqui, comenta ai embaixo se você conhece esse tipo de quebra cabeça por um nome diferente, e alías, se alguém souber como posso inserir as imagens no meio do texto da um help ai! Abraços!


Fonte: THINK LIKE A PROGRAMMER AN INTRODUCTION TO CREATIVE PROBLEM SOLVING by

V. ANTON SPRAUL

0
18

Comentários (0)

None

Brasil