Teoria de la complejidad computacional.pdf

4

Click here to load reader

Transcript of Teoria de la complejidad computacional.pdf

Page 1: Teoria de la complejidad computacional.pdf

102

TEORÍA DE LA COMPLEJIDAD COMPUTACIONAL Y TEORÍA DE LA COMPUTABLIDAD

FISI-UNMSM

TEORÍA DE LA COMPLEJIDAD COMPUTACIONAL Y TEORÍA DELA COMPUTABILIDAD

Augusto Cortéz*

* Docente de la Facultad de Ingeniería de Sistemas e Informática, Universidad Nacional Mayor de San Marcos, Lima-Perú.E-mail: [email protected]

RESUMEN

La ciencia de la computación es un cuerpo sistematizado del conocimiento concerniente al cálculo, que sesostiene en dos áreas fundamentales: La Teoría de la Computabilidad, basada en las ideas y los modelosfundamentales subyacentes al cálculo, y las técnicas de la ingeniería para el diseño de algoritmos. Este artículoestá pensando en la importancia del primer aspecto. La Teoría de la Complejidad computacional estudia losrecursos requeridos para resolver un problema como son el tiempo y el espacio; por su parte la teoría de lacomputabilidad se interesa en expresar los problemas como algoritmos sin tener en cuenta la información sobrelos recursos necesarios para ello.

Para abstraer las variaciones entre los diferentes sistemas computacionales se utiliza una máquina deTuring como un referente fijo, considerado como un modelo de máquina isofórmica a cualquier otro sistemainformático.

La Tesis de Church-Turing nos dice que si la máquina de Turing no puede resolver un problema, ninguna otracomputadora podrá hacerlo, puesto que no existe algoritmo para resolver el problema. Por esa razón, laslimitaciones corresponderían a los procesos computacionales y no a la tecnología.

Palabras clave: Complejidad computacional, computabilidad, eficiencia de algoritmos.

THEORY OF THE COMPLEXITY CALCULUS THEORY OF THE CALCULABLE

ABSTRACT

The computation’s science is a systematized body of the knowledge concerning to the calculus, which issupported in two fundamentals areas: The theory of the calculable supported in the ideas and fundamentalsmodels underlying to the calculus, and the engineering’s technical for the algorithm’s sketch.

This article is thinking in the importance of the first aspect. The complexity’s theory calculable study theresource required during the calculus to resolve a problem as the time and the space; for its part the theory ofthe calculable employs of the feasible to express problems as effective algorithms besides to take underadvisement the necessaries resources for them.

To do the variations between different of the computers systems, is necessary to use Turing machine aspermanent referring, considerate as a isomorphic machine’s model to any other computers system.

The Church-Turing’s thesis said that if a Turing’s machine can’t resolve a problem, any computer would do,because there isn’t algorithm to resolve a solution. For that reason the limitations corresponds to process ofcomputers and not to the technology.

Key word: Computacional complexity, computabilidad, efficiency of algorithms

RISI 1(1), 102-105 (2004)Rev. investig. sist. inform.Facultad de Ingeniería de Sistemas e InformáticaUniversidad Nacional Mayor de San MarcosISSN: 1815-0268 (impreso)

E N S A Y O S

Page 2: Teoria de la complejidad computacional.pdf

AUGUSTO CORTEZ

103

REV. INFOSYS 1(1), 9-18 (2004)

FISI-UNMSM

INTRODUCCIÓN

La ciencia de la Computación es el cuerposistematizado del conocimiento concerniente alcálculo. Sus principios se remontan al diseño dealgoritmos por parte de Euclides , al uso de la com-plejidad asintótica y la reducibilidad por parte delos babilónicos. La ciencia de la Computación sesustenta en dos áreas básicas: los conceptos fun-damentales subyacentes al cálculo que trajo comoconsecuencia la existencia de funciones probable-mente no calculables o computables, y por otraparte, las técnicas de ingeniería para el diseño desistemas de computación basadas en técnicas dediseño de algoritmos: algoritmos voraces (divide yvencerás), algoritmos aleatorizados, algoritmos conretroceso, etc. Este artículo está pensado en su-brayar la importancia de la primera área, al rela-cionar los aspectos teóricos que se presentan enel estudio de la ciencia de la Computación y losaspectos prácticos con los que los estudiantes es-tán familiarizados. Los estudiantes con conocimien-tos en programación, estructura de datos e inge-niería de software presentan problemas para es-tablecer una relación con otros temas como: teo-ría de autómatas, lenguajes formales y funcionesrecursivas. Se tiene como objetivo resaltar la ne-cesidad de enseñar a los alumnos habilidades parauna buena programación y simultáneamente ca-pacidad de análisis de algoritmos, con la finali-dad de dotarlos de una infraestructura lógico ma-temática, sobre la cual fundamentar los conceptose ideas de complejidad y que ésta se relacione y/ovincule estrechamente a los temas prácticos. Nodebe sorprendernos el hecho de que las ideas bá-sicas de la teoría de autómatas se desarrollaronpara resolver cuestiones teóricas de los fundamen-tos de las matemáticas, como lo estableció el ma-temático alemán David Hilbert (1862-1943).

Un proceso computacional, también llamadoproceso algorítmico o algoritmo, es fundamentalpara la ciencia de la Computación, puesto que uncomputador no puede ejecutar un problema queno tenga una solución algorítmica. Así, cualquierlimitación de las capacidades de los procesoscomputacionales constituye también una limitaciónde las capacidades de la computadora [1]. Evaluarla eficiencia de los algoritmos tiene mucho que vercon evaluar la complejidad de los mismos. Aunqueesta labor pueda resultar ardua, compensa el he-cho de obtener programas con alta garantía decorrección y la satisfacción intelectual de haberlosconstruido bien desde el principio, sin esperar elveredicto del sistema computacional. Sin embar-go, el tema que nos aborda es establecer si una

función es calculable o computable, soslayando lasespecificaciones de un sistema computacional es-pecifico. En 1935, el matemático y lógico inglésAlan Mathison Turing (1912-1954) se intereso enel problema de decisión de Hilbert, que pregunta-ba si podría existir un método general aplicable acualquier enunciado, para determinar si éste eraverdadero. El enfoque de Turing lo llevó a pensarlo que ahora se conoce como la máquina deTuringn [2]. El tema de la computabilidad tiene mu-cho que ver con la búsqueda de las estructurasque se requieren en un lenguaje de programación,de tal forma que se asegure que un programa ex-presado en dicho lenguaje pueda resolver cual-quier problema que tenga una solución algorítmica[4].

ANÁLISIS DE ALGORITMOS

La Teoría de la Complejidad Computacionales la parte de la teoría de la computación que es-tudia los recursos requeridos durante el cálculo pararesolver un problema. Un cálculo resulta complejosi es difícil de realizar. En este contexto podemosdefinir la complejidad de cálculo como la cantidadde recursos necesarios para efectuar un cálculo.Así, un cálculo difícil requerirá más recursos queuno de menor dificultad. Los recursos comúnmen-te estudiados son el tiempo (número de pasos deejecución de un algoritmo para resolver un pro-blema) y el espacio (cantidad de memoria utiliza-da para resolver un problema). Un algoritmo queresuelve un problema pero que tarda mucho enhacerlo, difícilmente será de utilidad. Igualmenteun algoritmo que necesite un gigabyte de memo-ria no será probablemente utilizado. A estos re-cursos se les puede añadir otros, tales como elnúmero de procesadores necesarios para resolverel problema en paralelo. Si un cálculo requiere mástiempo que otro decimos que es más complejo y lollamamos complejidad temporal. Por otro lado, siun cálculo requiere más espacio de almacenamien-to que otro decimos que es más complejo, en estecaso hablamos de una complejidad espacial. Esclaro que el tiempo que se requiere para efectuarun cálculo en un computador moderno es menorque el requerido para hacer el mismo cálculo conlas máquinas de las década pasadas, y segura-mente que el tiempo en una máquina de la próxi-ma generación será mucho menor [1].

El estudio de los procesos computacionales,conduce a una clasificación de los problemas endos grandes clases: los problemas con solución ylos problemas sin solución. Los problemas

Page 3: Teoria de la complejidad computacional.pdf

104

TEORÍA DE LA COMPLEJIDAD COMPUTACIONAL Y TEORÍA DE LA COMPUTABLIDAD

FISI-UNMSM

solucionables, requieren gran cantidad de recur-sos como tiempo y espacio de almacenamiento. Elanálisis requerido para estimar el uso de recursosde un algoritmo es una cuestión teórica, y portanto necesita un marco formal[5]. El formalismoy abstracción constituye un método necesario parala programación, considerada como disciplina cien-tífica en la que se prioriza la actividad de diseño yrazonamiento, sobre la de depuración medianteprueba y error en un contexto artesanal.

Los problemas que tienen una solución conorden de complejidad lineal son los problemas quese resuelven en un tiempo que se relacionalinealmente con su tamaño. Aunque actualmentela mayoría de los algoritmos resueltos por lasmáquinas tienen como máximo una complejidad ocosto computacional polinómico, es decir, la rela-ción entre el tamaño del problema y su tiempo deejecución es polinómica. Éstos son problemasagrupados en la clase P. Los problemas con costono polinomial están agrupados en la clase NP. Es-tos problemas no tienen una solución algorítmica,es decir, una máquina no puede resolverlos en untiempo razonable.

Existe una escala para medir la complejidad,la que incluye, entre otros: P, Resoluble en tiempopolinómico; P-completo, los problemas más difíci-les en P. NP problemas con respuestas positivasverificables en tiempo polinómico y NP-completo,los más difíciles problemas de NP. Muchas de es-tas clases tienen una co-clase que contiene losproblemas complementarios a los de la clase ori-ginal. Por ejemplo, si X está en NP, el complemen-to de X está en co-NP. Sin embargo, no debe en-tenderse que NP y co-NP sean complementarios;hay problemas que pertenecen a ambas clases, yotros que no están en ninguna de los dos.

Cada cierto tiempo se duplica el número deinstrucciones por segundo que los computadorespueden ejecutar. Los profanos y no tan profanospiensan que esto puede inducir a muchos progra-madores a pensar que basta esperar algunos añospara que problemas que hoy necesitan muchashoras de cálculo puedan resolverse en pocos se-gundos, soslayando la necesidad de evaluar y ob-tener algoritmos eficientes. Este artículo pretendedeshacer tal suposición, mostrando que el factorpredominante que delimita lo que es soluble en untiempo razonable de lo que no lo es, es precisa-mente el algoritmo elegido para resolver el pro-blema. El hombre es creativo por naturaleza, latecnología le ofrece un mundo de posibilidades deexploración, por tanto, no debe sustraerse de los

beneficios que ésta le provee. Particularmente, eladvenimiento de nueva tecnología debe tomarsecomo un estímulo para buscar algoritmos más efi-cientes.

COMPUTABILIDAD

Es conveniente suponer que un sistemacomputacional es fijo (abstracto), con la finalidadde eliminar las variaciones de un sistema a otro.Brookshear elimina estas variaciones de análisis ensistemas diferentes y evalúa la complejidad de cál-culo suponiendo un sistema fijo basado en unamáquina de Turing, ya que supone que a partir deella puede trasladar sus resultados a otros siste-mas y mantener la complejidad.

Un lenguaje de programación (el preferido porusted) tiene un poder expresivo ya que permiteescribir cualquier algoritmo (una idea) en ese len-guaje. Sin embargo, suponemos que existen algu-nos algoritmos que no pueden representarse ha-ciendo uso de ese lenguaje. Surge la interrogantede si esto se debe a una limitación del lenguaje oes una limitación de los procesos algorítmicos engeneral (no existe algoritmo). Nos preguntamos, siel lenguaje no permite escribir un algoritmo o esque no existe un algoritmo que pudiera calculardicha función. Consideremos una clase que contie-ne todas las funciones computables. Una funciónes computable si existe un algoritmo para ella, sinimportar como pueda implantarse o expresarse esealgoritmo. Puede construirse un conjunto que con-tenga todas las funciones computables, para ellose utiliza un método muy usado por los matemáti-cos, el método recursivo generacional. Este méto-do permite que a partir de un conjunto básico defunciones computables, consideradas como funcio-nes iniciales, puedan construirse las demás combi-nándolas en forma recursiva y así obtener el con-junto mayor de todas las funciones computables.Puede demostrarse, aunque no es el objetivo deeste artículo, que una función de esta clase puedecalcularse por medio de una máquina de Turing.

La Teoría de la Complejidad Computacionalse basa en un enfoque no funcional, en donde inte-resa como se lleva el cálculo y su complejidad enfunción de los recursos que utiliza. La Teoría de laComputabilidad se interesa en hallar una solucióna un problema, mas no se interesa por los méto-dos específicos de expresar una solución algorítmicaen un sistema computacional; es decir, no interesacómo se pueda implantar.

Page 4: Teoria de la complejidad computacional.pdf

AUGUSTO CORTEZ

105

REV. INFOSYS 1(1), 9-18 (2004)

FISI-UNMSM

HIPÓTESIS DE CHURH

La hipótesis de Churh nos dice que una fun-ción computable puede identificarse con la clasede las funciones parcialmente recursivas. Una fun-ción parcialmente recursiva F: X è X es aquellacuyo dominio constituye un subconjunto de X, porejemplo en la función div: Zx Z è Z, el par (x, 0)no está en el dominio de F, puesto que no se pue-de dividir entre cero. La base de la jerarquía deestas funciones computables consiste en un con-junto de funciones iniciales, a partir de las cualesse construyen las funciones recursivas primitivasmediante composición de funciones. Todas estasfunciones son computables, sin embargo, existenfunciones que no son primitivas pero son compu-tables, de estas funciones se dice que no son tota-les sino parcialmente recursivas. Inicialmente sepensó que todas las funciones recursivas primiti-vas eran computables, pero Ackerman propuso laconocida función que lleva su nombre A(0,y)=y+1,A(x+1,0)=A(x,1) y A(x+1,y+1)=A(x, A(x+1,y)), lacual es computable pero no es recursiva primitiva.Como esta hipótesis no pone límites al número depasos o cantidad de almacenamiento necesariopara la función, supone que las funciones parcial-mente recursivas son computables. Una función noes computable a menos que pueda limitarse elcálculo por adelantado o determinar que el cálculoterminará o no en algún momento [3]. Las máqui-nas de Turing constituyen una herramienta de ve-rificación, pues además de servir como aceptadoresde lenguajes formales, pueden considerarse comouna calculadora de funciones de los enteros a losenteros. Las funciones calculadas por una máqui-na de Turing se conocen como funciones parcial-mente recursivas, y éstas incluyen a las funcionescomputables.

CONCLUSIÓN

Los procesos computacionales están limita-dos por el lenguaje en el cual puedan expresarse.

Funcióncomputable

Funciónrecursivaprimitiva

Funcióninicial

La Teoría de la Complejidad estudia la eficienciade los algoritmos en función de los recursos queutiliza en un sistema computacional (usualmenteespacio y tiempo). La Teoría de la Computabilidadpretende abstraer los detalles de los sistemascomputacionales y busca un algoritmo para efec-tuar un cálculo sin preocuparse por los detalles deimplantación; en este caso se dice que la funciónes computable o calculable. Puede verificarse siuna función es computable utilizando una máquinade Turing como un modelo de máquina isomorfa acualquier otro sistema computacional. El interésde Turing acerca de la capacidad de las máquinaspara pensar lo llevó a desempeñar un papel im-portante en el desarrollo de las computadoras, nosolo teóricas sino reales. Así, se refuerza la tesisde Church-Turing que dice que si una máquina deTuring no puede resolver un problema, entoncesningún computador puede hacerlo, ya que no exis-te algoritmo para obtener una solución. Por tanto,las l imitaciones corresponden a procesoscomputacionales y no a la tecnología.

REFERENCIAS BIBLIOGRÁFICAS

1. [BROOKSHEAR] BROOKSHEAR J. Glean. Teoríade la computación. Addisson Wesley iberoame-ricana Wilmington Delaware 1993.

2. [GRIMALDI] GRIMALDI, Ralph. Matemática dis-creta y combinatoria. Addisson Wesley ibero-americana Wilmington Delaware 1997

3. [HOPCROFT 1993] Hopcroft Jhon, UllmanJeffrey. Introducción a la teoría de autómatas.Edit. CECSA 1993.

4. [PEÑA] PEñA MARI, Ricardo. Diseño de progra-mas. Formalismo y abstraccion. Prentice HallMadrid 1998.

5. [WEISS] WEISS Mark Allen. Estructura de da-tos y algoritmos. Addisson Wesley iberoameri-cana Wilmington Delaware 1995.

Figura N.º 1. Jerarquía de funciones computables.