Na semana passada falei sobre os algoritmos de ordenação de dados. Hoje vou falar sobre os principais algoritmos para aplicações sobre alguns algoritmos da teoria dos números.
Teoria dos números é um assunto bem amplo e estudado em diversos cursos de nível superior, como engenharia de produção, civil, da computação, sistemas de informação e ciências da computação, além, claro, dos cursos de matemática. Muitas vezes é estudado apenas em sua teoria, o que dificulta o seu aprendizado, pois essa área é amplamente utilizada na matemática aplicada e, hoje em dia, com o desenvolvimento da tecnologia (inclusive nano), essa base matemática é muito mais prática do que teórica.
Diversas coisas na informática só são possíveis graças a diversos algoritmos (a idéia de algoritmos já vem da matemática) da teoria dos números, tais como compactação e descompactação de arquivos, fazer cálculos com quantidades enormes de dígitos, criptografar dados, cálculos em redes etc.
Um dos algoritmos não triviais mais antigos existentes é o algoritmo de Euclides, para testar primalidade de um determinado valor de entrada.
Testar se um valor é ou não primo, como vários outros algoritmos da teoria dos números pode não parecer tão prático, mas é graças aos números primos que temos criptografia de dados, o que possibilitou trafegar dados com segurança pela Internet, e os famosos comércios eletrônicos. Algumas vezes precisamos realizar operações com números gigantes, números que não temos nem nomes ainda para eles, por exemplo com mil dígitos. Dependendo da operação, ela pode ser resolvida sem a operação em si, mas simulada com apenas uma porção dos dígitos, às vezes com algumas operações repetidas ou uma fórmula. O matemático chinês Sun-Tsu iniciou uma série de propostas chamadas de teorema chinês do resto. Depois foi provado por Euler. Esse teorema é uma boa base para isso, pois ele permite que se ache uma forma melhor de se trabalhar com o modulo de determinado valor, mantendo a proporção do resultado.
Outros casos de uso prático da teoria dos números é a de intersecção de segmentos, ou seja, saber quais e em que pontos determinadas retas se encontram.
E uma mais interessante e derivada dessa seria a famosa “envoltória convexa” que é se temos diversos pontos e desejamos criar uma área que pegue todos eles. Para ficar mais claro, pense em um pedaço de madeira com diversos pregos em pontos diversos, depois coloque apenas elástico em volta de todos os pregos, essa é a envoltória convexa. Isso possibilita diversas aplicações, tais como aplicações de engenharia e arquitetura, onde podemos minimizar o custo de obras de pontes e ruas, etc.
Outra aplicação interessante para a computação vinda da teoria dos números é creditada a Diofanto, e mais aprofundada por Pierre de Fermat. São as equações diofantinas, que são soluções para problemas do tipo em que podem se encaixar em modelos matemáticos específicos para uma solução ótima, por exemplo se estamos fazendo duas tarefas ao mesmo tempo e cada uma delas tem tempo diferente, qual o tempo mínimo para as duas terminarem juntas, fazendo as melhores combinações de tarefas.
Essas e diversas outras coisas são bem interessantes para se estudar na área de informática, pois desenvolvimento de software não é apenas conhecer determinada linguagem de programação e padrões de projeto. Quem não gosta de matemática e trabalha com desenvolvimento de software tende a desenvolver de maneira menos eficiente e mais repetitiva, e às vezes não consegue resolver determinados problemas mais específicos e complexos.