La teoria de la computació és una ciència, en particular una branca de la matemàtica i de la computació que tracta de quins problemes es poden resoldre en un model de càlcul, mitjançant un algorisme, de quina manera es poden resoldre de manera eficient o en quin grau (per exemple, les solucions aproximades enfront de les precises). Dit d'una altra manera, dés la branca que estudia problemes de decidibilitat.[1] El camp es divideix en tres grans branques: teoria dels autòmats i llenguatges formals, teoria de la computabilitat i teoria de la complexitat computacional, que es relacionen amb la pregunta: "Quines són les capacitats i limitacions fonamentals dels ordinadors?".[2]
Per tal de dur a terme un estudi rigorós de la computació, els informàtics treballen amb una abstracció matemàtica dels ordinadors anomenada model de computació. Hi ha diversos models en ús, però el més freqüentment examinat és la màquina de Turing.[3] perquè és senzilla de formular, es pot analitzar i utilitzar per demostrar resultats i perquè representa el que molts consideren el model de càlcul "raonable" més potent possible.[4] Podria semblar que la capacitat de memòria potencialment infinita és un atribut irrealitzable, però qualsevol problema resolt per una màquina de Turing sempre requerirà només una quantitat finita de memòria.[5]
La teoria de la computació comença pròpiament a principis del segle xx, poc abans que les computadores electròniques fossin inventades. En aquesta època diversos matemàtics es preguntaven si existia un mètode universal per resoldre tots els problemes matemàtics. Per a això havien de desenvolupar la noció precisa de mètode per resoldre problemes, és a dir, la definició formal d'algorisme.
Des d'èpoques antigues, els còmputs han existit i s'han efectuat de manera mental o assistida per rudiments com comptes, llapis i paper, o taules. Els antecedents de la computació mecànica, poden traçar fins a èpoques antigues, amb el desenvolupament d'artefactes per assistir el procés dels càlculs matemàtics mentals, per exemple el àbac, el regle de càlcul o el quipu. Encara que potser és més propícia com a exemple precursor, la cèlebre calculadora grega d'Anticitera, utilitzada segons els experts per assistir en càlculs astronòmics, i considerada per molts com la primera ordinador.[6] Un altre exemple precursor són les màquines sumador de Blaise Pascal. Aparells que demostren una notable perícia dels seus creadors en el coneixement sobre la forma d'elaborar els càlculs desitjats, al grau de poder representar en la forma de mecanismes més o menys elaborats.
Alguns d'aquests models formals van ser proposats per precursors com Alonzo Church (càlcul lambda), Kurt Gödel (funcions recursives) i Alan Turing (màquina de Turing).[7] Aquests models són equivalents en el sentit que poden simular els mateixos algorismes, encara que ho facin de maneres diferents. Entre els models de còmput més recents hi ha els llenguatges de programació, que també han resultat ser equivalents als models anteriors, això és una forta evidència de la conjectura de Church-Turing, que tot algorisme hagut i per haver es pot simular en una màquina de Turing, o equivalent, usant funcions recursives. El 2007 Nachum Dershowitz i Yuri Gurevich van publicar una demostració d'aquesta conjectura basant-se en certa axiomatització d'algorismes.[8]
Un dels primers resultats d'aquesta teoria va ser l'existència de problemes impossibles de resoldre algorítmicament, i el problema de la parada el més famós d'ells. Per a aquests problemes no existeix ni existirà cap algorisme que els pugui resoldre, no important la quantitat de temps o memòria es disposi en un ordinador. Així mateix, amb l'arribada de les computadores modernes es va constatar que alguns problemes resolubles en teoria eren impossibles en la pràctica, ja que aquestes solucions necessitaven quantitats irrealistes de temps o memòria per poder-se trobar.
En teoria de la computació, un model de càlcul és un model que descriu com es calcula una sortida d'una funció matemàtica donant una entrada. Un model descriu com s'organitzen les unitats de càlculs, memòries i comunicacions.[9] La complexitat computacional d'un algorisme es pot mesurar donat un model de càlcul. L'ús d'un model permet estudiar el rendiment d'algoritmes independentment de les variacions específiques per a implementacions particulars i tecnologia específica.
El programari ha utilitzant massivament el model de computació per algorismes, però en els darrers anys, l'aprenentatge automàtic i el model de xarxa neuronal artificial han assolit notorietat i èxit, i computació quàntica comença a mostrar avanços significatius,[10] i es desenvolupa la computació basada en ADN.[11]
La teoria de la computació té diverses branques pròpies, entre elles:
Aquesta teoria proveeix models matemàtics que formalitzen el concepte d'ordinador o algorisme de manera prou simplificada i general perquè es puguin analitzar les seves capacitats i limitacions.[12] Alguns d'aquests models tenen un paper central en diverses aplicacions de les ciències de la computació, incloent processament de text, compilador és, disseny de maquinari i intel·ligència artificial.
Els tres principals models són els autòmats finits, autòmats amb pila i màquines de Turing, cadascun amb les seves variants deterministes i no deterministes. Els autòmats finits són bons models d'ordinadors que tenen una quantitat limitada de memòria, els autòmats amb pila modelen els que tenen gran quantitat de memòria però que només poden manipular a manera d'pila (l'última dada emmagatzemat és el següent llegit), i les màquines de Turing modelen les computadores que tenen una gran quantitat de memòria emmagatzemada en una cinta. Aquests autòmats estan estretament relacionats amb la teoria de llenguatges formals, cada autòmat és equivalent a una gramàtica formal, el que permet reinterpretar la jerarquia de Chomsky en termes d'autòmats.
Existeixen molts altres tipus d'autòmats com les màquines d'accés aleatori, autòmats cel·lulars, àbacs i les màquines d'estat abstracte, però en tots els casos s'ha mostrat que aquests models no són més generals que la màquina de Turing, ja que la màquina de Turing té la capacitat de simular cada un d'aquests autòmats. Això dona lloc a que es pensi en la màquina de Turing com el model universal d'ordinador.
Gramàtica | Idiomes | Autòmat | Regles de producció (restriccions) |
---|---|---|---|
Tipus-0 | Enumerable recursivament | Màquina de Turing | (sense restriccions) |
Tipus-1 | Sensible al context | Màquina de Turing no determinista delimitada linealment | |
Tipus-2 | Sense context | Autòmat pushdown no determinista | |
Tipus-3 | Regular | Autòmat d'estat finit | </br> i </br> |
La teoria del llenguatge és una branca de les matemàtiques que s'encarrega de descriure les llengües com un conjunt d'operacions sobre un alfabet. Està molt lligat a la teoria dels autòmats, ja que els autòmats s'utilitzen per generar i reconèixer llenguatges formals. Hi ha diverses classes de llenguatges formals, cadascuna permet una especificació de llenguatge més complexa que l'anterior, és a dir jerarquia de Chomsky,[13] i cadascuna corresponent a una classe d'autòmats que la reconeix. Com que els autòmats s'utilitzen com a models de càlcul, els llenguatges formals són el mode d'especificació preferit per a qualsevol problema que s'hagi de calcular.
Aquesta teoria explora els límits de la possibilitat de solucionar problemes mitjançant algorismes. Gran part de les ciències computacionals estan dedicades a resoldre problemes de forma algorítmica, de manera que el descobriment de problemes impossibles és una gran sorpresa. La teoria de la computabilitat és útil per no tractar de resoldre algorítmicament aquests problemes, estalviant així temps i esforç.
Els problemes es classifiquen en aquesta teoria d'acord al seu grau d'impossibilitat :
Hi ha una versió més general d'aquesta classificació, on els problemes incomputabilitat se subdivideixen al seu torn en problemes més difícils que altres. L'eina principal per aconseguir aquestes classificacions és el concepte de reducibilitat : Un problema es redueix al problema si sota la suposició que se sap resoldre el problema és possible resoldre el problema , això es denota per , i informalment vol dir que el problema no és més difícil de resoldre que el problema . Per exemple, sota la suposició que una persona sap sumar, és molt fàcil ensenyar a multiplicar fent sumes repetides, de manera de multiplicar es redueix a sumar.
Tot i que un problema sigui computable, potser no sigui possible resoldre en la pràctica si es requereix molta memòria o temps d'execució. La teoria de la complexitat computacional estudia les necessitats de memòria, temps i altres recursos computacionals per resoldre problemes, d'aquesta manera és possible explicar perquè uns problemes són més difícils de resoldre que altres. Un dels majors èxits d'aquesta branca és un la classificació de problemes, anàleg a la taula periòdica, d'acord amb la seva dificultat, en aquesta classificació els problemes se separen per classes de complexitat.
Aquesta teoria té aplicació en gairebé totes les àrees de coneixement on es vulgui resoldre un problema computacionalment, perquè els investigadors no només volen utilitzar un mètode per resoldre un problema, sinó utilitzar el més ràpid. La teoria de la complexitat computacional també té aplicacions en àrees com la criptografia, on s'espera que desxifrar un codi secret sigui un problema molt difícil a menys que es tingui la contrasenya, en aquest cas el problema es torna fàcil.