Teoria do AutomatAlader
Esta teoria fornece modelos matemáticos que formalizam o conceito de computador ou algoritmo em um suficientemente maneira simplificada e geral para que suas capacidades e limitações possam ser analisadas. Alguns desses modelos desempenham um papel central em várias aplicações de ciência da computação, incluindo processamento de texto, compiladores, design de hardware e inteligência artificial.
Existem muitos outros tipos de autômatos como máquinas de acesso aleatórias, Abacus máquinas e máquinas de estado abstratas; No entanto, em todos os casos, tem sido demonstrado que esses modelos não são mais gerais que a máquina de Turing, como a máquina de Turing tem a capacidade de simular cada um desses autômatos. Isso resulta na máquina de Turing como o modelo de computador universal.
Teorydit
Esta teoria explora os limites da possibilidade de resolver problemas através de algoritmos. Grande parte das ciências computacionais são dedicadas a resolver problemas algorítmicos, de modo que a descoberta de problemas impossíveis é uma grande surpresa. A teoria da computabilidade é útil para não tentar algoritmicamente esses problemas, economizando tempo e esforço.
Os problemas são classificados nesta teoria de acordo com seu grau de impossibilidade:
- computadores são aqueles para os quais há um algoritmo que sempre resolve quando há uma solução e também é capaz de distinguir casos que não o tê. Eles também são conhecidos como decisivos, resolúveis ou recursivos.
- Os semicomutáveis são aqueles para os quais há um algoritmo que é capaz de encontrar uma solução se ele existir, mas nenhum algoritmo que determina quando a solução não existe (Nesse caso, o algoritmo para encontrar a solução entraria em um loop infinito). O exemplo clássico por excelência é o problema da parada. Esses problemas também são conhecidos como listagem, recursivamente enumeráveis ou reconhecíveis, porque se todos os casos possíveis do problema forem listados, é possível reconhecer aqueles que têm solução.
- Os incomputáveis são aqueles para os quais existe Nenhum algoritmo que possa resolvê-los, não importa o que eles têm ou nenhuma solução. O exemplo clássico por excelência é o problema do envolvimento lógico, que é determinar quando uma proposta lógica é um teorema; Para este problema, não há algoritmo que em todos os casos possa distinguir se uma proposição ou negação é um teorema.
Há uma versão mais geral dessa classificação, onde problemas incomputáveis são subdividados problemas mais difíceis do que outros. A ferramenta principal para atingir essas classificações é o conceito de redução: um problema A {\ displaystyle A}
é reduzido ao problema B {\ Displaystyl b}
Se sob a suposição de que é conhecido resolver o problema b {\ displaysty b}
É possível resolver o problema para {\ displaystyle a}
; Isso é denotado por um ≤ t b {\ displaystyle a \ leq t} b
e informalmente significa que o problema um {\ displaystyle a }
não é mais difícil de resolver do que o problema b {\ displaystyle b}
. Por exemplo, sob a suposição de que uma pessoa sabe como adicionar, é muito fácil ensiná-lo a multiplicar fazendo somas repetidas, para que a multiplicação seja reduzida a adicionar.
Teoria da Complexidade ComputacionalDAVERR
Mesmo quando um problema é computável, pode não é possível resolvê-lo na prática se muita memória ou tempo de execução for necessário. A teoria da complexidade computacional estuda as necessidades de memória, tempo e outros recursos computacionais para resolver problemas; Desta forma, é possível explicar por que alguns problemas são mais difíceis de resolver do que outros. Uma das maiores conquistas desse ramo é a classificação de problemas, semelhantes à tabela periódica, de acordo com sua dificuldade. Nesta classificação, os problemas são separados por classes complexas.
Esta teoria tem aplicação em quase todas as áreas do conhecimento onde você deseja resolver um problema computacionalmente, porque os pesquisadores não só querem usar um método para resolver um problema, mas usar o mais rápido. A teoria da complexidade computacional também tem aplicações em áreas como criptografia, onde é esperado que descriptografe um código secreto é um problema muito difícil, a menos que a senha esteja disponível, caso em que o problema se torna fácil.