Há uma ideia matemática básica por trás de alguns códigos de deteção e correção de erros — mecanismos que permitem, por exemplo, que um CD riscado funcione, que códigos QR possam ser lidos mesmo com defeito e que as imagens que recebemos de naves espaciais cheguem à Terra direitinhas.
Errar é humano, culpar os outros é estratégico.
Noutro dia estava num restaurante e queria pedir uma sobremesa, um docinho para acompanhar o café, sendo que a ementa podia ser consultada através de um código QR.
O problema é que quando peguei no telemóvel para ler o código QR, sem querer entornei a chávena de café e estraguei um dos cantos do código. Aquilo ficou sem se perceber.
Pensei que fosse um sinal de Deus para que eu controlasse os níveis de glicose no sangue, mas, por incrível que pareça, o telemóvel conseguiu ler na mesma aquele código QR e consegui aceder à carta de sobremesas.
Intrigada com este acontecimento, mal cheguei a casa, imprimi vários códigos QR e experimentei neles várias formas de tortura: amarrotei um até ficar mais enrugado do que um idoso de 95 anos, mutilei um dos cantos sem dó nem piedade, cheguei até a infetar um código QR com varíola dos macacos.
E não é que, para meu espanto, sempre que apontei o telemóvel para aqueles códigos QR todos destruídos, ele conseguiu lê-los na mesma? Direitinho, sem problema!
Esta robustez dos códigos QR só é possível devido a certos mecanismos de deteção e correção de erros, que nos permitem detetar se ocorreu algum erro na representação ou transmissão de uma mensagem e, em caso afirmativo, corrigi-lo, de forma a recuperarmos a mensagem original no seu estado imaculado.
Vamos ver um exemplo muito simples.
Imaginem que queremos enviar a mensagem a um amigo, através de uma espécie de um código QR, em que cada letra tem de estar associada a um código binário, ou seja, a uma sequência de zeros e uns. Neste caso, optamos por representar cada letra por uma sequência de 5 zeros e uns, ou seja, por um código binário com 5 bits.
Vamos então supor que queremos representar a mensagem “JUIZO” através de quadrículas pretas e brancas, porque temos um fetiche por códigos QR, ou assim. Transformamos cada zero numa quadrícula branca e cada um numa quadrícula preta.
Mas e se cair um bocado de ketchup numa das quadrículas? Ou o quadrado do canto ficar danificado? Como é que o nosso amigo há de saber se a quadrícula estragada era preta ou branca?
Para sermos capazes de detetar e corrigir um eventual erro que aconteça na transmissão da mensagem, vamos acrescentar uma coluna à direita e uma linha em baixo. Depois, contamos quantas quadrículas pretas surgem em cada linha e registamos esse número à frente da linha.
A seguir, fazemos o mesmo no caso das colunas, ou seja, por baixo de cada coluna, registamos quantas quadrículas pretas surgem nessa coluna. Nesta última quadrícula do canto inferior direito, registamos a quantidade total de quadrículas pretas que surgem na nossa imagem.
Finalmente, vamos colorir cada quadrícula com um número par a branco e cada quadrícula com um número ímpar a preto. Esta sim, meus caros, esta sim é a imagem que nós vamos passar ao nosso amigo.
Reparem que, após este processo, todas as linhas têm um número par de quadrículas pretas e, da mesma forma, todas as colunas têm um número par de quadrados pretos. É garantido!
Agora imaginem que, por algum motivo, a mensagem é transmitida com um erro. Por exemplo, imaginem que uma quadrícula, em vez de ir branca, vai preta. Como é que o nosso amigo conseguiria detetar que ocorreu um erro e como é que o conseguia corrigir?
É fácil! Reparem que, na linha e na coluna em que ocorreu o erro, nós passamos a ter um número ímpar de quadrículas pretas. Todas as outras possuem, na mesma, um número par de quadrículas pretas. Elas não foram afetadas. Só a quadrícula errada é que fica mesmo com um número ímpar, quer na linha, quer na coluna.
Logo, o erro tem de ter ocorrido neste sítio e, para o corrigir, basta pintar a quadrícula da cor oposta. Se estava preta, vamos pô-la branca.
Resumindo, partimos de uma mensagem num quadriculado e acrescentamos quadrículas pretas e brancas de forma a garantir que cada linha e cada coluna ficam com um número par de quadrículas pretas.
Se ocorrer algum erro numa das quadrículas, então a linha e a coluna em que ela está vão ficar com um número ímpar de quadrículas pretas. E isso permite-nos detetar onde ocorreu o erro. Para o corrigir, basta então pintar a quadrícula da cor oposta.
Desafio-vos então a encontrarem o erro na imagem abaixo e a decifrarem a mensagem original. Deixem a vossa resposta nos comentários.
É verdade que esta técnica é bastante rudimentar e só nos permite detetar e corrigir até um erro. Se ocorrerem dois ou três, estamos feitos ao bife.
Mas a ideia de acrescentar informação extra a uma mensagem para sermos capazes de lidar com erros que tenham acontecido é uma ideia muito poderosa e popular.
Um código QR, por exemplo tem várias zonas que são destinadas a isto mesmo. São zonas que não contribuem propriamente para representar a mensagem a transmitir, mas sim para nos ajudar a corrigir erros que possam ter acontecido.
É por isso que o nosso telemóvel consegue decifrar corretamente as mensagens contidas em códigos QR, mesmo que eles tenham sido mutilados ou estejam infetados com varíola dos macacos.
Sem a matemática, um CD arriscado jamais funcionaria. Erros cometidos a digitar um código de barras passariam despercebidos. E imagens de planetas transmitidas por naves espaciais chegariam à Terra todas corrompidas.
Errar é humano. Corrigir erros utilizando a matemática é estratégico.
- Como corrigir erros (com um truque matemático) - 20 Março, 2025
- Por que razão escolhemos sempre a fila mais lenta? - 4 Janeiro, 2025
- Cinco grandes desastres que foram causados por erros matemáticos - 2 Dezembro, 2024