Ciencias de La Computacion

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL Monografía Tema: ―Ciencias De La Computación‖ Presentada por: María José Chir

Views 96 Downloads 0 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL

Monografía Tema: ―Ciencias De La Computación‖

Presentada por: María José Chiriboga Muñoz

Paralelo: 41 Guayaquil – Ecuador Año 2012

I

TABLA DE CONTENIDOS TABLA DE CONTENIDOS ....................................................................................................... I INDICE DE GRÁFICOS........................................................................................................... A INDICE DE TABLAS .............................................................................................................. A CAPITULO 1 ........................................................................................................................1 1. CIENCIAS DE LA COMPUTACIÓN ...................................................................................1 1.1 HISTORIA ................................................................................................................................. 2 CAPITULO 2 ........................................................................................................................1 2. CAMPOS DE LAS CIENCIAS DE LA COMPUTACIÓN .......................................................1 2.1 FUNDAMENTOS MATEMÁTICOS .............................................................................................. 1 2.1.1 Criptografía......................................................................................................................... 1 2.1.1.1 Objetivos de la criptografía ............................................................................................... 2 2.1.1.2 Terminología ..................................................................................................................... 2 2.1.1.3 Grado de seguridad ........................................................................................................... 3 2.1.2 Teoría de grafos: ................................................................................................................ 3 2.1.2.1 Aplicaciones....................................................................................................................... 4 2.1.2.2 Tipos de grafos .................................................................................................................. 4 2.1.2.3 Representación de grafos ................................................................................................. 5 2.1.2.4 Caracterización de grafos .................................................................................................. 5 2.1.3 Lógica matemática ............................................................................................................ 6 2.1.3.1 Historia .............................................................................................................................. 7 2.1.4 Teoría de tipos ................................................................................................................... 8 2.1.4.1 Tipo de dato ...................................................................................................................... 8 2.1.4.2 Tipos de datos máquina ................................................................................................... 9 2.1.4.3 Tipos de datos primitivos .................................................................................................. 9 2.2 TEORÍA DE LA COMPUTACIÓN.............................................................................................. 10 2.2.1 Principales subramas ...................................................................................................... 10 2.2.1.1 Teoría de autómatas ....................................................................................................... 10 2.2.1.2 Teoría de la computabilidad............................................................................................ 11 2.2.1.3 Teoría de la complejidad computacional ........................................................................ 12 2.3 ALGORITMOS Y ESTRUCTURAS DE DATOS ........................................................................... 13 I

2.3.1 Análisis de algoritmos .................................................................................................... 13 2.3.2 Algoritmos ....................................................................................................................... 14 2.3.2.1 Definición formal ............................................................................................................. 14 2.3.3 Diagrama de flujo ........................................................................................................... 16 2.3.4 Pseudocódigo................................................................................................................... 17 2.3.4.1 Sistemas formales ........................................................................................................... 17 2.3.5 Estructuras de datos ....................................................................................................... 18 2.3.5.1 Estructuras de datos........................................................................................................ 19 2.3.6 Lógica y computabilidad ................................................................................................ 19 2.3.7 Especificación .................................................................................................................. 19 2.4 LENGUAJES DE PROGRAMACIÓN Y COMPILADORES ............................................................ 20 2.4.1 Compilador....................................................................................................................... 20 2.4.1.1 Partes de un compilador ................................................................................................. 20 2.4.1.2 Tipos de compiladores .................................................................................................... 21 2.4.1.3 Proceso de compilación .................................................................................................. 22 2.4.1.4 Análisis sintáctico ............................................................................................................ 22 2.4.1.5 Análisis semántico ........................................................................................................... 23 2.4.2 Teoría de lenguajes de programación .......................................................................... 24 2.4.2.1 Subdisciplinas y campos relacionados ............................................................................ 24 2.5 BASE DE DATOS .................................................................................................................... 26 2.5.1 Bases de datos .................................................................................................................. 26 2.5.1.1 Tipos de base de datos .................................................................................................... 27 2.5.2 Ventajas ............................................................................................................................ 30 2.5.3 Desventajas ...................................................................................................................... 31 2.5.4 Minería de datos ............................................................................................................ 31 2.5.4.1 Proceso ........................................................................................................................... 32 2.5.4.2 Técnicas de minería de datos ......................................................................................... 33 2.5.4.3 Aplicaciones..................................................................................................................... 33 2.6 SISTEMAS CONCURRENTES, PARALELOS Y DISTRIBUIDOS .................................................. 36 2.6.1 Programación concurrente ............................................................................................ 36 2.6.2 Redes de computadoras ................................................................................................. 36 2.6.2.1 Software .......................................................................................................................... 37 2.6.2.2 Hardware ......................................................................................................................... 37 2.6.3 Cómputo paralelo: Computación paralela .................................................................. 38 2.6.4 Sistemas Distribuidos: Computación distribuida ...................................................... 38 2.6.4.1 Sistemas distribuidos ...................................................................................................... 39 2.6.4.2 Características ................................................................................................................. 39 2.6.4.3 Seguridad......................................................................................................................... 39 2.7 INTELIGENCIA ARTIFICIAL ................................................................................................... 40 2.7.1 Inteligencia artificial ....................................................................................................... 40 2.7.2 Categorías de la inteligencia Artificial ......................................................................... 41 2.7.2.1 Sistemas que piensan como humanos ............................................................................ 41 2.7.2.2 Sistemas que piensan racionalmente ............................................................................. 41

II

2.7.2.3 Inteligencia artificial computacional ............................................................................... 42 2.7.2.4 La inteligencia artificial y los sentimientos ..................................................................... 42 2.7.2.5 Aplicaciones de la inteligencia artificial .......................................................................... 43 2.7.2 Razonamiento automatizado........................................................................................ 43 2.7.3 Robótica........................................................................................................................... 44 2.7.4 Visión por computador ................................................................................................. 44 2.7.4.1 Producción de la imagen digital en microscopía óptica ................................................. 45 2.7.4.2 Propiedades básicas de las imágenes digitales .............................................................. 45 2.7.4.3 Introducción a los sensores de imagen CMOS ............................................................... 45 2.7.4.4 Estrategias recomendadas para el procesamiento de imágenes digitales .................... 45 2.7.5 Aprendizaje Automático................................................................................................. 46 2.7.5.1 Interacción Hombre-Máquina ......................................................................................... 46 2.7.5.2 Tipos de algoritmos ......................................................................................................... 46 2.7.5.3 Aplicaciones..................................................................................................................... 48 2.8 GRÁFICOS POR COMPUTADOR .............................................................................................. 49 2.8.1 Computación Grafica ...................................................................................................... 49 2.8.1.1 Gráficos 2D de computadora ......................................................................................... 50 2.8.1.2 Gráficos 3D de computadora ......................................................................................... 50 2.8.1.3 Representación basada en Imagen - Image Based Rendering (IBR) ............................... 51 2.8.2 Procesamiento digital de imágenes .............................................................................. 52 2.8.2.1 Proceso de filtrado .......................................................................................................... 52 2.8.2.2 Objetivos ......................................................................................................................... 53 2.8.2.3 Ventajas ........................................................................................................................... 53 2.8.2.4 Desventajas ..................................................................................................................... 53 2.8.3 Geometría Computacional ............................................................................................ 53 2.9 COMPUTACIÓN CIENTÍFICA .................................................................................................. 54 2.9.1 Bioinformática ................................................................................................................. 54 2.9.2 Computación Cuántica ................................................................................................... 55 2.9.2.1 Origen de la computación cuántica ................................................................................ 55 2.9.3 Neurociencia computacional......................................................................................... 56 2.9.3.1 Temas Principales ............................................................................................................ 57 2.9.3.2 Comportamiento de las redes ......................................................................................... 57 CAPITULO 3 .........................................................................................................................1 3. RELACIÓN CON OTROS CAMPOS..................................................................................1 BIBLIOGRAFIA .............................................................................................................1 LINKOGRAFIA ..............................................................................................................1 HIPERVINCULOS .........................................................................................................1

III

INDICE DE GRÁFICOS GRAFICO 1: COMPUTADORA ................................................................................................................ 1 GRAFICO 2: LA TECNOLOGIA .............................................................................................................. 2 GRAFICO 3: CRIPTOGRAFIA ................................................................................................................. 1 GRAFICO 4: TEORIA DE GRAFOS ........................................................................................................ 3 GRAFICO 5: TEORIA DE TIPOS ............................................................................................................. 8 GRAFICO 6: TEORIA DE COMPUTABILIDAD .................................................................................. 11 GRAFICO 7: COMPLEJIDAD TEMPORAL ......................................................................................... 12 GRAFICO 8: ALGORITMO .................................................................................................................... 14 GRAFICO 9: DIAGRAMA DE FLUJO .................................................................................................. 16 GRAFICO 10: ESTRUCTURA DE DATOS ........................................................................................... 18 GRAFICO 11: COMPILADORES ............................................................................................................ 20 GRAFICO 12: LAMBDA EN MINUSCULA .......................................................................................... 24 GRAFICO 13: BASE DE DATOS ............................................................................................................ 26 GRAFICO 14: COMPUTO PARALELO ................................................................................................. 38 GRAFICO 15: INTELIGENCIA ARTIFICIAL ...................................................................................... 40 GRAFICO 16: IMAGEN DIGITAL ......................................................................................................... 49 GRAFICO 17: PROCESO DIGITAL DE IMAGEN ............................................................................... 52 GRAFICO 18: BIOINFORMATICA ....................................................................................................... 54 GRAFICO 19: COMPUTACION CUANTICA ........................................................................................ 55

INDICE DE TABLAS TABLA 1: TABLA DE DATOS PRIMITIVOS DE TIPO CARACTER ................................................... 9 TABLA 2: TABLA DE DATOS PRIMITIVOS DE TIPO NÚMERICO ................................................. 9

A

CAPITULO 1 1. Ciencias de la computación

L

as ciencias de la computación son aquellas que abarcan las bases teóricas de la información y la computación, así como su aplicación en sistemas computacionales. Existen diversos campos o disciplinas dentro de las Ciencias de la Computación o Ciencias Computacionales; algunos enfatizan los resultados específicos del cómputo (como los gráficos por computadora), mientras que otros (como la teoría de la complejidad computacional) se relacionan con propiedades de los algoritmos usados al realizar cómputos. Otros por su parte se enfocan en los problemas que requieren la implementación de cómputos. Por ejemplo, los estudios de la teoría de lenguajes de programación describen un cómputo, mientras que la programación de computadoras aplica lenguajes de programación específicos para desarrollar una solución a un problema computacional concreto. La informática se refiere al tratamiento automatizado de la información de una forma útil y oportuna. No se debe confundir el carácter teórico de esta ciencia con otros aspectos prácticos como Internet. De acuerdo a Peter J. Denning, la cuestión fundamental en que se basa la ciencia de la computación es, "¿Qué puede ser (eficientemente) automatizado?"

GRAFICO 1: COMPUTADORA

Página 1 de 2

1.1 Historia La historia de la ciencia de la computación antecede a la invención del computador digital moderno. Antes de la década de 1920, el término computador se refería a un ser humano que realizaba cálculos. Los primeros investigadores en lo que después se convertiría las ciencias de la computación, estaban interesados en la cuestión de la computabilidad: qué cosas pueden ser computadas por un ser humano que simplemente siga una lista de instrucciones con lápiz y papel, durante el tiempo que sea necesario, con ingenuidad y sin conocimiento previo del problema. Parte de la motivación para este trabajo era el desarrollar máquinas que computaran, y que pudieran automatizar el tedioso y falible trabajo de la computación humana. Durante la década de 1940, conforme se desarrollaban nuevas y más poderosas máquinas para computar, el término computador se comenzó a utilizar para referirse a las máquinas en vez de a sus antecesores humanos. Conforme iba quedando claro que las computadoras podían usarse para más cosas que solamente cálculos matemáticos, el campo de la ciencia de la computación se fue ampliando para estudiar a la computación (informática) en general. La ciencia de la computación comenzó entonces a establecerse como una disciplina académica en la década de 1960, con la creación de los primeros departamentos de ciencia de la computación y los primeros programas de licenciatura (Denning 2000).1

GRAFICO 2: LA TECNOLOGIA

1

CAPITULO PRIMERO

2

CAPITULO 2 2. Campos de las ciencias de la computación 2.1 Fundamentos matemáticos 2.1.1 Criptografía

C

riptografía (del griego κρύπτω krypto, «oculto», y γράφως graphos, «escribir», literalmente «escritura oculta») tradicionalmente se ha definido como la parte de la criptología que se ocupa de las técnicas, bien sea aplicadas al arte o la ciencia, que alteran las representaciones lingüísticas de mensajes, mediante técnicas de cifrado y/o codificado, para hacerlos ininteligibles a intrusos (lectores no autorizados) que intercepten esos mensajes. Por tanto el único objetivo de la criptografía era conseguir la confidencialidad de los mensajes. Para ello se diseñaban sistemas de cifrado y códigos. En esos tiempos la única criptografía que había era la llamada criptografía clásica. La aparición de las Tecnologías de la Información y la Comunicación y el uso masivo de las comunicaciones digitales han producido un número creciente de problemas de seguridad. Las transacciones que se realizan a través de la red pueden ser interceptadas. La seguridad de esta información debe garantizarse. Este desafío ha generalizado los objetivos de la criptografía para ser la parte de la criptología que se encarga del estudio de los algoritmos, protocolos (se les llama protocolos criptográficos) y sistemas que se utilizan para proteger la información y dotar de seguridad a las comunicaciones y a las entidades que se comunican. Para ello los criptógrafos investigan, desarrollan y aprovechan técnicas matemáticas que les sirven como herramientas para conseguir sus objetivos. Los grandes avances que se han producido en el mundo de la criptografía han sido posibles gracias a los grandes avances que se ha producido en el campo de las matemáticas y las ciencias de la computación.

GRAFICO 3: CRIPTOGRAFIA

Página 1 de 57

2.1.1.1 Objetivos de la criptografía La criptografía actualmente se encarga del estudio de los algoritmos, protocolos y sistemas que se utilizan para dotar de seguridad a las comunicaciones, a la información y a las entidades que se comunican. El objetivo de la criptografía es diseñar, implementar, implantar, y hacer uso de sistemas criptográficos para dotar de alguna forma de seguridad. Por tanto se ocupa de proporcionar:  Confidencialidad: Es decir garantiza que la información está accesible únicamente a personal autorizado. Para conseguirlo utiliza códigos y técnicas de cifrado.  Integridad: Es decir garantiza la corrección y completitud de la información. Para conseguirlo puede usar por ejemplo funciones hash criptográficas MDC, protocolos de compromiso de bit, o protocolos de notarización electrónica.  No repudio: Es decir proporciona protección frente a que alguna de las entidades implicadas en la comunicación, pueda negar haber participado en toda o parte de la comunicación. Para conseguirlo puede usar por ejemplo firma digital.  Autenticación: Es decir proporciona mecanismos que permiten verificar la identidad del comunicante. Para conseguirlo puede usar por ejemplo función hash criptográfica MAC o protocolo de conocimiento cero.

2.1.1.2 Terminología En el campo de la criptografía muchas veces se agrupan conjuntos de funcionalidades que tienen alguna característica común y a ese conjunto lo denominan 'Criptografía de' la característica que comparten. Veamos algunos ejemplos:  Criptografía simétrica.- Agrupa aquellas funcionalidades criptográficas que se apoyan en el uso de una sola clave.  Criptografía de clave pública o Criptografía asimétrica.Agrupa aquellas funcionalidades criptográficas que se apoyan en el uso de parejas de claves compuesta por una clave pública, que sirve para cifrar, y por una clave privada, que sirve para descifrar.  Criptografía con umbral.- Agrupa aquellas funcionalidades criptográficas que se apoyan en el uso de un umbral de participantes a partir del cual se puede realizar la acción.  Criptografía basada en identidad.- Es un tipo de Criptografía asimétrica que se basa en el uso de identidades.

Página 2 de 57

2.1.1.3 Grado de seguridad Cuando se evalúa la seguridad de un sistema criptográfico se puede calibrar la seguridad que aporta en función de si éste es seguro de forma incondicional o si es seguro sólo si se cumplen ciertas condiciones.  Seguridad incondicional.- Se dice que un sistema criptográfico tiene una seguridad incondicional (en inglés unconditional security) sobre cierta tarea si un atacante no puede resolver la tarea aunque tenga infinito poder computacional.  Seguridad condicional.- Se dice que un sistema criptográfico tiene una seguridad condicional (en inglés conditional security) sobre cierta tarea si un atacante puede teóricamente resolver la tarea, pero no es computacionalmente factible para él (debido a sus recursos, capacidades y acceso a información).

2.1.2 Teoría de grafos: Los grafos son el objeto de estudio de esta rama de las matemáticas. Arriba el grafo pez, en medio el grafo arco y abajo el grafo dodecaedro. La teoría de grafos (también llamada teoría de las gráficas) es un campo de estudio de las matemáticas y las ciencias de la computación, que estudia las propiedades de los grafos (también llamadas gráficas) estructuras que constan de dos partes, el conjunto de vértices, nodos o puntos; y el conjunto de aristas, líneas o lados (edges en inglés) que pueden ser orientados o no. La teoría de grafos es una rama de las matemáticas discretas y aplicadas, y es una disciplina que unifica diversas áreas como combinatorias, álgebra, probabilidad, geometría de polígonos, aritmética y topología. Actualmente ha tenido mayor preponderancia en el campo de la informática, las ciencias de la computación y telecomunicaciones.

GRAFICO 4: TEORIA DE GRAFOS

Página 3 de 57

2.1.2.1 Aplicaciones Gracias a la teoría de grafos se pueden resolver diversos problemas como por ejemplo la síntesis de circuitos secuenciales, contadores o sistemas de apertura. Se utiliza para diferentes áreas por ejemplo, Dibujo computacional, en todas las áreas de Ingeniería. Los grafos se utilizan también para modelar trayectos como el de una línea de autobús a través de las calles de una ciudad, en el que podemos obtener caminos óptimos para el trayecto aplicando diversos algoritmos como puede ser el algoritmo de Floyd. Para la administración de proyectos, utilizamos técnicas como PERT en las que se modelan los mismos utilizando grafos y optimizando los tiempos para concretar los mismos. La teoría de grafos también ha servido de inspiración para las ciencias sociales, en especial para desarrollar un concepto no metafórico de red social que sustituye los nodos por los actores sociales y verifica la posición, centralidad e importancia de cada actor dentro de la red. Esta medida permite cuantificar y abstraer relaciones complejas, de manera que la estructura social puede representarse gráficamente. Por ejemplo, una red social puede representar la estructura de poder dentro de una sociedad al identificar los vínculos (aristas), su dirección e intensidad y da idea de la manera en que el poder se transmite y a quiénes. Los grafos son importantes en el estudio de la biología y hábitat. El vértice representa un hábitat y las aristas (o "edges" en inglés) representa los senderos de los animales o las migraciones. Con esta información, los científicos pueden entender cómo esto puede cambiar o afectar a las especies en su hábitat.

2.1.2.2 Tipos de grafos Grafo simple. O simplemente grafo es aquel que acepta una sola una arista uniendo dos vértices cualesquiera. Esto es equivalente a decir que una arista cualquiera es la única que une dos vértices específicos. Es la definición estándar de un grafo.  Multígrafo: O pseudografo son grafos que aceptan más de una arista entre dos vértices. Estas aristas se llaman múltiples o lazos (loops en inglés). Los grafos simples son una subclase de esta categoría de grafos. También se les llama grafos no-dirigido.  Grafo dirigido: Son grafos en los cuales se ha añadido una orientación a las aristas, representada gráficamente por una flecha  Grafo etiquetado: Grafos en los cuales se ha añadido un peso a las aristas (número entero generalmente) o un etiquetado a los vértices.  Grafo aleatorio: Grafo cuyas aristas están asociadas a una probabilidad.

Página 4 de 57

 Hipergrafo: Grafos en los cuales las aristas tienen más de dos extremos, es decir, las aristas son incidentes a 3 o más vértices.  Grafo infinito: Grafos con conjunto de vértices y aristas de cardinal infinito.

2.1.2.3 Representación de grafos Existen diferentes formas de representar un grafo (simple), además de la geométrica y muchos métodos para almacenarlos en una computadora. La estructura de datos usada depende de las características del grafo y el algoritmo usado para manipularlo. Entre las estructuras más sencillas y usadas se encuentran las listas y las matrices, aunque frecuentemente se usa una combinación de ambas. Las listas son preferidas en grafos dispersos porque tienen un eficiente uso de la memoria. Por otro lado, las matrices proveen acceso rápido, pero pueden consumir grandes cantidades de memoria.

2.1.2.4 Caracterización de grafos  Grafos simples.- Un grafo es simple si a lo más existe una arista uniendo dos vértices cualesquiera. Esto es equivalente a decir que una arista cualquiera es la única que une dos vértices específicos. Un grafo que no es simple se denomina multígrafo.  Grafos conexos.- Un grafo es conexo si cada par de vértices está conectado por un camino; es decir, si para cualquier par de vértices (a, b), existe al menos un camino posible desde a hacia b. Un grafo es doblemente conexo si cada par de vértices está conectado por al menos dos caminos disjuntos; es decir, es conexo y no existe un vértice tal que al sacarlo el grafo resultante sea disco nexo. Es posible determinar si un grafo es conexo usando un algoritmo Búsqueda en anchura (BFS) o Búsqueda en profundidad (DFS). En términos matemáticos la propiedad de un grafo de ser (fuertemente) conexo permite establecer con base en él una relación de equivalencia para sus vértices, la cual lleva a una partición de éstos en "componentes (fuertemente) conexas", es decir, porciones del grafo, que son (fuertemente) conexas cuando se consideran como grafos aislados. Esta propiedad es importante para muchas demostraciones en teoría de grafos.  Grafos completos.- Un grafo es completo si existen aristas uniendo todos los pares posibles de vértices. Es decir, todo par de vértices (a, b) debe tener una arista e que los une. El conjunto de los grafos completos es denominado usualmente, siendo el grafo completo de n vértices. Página 5 de 57

Un, es decir, grafo completo de vértices tiene exactamente aristas. La representación gráfica de los como los vértices de un polígono regular da cuenta de su peculiar estructura.  Grafos bipartitos.- Un grafo G es bipartito si puede expresarse como (es decir, sus vértices son la unión de dos grupos de vértices), bajo las siguientes condiciones: o Y son disjuntos y no vacíos. o Cada arista de A une un vértice de V1 con uno de V2. o No existen aristas uniendo dos elementos de V1; análogamente para V2. Bajo estas condiciones, el grafo se considera bipartito, y puede describirse informalmente como el grafo que une o relaciona dos conjuntos de elementos diferentes, como aquellos resultantes de los ejercicios y puzles en los que debe unirse un elemento de la columna A con un elemento de la columna B.  Grafos ponderados o etiquetados.- En muchos casos, es preciso atribuir a cada arista un número específico, llamado valuación, ponderación o coste según el contexto, y se obtiene así un grafo valuado. Formalmente, es un grafo con una función v: A → R+. Por ejemplo, un representante comercial tiene que visitar n ciudades conectadas entre sí por carreteras; su interés previsible será minimizar la distancia recorrida (o el tiempo, si se pueden prever atascos). El grafo correspondiente tendrá como vértices las ciudades, como aristas las carreteras y la valuación será la distancia entre ellas. Y, de momento, no se conocen métodos generales para hallar un ciclo de valuación mínima, pero sí para los caminos desde a hasta b, sin más condición.

2.1.3 Lógica matemática La lógica matemática es una parte de la lógica y las matemáticas, que consiste en el estudio matemático de la lógica y en la aplicación de este estudio a otras áreas de las matemáticas. La lógica matemática tiene estrechas conexiones con las ciencias de la computación y la lógica filosófica. La lógica matemática estudia los sistemas formales en relación con el modo en el que codifican nociones intuitivas de objetos matemáticos como conjuntos, números, demostraciones y computación. La lógica matemática suele dividirse en cuatro subcampos: teoría de modelos, teoría de la demostración, teoría de conjuntos y teoría de la recursión. La investigación en lógica matemática ha jugado un papel fundamental en el estudio de los fundamentos de las matemáticas. Actualmente se usan indiferentemente como sinónimos las expresiones: lógica simbólica(o logística), lógica matemática, lógica teorética y lógica formal.

Página 6 de 57

La lógica matemática no es la «lógica de las matemáticas» sino la «matemática de la lógica». Incluye aquellas partes de la lógica que pueden ser modeladas y estudiadas matemáticamente.

2.1.3.1 Historia Lógica matemática fue el nombre dado por Giuseppe Peano para esta disciplina. En esencia, es la lógica de Aristóteles, pero desde el punto de vista de una nueva notación, más abstracta, tomada del álgebra. Previamente ya se hicieron algunos intentos de tratar las operaciones lógicas formales de una manera simbólica por parte de algunos filósofos matemáticos como Leibniz y Lambert, pero su labor permaneció desconocida y aislada. Fueron George Boole y Augustus De Morgan, a mediados del siglo XIX, quienes primero presentaron un sistema matemático para modelar operaciones lógicas. La lógica tradicional aristotélica fue reformada y completada, obteniendo un instrumento apropiado para investigar sobre los fundamentos de la matemática. El tradicional desarrollo de la lógica enfatizaba su centro de interés en la forma de argumentar, mientras que la actual lógica matemática lo centra en un estudio combinatorio de los contenidos. Esto se aplica tanto a un nivel sintáctico (por ejemplo, el envío de una cadena de símbolos perteneciente a un lenguaje formal a un programa compilador que lo convierte en una secuencia de instrucciones ejecutables por una máquina), como a un nivel semántico, construyendo modelos apropiados (teoría de modelos). La lógica matemática estudia los sistemas formales en relación con el modo en el que codifican conceptos intuitivos de objetos matemáticos como conjuntos, números, demostraciones y computación. Concepto de lógica matemática La lógica estudia la forma del razonamiento. La lógica matemática es la disciplina que trata de métodos de razonamiento. En un nivel elemental, la lógica proporciona reglas y técnicas para determinar si es o no valido un argumento dado. El razonamiento lógico sé emplea en matemáticas para demostrar teoremas, sin embargo, se usa en forma constante para realizar cualquier actividad en la vida. Definición y clases de proposiciones Una proposición o enunciado es una oración que puede ser falso o verdadero pero no ambas a la vez. Toda proposición consta de tres partes: un sujeto, un verbo y un complemento referido al verbo. La proposición es un elemento fundamental de la Lógica Matemática.

Página 7 de 57

2.1.4 Teoría de tipos

GRAFICO 5: TEORIA DE TIPOS

2.1.4.1 Tipo de dato Tipo de dato informático es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué operaciones se pueden realizar. Tipos de datos comunes son: enteros, números de coma flotante (decimales), cadenas alfanuméricas, fechas, horas, colores, coches o cualquier cosa que se nos ocurra. Por ejemplo, en el tipo "int" representa un conjunto de enteros de 32 bits cuyo rango va desde el -2.147.483.648 al 2.147.483.647, así como las operaciones que se pueden realizar con los enteros, como la suma, resta y multiplicación. Los colores, por otra parte, se representan como tres bytes denotando la cantidad de rojo, verde y azul, y una cadena de caracteres representando el nombre del color; las operaciones permitidas incluyen la adición y sustracción, pero no la multiplicación. Éste es un concepto propio de la informática, más específicamente de los lenguajes de programación, aunque también se encuentra relacionado con nociones similares de las matemáticas y la lógica. En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores.1 Casi todos los lenguajes de programación explícitamente incluyen la notación del tipo de datos, aunque lenguajes diferentes pueden usar terminología diferente. La mayor parte de los lenguajes de programación permiten al programador definir tipos de datos adicionales, normalmente combinando múltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluirá un nombre y una fecha de nacimiento. Un tipo de dato puede ser también visto como una limitación impuesta en la interpretación de los datos en un sistema de tipificación, describiendo la representación, interpretación y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipificación usa información de los tipos de datos para comprobar la verificación de los programas que acceden o manipulan los datos.

Página 8 de 57

2.1.4.2 Tipos de datos máquina Todos los datos en los ordenadores basados en la electrónica digital se representan como bits (valores 0 y 1) en el nivel más bajo. La más pequeña unidad direccionable de datos es un grupo de bits llamado un byte (normalmente un octeto, que son 8 bits). La unidad procesada por las instrucciones del código máquina se le llama una palabra (en 2006, normalmente 32 o 64 bits). La mayor parte de las instrucciones interpretan la palabra como un número binario, como por ejemplo una palabra de 32 bits puede representar valores enteros sin signo desde el 0 al o valores enteros con signo desde al. Por medio del complemento a dos, la mayor parte del tiempo, el lenguaje máquina y la propia máquina no necesitan distinguir entre tipos de datos con o sin signo.

2.1.4.3 Tipos de datos primitivos Los tipos de datos hacen referencia al tipo de información que se trabaja, donde la unidad mínima de almacenamiento es el dato, también se puede considerar como el rango de valores que puede tomar una variable durante la ejecución del programa.

Tipo de Dato Char

Rango 0 a 65536

Tamaño de Bits 16 bits

TABLA 1: TABLA DE DATOS PRIMITIVOS DE TIPO CARACTER

Tipo De Datos Bite Short Int Long

Tamaño 8 bits 16 bits 32 bits 64 bits

TABLA 2: TABLA DE DATOS PRIMITIVOS DE TIPO NÚMERICO

Página 9 de 57

2.2 Teoría de la Computación La teoría de la computación es una rama de la matemática y la computación que centra su interés en las limitaciones y capacidades fundamentales de las computadoras. Específicamente esta teoría busca modelos matemáticos que formalizan el concepto de hacer un cómputo (cuenta o cálculo) y la clasificación de problemas.

2.2.1 Principales subramas Entre las principales subramas se encuentran:

2.2.1.1 Teoría de autómatas Esta teoría provee modelos matemáticos que formalizan el concepto de computadora o algoritmo de manera suficientemente simplificada y general para que se puedan analizar sus capacidades y limitaciones. Algunos de estos modelos juegan un papel central en varias aplicaciones de las ciencias de la computación, incluyendo procesamiento de texto, compiladores, diseño de hardware e inteligencia artificial. Los tres principales modelos son los autómatas finitos, autómatas con pila y máquinas de Turín, cada uno con sus variantes deterministas y no deterministas. Los autómatas finitos son buenos modelos de computadoras que tienen una cantidad limitada de memoria, los autómatas con pila modelan los que tienen gran cantidad de memoria pero que solo pueden manipularla a manera de pila (el último dato almacenado es el siguiente leído), y las máquinas de Turín modelan las computadoras que tienen una gran cantidad de memoria almacenada en una cinta. Estos autómatas están estrechamente relacionados con la teoría de lenguajes formales; cada autómata es equivalente a una gramática formal, lo que permite reinterpretar la jerarquía de Chomsky en términos de autómatas. Existen muchos otros tipos de autómatas como las máquinas de acceso aleatorio, autómatas celulares, máquinas ábaco y las máquinas de estado abstracto; sin embargo en todos los casos se ha mostrado que estos modelos no son más generales que la máquina de Turín, pues la máquina de Turín tiene la capacidad de simular cada uno de estos autómatas. Esto da lugar a que se piense en la máquina de Turín como el modelo universal de computadora.

Página 10 de 57

2.2.1.2 Teoría de la computabilidad

GRAFICO 6: TEORIA DE COMPUTABILIDAD

Esta teoría explora los límites de la posibilidad de solucionar problemas mediante algoritmos. Gran parte de las ciencias computacionales están dedicadas a resolver problemas de forma algorítmica, de manera que el descubrimiento de problemas imposibles es una gran sorpresa. La teoría de la computabilidad es útil para no tratar de resolver algorítmicamente estos problemas, ahorrando así tiempo y esfuerzo. Los problemas se clasifican en esta teoría de acuerdo a su grado de imposibilidad: Los computables son aquellos para los cuales sí existe un algoritmo que siempre los resuelve cuando hay una solución y además es capaz de distinguir los casos que no la tienen. También se les conoce como decidibles, resolubles o recursivos. Los semicomputables son aquellos para los cuales hay un algoritmo que es capaz encontrar una solución si es que existe, pero ningún algoritmo que determine cuando la solución no existe (en cuyo caso el algoritmo para encontrar la solución entraría a un bucle infinito). El ejemplo clásico por excelencia es el problema de la parada. A estos problemas también se les conoce como listables, recursivamente enumerables o reconocibles, porque si se enlistan todos los casos posibles del problema, es posible reconocer a aquellos que sí tienen solución. Los incomputables son aquellos para los cuales no hay ningún algoritmo que los pueda resolver, no importando que tengan o no solución. El ejemplo clásico por excelencia es el problema de la implicación lógica, que consiste en determinar cuándo una proposición lógica es un teorema; para este problema no hay ningún algoritmo que en todos los casos pueda distinguir si una proposición o su negación es un teorema. Hay una versión más general de esta clasificación, donde los problemas incomputables se subdividen a su vez en problemas más difíciles que otros. La herramienta principal para lograr estas clasificaciones es el concepto de reducibilidad: Un problema se reduce al problema si bajo la suposición de que se sabe resolver el problema es posible resolver al problema; esto se denota por, e informalmente significa que el problema no es más difícil de resolver que el

Página 11 de 57

problema. Por ejemplo, bajo la suposición de que una persona sabe sumar, es muy fácil enseñarle a multiplicar haciendo sumas repetidas, de manera que multiplicar se reduce a sumar.

2.2.1.3 Teoría de la complejidad computacional Aun cuando un problema sea computable, puede que no sea posible resolverlo en la práctica si se requiere mucha memoria o tiempo de ejecución. La teoría de la complejidad computacional estudia las necesidades de memoria, tiempo y otros recursos computacionales para resolver problemas; de esta manera es posible explicar por qué unos problemas son más difíciles de resolver que otros. Uno de los mayores logros de esta rama es la clasificación de problemas, similar a la tabla periódica, de acuerdo a su dificultad. En esta clasificación los problemas se separan por clases de complejidad. Esta teoría tiene aplicación en casi todas las áreas de conocimiento donde se desee resolver un problema computacionalmente, porque los investigadores no solo desean utilizar un método para resolver un problema, sino utilizar el más rápido. La teoría de la complejidad computacional también tiene aplicaciones en áreas como la criptografía, donde se espera que descifrar un código secreto sea un problema muy difícil a menos que se tenga la contraseña, en cuyo caso el problema se vuelve fácil.

GRAFICO 7: COMPLEJIDAD TEMPORAL

Página 12 de 57

2.3 Algoritmos y estructuras de datos 2.3.1 Análisis de algoritmos El análisis de algoritmos es una parte importante de la Teoría de complejidad computacional más amplia, que provee estimaciones teóricas para los recursos que necesita cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones resultan ser bastante útiles en la búsqueda de algoritmos eficientes. A la hora de realizar un análisis teórico de algoritmos es común calcular su complejidad en un sentido asintótico, es decir, para un tamaño de entrada suficientemente grande. La cota superior asintótica, y las notaciones omega (cota inferior) y theta (caso promedio) se usan con esa finalidad. Por ejemplo, la búsqueda binaria decimos que se ejecuta en una cantidad de pasos proporcional a un logaritmo, en O (log(n)), coloquialmente "en tiempo logarítmico". Normalmente las estimaciones asintóticas se utilizan porque diferentes implementaciones del mismo algoritmo no tienen porque tener la misma eficiencia. No obstante la eficiencia de dos implementaciones "razonables" cualesquiera de un algoritmo dado está relacionada por una constante multiplicativa llamada constante oculta. La medida exacta (no asintótica) de la eficiencia a veces puede ser computada pero para ello suele hacer falta aceptar supuestos acerca de la implementación concreta del algoritmo, llamada modelo de computación. Un modelo de computación puede definirse en términos de un ordenador abstracto, como la Máquina de Turín, y/o postulando que ciertas operaciones se ejecutan en una unidad de tiempo. Por ejemplo, si al conjunto ordenado al que aplicamos una búsqueda binaria tiene n elementos, y podemos garantizar que una única búsqueda binaria puede realizarse en un tiempo unitario, entonces se requieren como mucho log2 N + 1 unidades de tiempo para devolver una respuesta. Las medidas exactas de eficiencia son útiles para quienes verdaderamente implementan y usan algoritmos, porque tienen más precisión y así les permite saber cuanto tiempo pueden suponer que tomará la ejecución. Para algunas personas, como los desarrolladores de videojuegos, una constante oculta puede significar la diferencia entre éxito y fracaso. Las estimaciones de tiempo dependen de cómo definamos un paso. Para que el análisis tenga sentido, debemos garantizar que el tiempo requerido para realizar un paso esté acotado superiormente por una constante. Hay que mantenerse precavido en este terreno; por ejemplo, algunos análisis cuentan con que la suma de dos números se hace en un paso. Este supuesto puede no estar garantizado en ciertos contextos. Si por ejemplo los números involucrados en la computación pueden ser arbitrariamente grandes, dejamos de poder asumir que la adición requiere un tiempo constante (usando papel y lápiz, compara el tiempo que necesitas para sumar dos enteros de 2 dígitos cada uno y el necesario para hacerlo con enteros de 1000 dígitos).

Página 13 de 57

2.3.2 Algoritmos Los diagramas de flujo sirven para representar algoritmos de manera gráfica. En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi1 ) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.2 Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.1 En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.

GRAFICO 8: ALGORITMO

2.3.2.1 Definición formal En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida).1 2 3 4 5 6 Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo.7

Página 14 de 57

A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como máquinas de Turín entre otros. Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos.3 1 En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:7 Tiempo secuencial. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. Exploración acotada. La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual. En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos.10 En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turín (o equivalentemente, en un lenguaje de programación suficientemente general):10 Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial. Medios de expresión de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico. La descripción de un algoritmo usualmente se hace en tres niveles: Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.

Página 15 de 57

Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.

2.3.3 Diagrama de flujo Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número Artículo principal: Diagrama de flujo. Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación. Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.

GRAFICO 9: DIAGRAMA DE FLUJO

Página 16 de 57

2.3.4 Pseudocódigo El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo, como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas. El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer directamente a partir de él. Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema.

2.3.4.1 Sistemas formales La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Los modelos más comunes son la máquina de Turín, máquina de registro y funciones μrecursivas. Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación. Implementación Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.

Página 17 de 57

2.3.5 Estructuras de datos En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema. Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son: Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados). Otras operaciones que se pueden realizar son: Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos.

GRAFICO 10: ESTRUCTURA DE DATOS

Página 18 de 57

2.3.5.1 Estructuras de datos

                             

Conjuntos (set) Matriz (matemáticas) Matriz (programación) Lista Listas Simples Listas Doblemente Enlazadas Listas Circulares Listas por saltos (Skip lists) Árboles Árboles Binarios Árbol binario de búsqueda Árbol binario de búsqueda equilibrado Árboles Rojo-Negro Árboles AVL Árboles Biselados (Árboles Splay) Árboles Multicamino (Multirrama) Árboles B Árboles B+ Árboles B* Tries Grafos Tablas Hash Mapeos Diccionarios Montículos (o heaps) Montículo binario Montículo binómico Montículo de Fibonacci Montículo suave Montículo 2-3

2.3.6 Lógica y computabilidad

Estudio de diferentes tipos de lógicas, su poder expresivo, divisibilidad, aplicaciones. 2.3.7 Especificación

Desarrollo de métodos para definir formalmente (matemática y lógicamente), el comportamiento esperado de un algoritmo, para luego probar terminación y correctitud.

Página 19 de 57

2.4 Lenguajes de programación y compiladores

GRAFICO 11: COMPILADORES

2.4.1 Compilador Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.1 Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

2.4.1.1 Partes de un compilador La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto. Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis Léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en frases gramaticales) y Análisis Semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico). Página 20 de 57

Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible). Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end: Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio. Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End. Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina. El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

2.4.1.2 Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías: Compiladores cruzados: generan código para un sistema distinto del que están funcionando. Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente. Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina. Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan. Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes. Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador. Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del Página 21 de 57

lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.

2.4.1.3 Proceso de compilación Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programación a lenguaje máquina. Además de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en módulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confía a un programa distinto, llamado preprocesador. El preprocesador también puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente. Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable. Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y Asm), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.

2.4.1.4 Análisis sintáctico Artículo principal: Analizador sintáctico. En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico. La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definición de expresiones: Cualquier identificador es una expresión. Cualquier número es una expresión. Si expresión1 y expresión2 son expresiones, entonces también lo son: expresión1 + expresión2 expresión1 * expresión2

Página 22 de 57

Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define expresiones en función de operadores aplicados a otras expresiones. La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para determinar la división es si una construcción del lenguaje fuente es inherentemente recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las construcciones sintácticas suelen requerirla. No se requiere recursión para reconocer los identificadores, que suelen ser cadenas de letras y dígitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carácter que no sea ni letra ni dígito, y agrupando después todas las letras y dígitos encontrados hasta ese punto en un componente léxico llamado identificador. Por otra parte, esta clase de análisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los paréntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerárquica o de anidamiento a la entrada.

2.4.1.5 Análisis semántico La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones. Un componente importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real. Revisa que los arreglos tengan definido el tamaño correcto.

Página 23 de 57

2.4.2 Teoría de lenguajes de programación

GRAFICO 12: LAMBDA EN MINUSCULA La teoría de lenguajes de programación es una rama de la informática que se encarga del diseño, implementación, análisis, caracterización y clasificación de lenguajes de programación y sus características. Es un campo multi-disciplinar, dependiendo tanto de (y en algunos casos afectando) matemáticas, ingeniería del software, lingüística, e incluso ciencias cognitivas. Es una rama bien reconocida de la informática, y a fecha de 2006, un área activa de investigación, con resultados publicados en un gran número de revistas dedicadas a la PLT, así como en general en publicaciones de informática e ingeniería.La mayoría de los programas de los estudiantes universitarios de informática requieren trabajar en este tema. Un símbolo no oficial de la teoría de lenguajes de programación es la letra griega lambda en minúsculas. Este uso deriva del cálculo lambda, un modelo computacional ampliamente usado por investigadores de lenguajes de programación. Muchos textos y artículos sobre programación y lenguajes de programación utilizan lambda de una u otra manera. Ilustra la portada del texto clásico Estructura e Interpretación de Programas de Ordenador, y el título de muchos de los llamados Artículos Lambda, escritos por Gerald Jay Sussman y Guy Steele, creadores del lenguaje de programación Scheme. Un sitio muy conocido sobre teoría de lenguajes de programación se llama Lambda the Ultimate (Lambda el primordial), en honor al

2.4.2.1 Subdisciplinas y campos relacionados Hay varios campos de estudio que o bien caen dentro de la teoría de lenguajes de programación, o bien tienen una profunda influencia en ella; muchos de estos se superponen considerablemente. Teoría de los compiladores es la base formal sobre la escritura de compiladores (o más generalmente traductores); programas que traducen un programa escrito en un lenguaje a otra forma. Las acciones de un compilador se dividen tradicionalmente en análisis sintáctico (escanear y pasear), análisis semántico (determinando que es lo que debería de hacer un programa), optimización (mejorando el rendimiento indicado por cierta medida, típicamente la velocidad de ejecución) y generación de código (generando la salida de un programa equivalente en el lenguaje deseado; a menudo el set de instrucciones de una CPU). La Teoría de tipos es el estudio de sistemas de tipos, que son "métodos sintácticos tratables para proveer la ausencia de ciertos comportamientos de programa mediante la clasificación de frases según los tipos de valores que

Página 24 de 57

computan." (Types and Programming Languages, MIT Press, 2002). Muchos lenguajes de programación se distinguen por las características de sus sistemas de tipos. La Semántica formal es la especificación formar del comportamiento de programas de ordenador y lenguajes de programación. La Transformación de programas es el proceso de transformar un programa de una forma (lenguaje) a otra forma; el análisis de programas es problema general de examinar un programa mediante la determinación de sus características clave (como la ausencia de clases de errores de programa). Sistemas en tiempo de ejecución se refiere al desarrollo de entornos runtime para lenguajes de programación y sus componentes, incluyendo máquinas virtuales, recolección de basura, e interfaces para funciones externas. Análisis comparativo de lenguajes de programación busca clasificar los lenguajes de programación en diferentes tipos basados en sus características; amplias categorías de diferentes lenguajes de programación se conocen frecuentemente como paradigmas de computación. Meta programación es la generación de programas de mayor orden que, cuando se ejecutan, producen programas (posiblemente en un lenguaje diferente, o en un subconjunto del lenguaje original) como resultado. Lenguajes dedicados son lenguajes construidos para resolver problemas en un dominio de problemas en particular de manera eficiente. Además, PLT hace uso de muchas otras ramas de las matemáticas, ingeniería del software, lingüística, e incluso ciencias cognitivas. Lenguajes formales para expresar algoritmos y las propiedades de estos lenguajes.

Página 25 de 57

2.5 Base de Datos

GRAFICO 13: BASE DE DATOS

2.5.1 Bases de datos Una base de datos o banco de datos (en ocasiones abreviada con la sigla BD o con la abreviatura b. d.) es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos. Existen programas denominados sistemas gestores de bases de datos, abreviados SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de la informática. Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas. También son ampliamente utilizadas en entornos científicos con el objeto de almacenar la información experimental. Aunque las bases de datos pueden contener muchos tipos de datos, algunos de ellos se encuentran protegidos por las leyes de varios países. Por ejemplo, en España los datos personales se encuentran protegidos por la Ley Orgánica de Protección de Datos de Carácter Personal (LOPD).

Página 26 de 57

2.5.1.1 Tipos de base de datos Las bases de datos pueden clasificarse de varias maneras, de acuerdo al contexto que se esté manejando, la utilidad de las mismas o las necesidades que satisfagan.  Bases de datos estáticas.- Son bases de datos de sólo lectura, utilizadas primordialmente para almacenar datos históricos que posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a través del tiempo, realizar proyecciones, tomar decisiones y realizar análisis de datos para inteligencia empresarial.  Bases de datos dinámicas.- Éstas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo operaciones como actualización, borrado y adición de datos, además de las operaciones fundamentales de consulta. Un ejemplo de esto puede ser la base de datos utilizada e n un sistema de información de un supermercado, una farmacia, un videoclub o una empresa.  Bases de datos bibliográficas .- Sólo contienen un subrogante (representante) de la fuente primaria, que permite localizarla. Un registro típico de una base de datos bibliográfica contiene información sobre el autor, fecha de publicación, editorial, título, edición, de una determinada publicación, etc. Puede contener un resumen o extracto de la publicación original, pero nunca el texto completo, porque si no, estaríamo s en presencia de una base de datos a texto completo (o de fuentes primarias —ver más abajo). Como su nombre lo indica, el contenido son cifras o números. Por ejemplo, una colección de resultados de análisis de laboratorio, entre otras.  Bases de datos de texto completo.- Almacenan las fuentes primarias, como por ejemplo, todo el contenido de todas las ediciones de una colección de revistas científicas.  Bases de datos o "bibliotecas" de información química o biológica.- Son bases de datos que almacenan diferentes tipos de información proveniente de la química, las ciencias de la vida o médicas. Se pueden considerar en varios subtipos:  Las que almacenan secuencias de nucleótidos o proteínas.  Las bases de datos de rutas metabólicas.  Bases de datos de estructura, comprende los registros de datos experimentales sobre estructuras 3D de biomoléculas Bases de datos clínicas.

Página 27 de 57

 Bases de datos bibliográficas (biológicas, químicas, médicas y de otros campos): PubChem, Medline, EBSCOhost.  Bases de datos jerárquicas.- En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no tienen hijos se los conoce como hojas. Las bases de datos jerárquicas son especialmente útiles en el caso de aplicaciones que manejan un gran volumen de información y datos muy compartidos permitiendo crear estructuras estables y de gran rendimiento. Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de datos.  Base de datos de red.- Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico). Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de red ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales.  Bases de datos transaccionales.- Son bases de datos cuyo único fin es el envío y recepción de datos a gran des velocidades, estas bases son muy poco comunes y están dirigidas por lo general al entorno de análisis de calidad, datos de producción e industrial, es importante entender que su fin único es recolectar y recuperar los datos a la mayor velocidad posible , por lo tanto la redundancia y duplicación de información no es un problema como con las demás bases de datos, por lo general para poderlas aprovechar al máximo permiten algún tipo de conectividad a bases de datos relacionales. Un ejemplo habitual de transacción es el traspaso de una cantidad de dinero entre cuentas bancarias. Normalmente se realiza mediante dos operaciones distintas, una en la que se decrementa el saldo de la cuenta origen y otra en la que incrementamos el saldo de la cuenta destino. Para garantizar la atomicidad del sistema (es decir, para que no aparezca o desaparezca dinero), las dos operaciones deben ser atómicas, es decir, el sistema debe garantizar que, bajo cualquier circunstancia (incluso una caída del sistema), el resultado final es que, o bien se han realizado las dos operaciones, o bien no se ha realizado ninguna.

Página 28 de 57

 Bases de datos relacionales.- Éste es el modelo utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Tras ser postulados sus fundamentos en 1970 por Edgar Frank Codd, de los laboratorios IBM en San José (California), no tardó en consolidarse como un nuevo paradigma en los modelos de base de datos. Su idea fundamental es el uso de "relaciones". Estas relaciones podrían considerar se en forma lógica como conjuntos de datos llamados "tuplas". Pese a que ésta es la teoría de las bases de datos relacionales creadas por Codd, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar. Esto es pensando en cada relación como si fuese una tabla que está compuesta por registros (las filas de una tabla), que representarían las tuplas, y campos (las columnas de una tabla). En este modelo, el lugar y la forma en que se almacenen los datos no tienen relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar para un usuario esporádico de la base de datos. La información puede ser recuperada o almacenada mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la información. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query Language o Lenguaje Estructurado de Consultas, un estándar implementado por los principales motores o sistemas de gestión de bases de datos relacionales. Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce como normalización de una base de datos. Durante los años 80 la aparición de dBASE produjo una revolución en los lenguajes de programación y sistemas de administración de datos. Aunque nunca debe olvidarse que dBase no utilizaba SQL como lenguaje base para su gestión.  Bases de datos multidimensionales.- Son bases de datos ideadas para desarrollar aplicaciones muy concretas, como creación de Cubos OLAP. Básicamente no se diferencian demasiado de las bases de datos relacionales (una tabla en una base de datos relacional podría serlo también en una base de datos multidimensional), la diferencia está m ás bien a nivel conceptual; en las bases de datos multidimensionales los campos o atributos de una tabla pueden ser de dos tipos, o bien representan dimensiones de la tabla, o bien representan métricas que se desean estudiar.  Bases de datos orientadas a objetos.- Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la base de datos los objetos completos (estado y comportamiento).

Página 29 de 57

Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos: Encapsulación - Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos. Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases. Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos. En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definición de la base de datos. Una operación (llamada función) se especifica en dos partes. La interfaz (o signatura) de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse independencia entre programas y operaciones. SQL: 2003, es el estándar de SQL92 ampliado, soporta los conceptos orientados a objetos y mantiene la compatibilidad con SQL92.  Bases de datos documentales.- Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más potentes. Tesaurus es un sistema de índices optimizado para este tipo de bases de datos.  Bases de datos deductivas.- Un sistema de base de datos deductiva, es un sistema de base de datos pero con la diferencia de que permite hacer deducciones a través de inferencias. Se basa principalmente en reglas y hechos que son almacenados en la base de datos. Las bases de datos deductivas son también llamadas bases de datos lógicas, a raíz de que se basa en lógica matemática. Este tipo de base de datos surge debido a las limitaciones de la Base de Datos Relacional de responder a consultas recursivas y de deducir relaciones indirectas de los datos almacenados en la base de datos.

2.5.2 Ventajas      

Uso de reglas lógicas para expresar las consultas. Permite responder consultas recursivas. Cuenta con negaciones estratificadas Capacidad de obtener nueva información a través de la ya almacenada en la base de datos mediante inferencia. Uso de algoritmos de optimización de consultas. Soporta objetos y conjuntos complejos.

Página 30 de 57

2.5.3 Desventajas  Crear procedimientos eficaces de deducción para evitar caer en bucles infinitos.  Encontrar criterios que decidan la utilización de una ley como regla de deducción.  Replantear las convenciones habituales de la base de datos.

2.5.4 Minería de datos La minería de datos (es la etapa de análisis de "Knowledge Discovery in Databases" o KDD), es un campo de las ciencias de la computación, es el proceso que intenta descubrir patrones en grandes volúmenes de conjuntos de datos. Utiliza los métodos de la inteligencia artificial, aprendizaje automático, estadística y sistemas de bases de datos. El objetivo general del proceso de minería de datos consiste en extraer información de un conjunto de datos y la transformándola en una estructura comprensible para su uso posterior. Además de la etapa de análisis en bruto, que involucra aspectos de bases de datos y gestión de datos, procesamiento de datos, el modelo y las consideraciones de inferencia, métricas de Intereses, consideraciones de la Teoría de la complejidad computacional, post-procesamiento de las estructuras descubiertas, la visualización y actualización en línea. El término es una palabra de moda, y es frecuentemente mal utilizado para referirse a cualquier forma de datos a gran escala o procesamiento de la información (recolección, extracción, almacenamiento, análisis y estadísticas), pero también se ha generalizado a cualquier tipo de sistema de apoyo informático decisión, incluyendo la inteligencia artificial, aprendizaje automático y la inteligencia empresarial. En el uso de la palabra, el término clave es el descubrimiento, comúnmente se define como "la detección de algo nuevo". Incluso el popular libro "La minería de datos: sistema de prácticas herramientas de aprendizaje y técnicas con Java" (que cubre todo el material de aprendizaje automático) originalmente iba a ser llamado simplemente "la máquina de aprendizaje práctico", y el término "minería de datos" no se añadió por razones de marketing. A menudo, los términos más generales "(gran escala) el análisis de datos", o "análisis" -. O cuando se refiere a los métodos actuales, la inteligencia artificial y aprendizaje automático, son más apropiados. La tarea de minería de datos real es el análisis automático o semi-automático de grandes cantidades de datos para extraer patrones interesantes hasta ahora desconocidos, como los grupos de registros de datos (análisis cluster), registros poco usuales (la detección de anomalías) y dependencias (Asociación Minera regla). Esto generalmente implica el uso de técnicas de bases de datos como los índices espaciales. Estos patrones pueden entonces ser visto como una especie de resumen de los datos de entrada, y puede ser utilizado en el análisis adicional o, por ejemplo, en la máquina de aprendizaje y análisis predictivo. Por ejemplo, el paso de minería de datos podría identificar varios grupos en los datos, que luego pueden ser utilizados para obtener resultados más precisos de predicción por un sistema de soporte de decisiones. Ni la recolección de datos, preparación de datos, ni la interpretación de los resultados y la información son parte de la

Página 31 de 57

etapa de minería de datos, pero que pertenecen a todo el proceso KDD como pasos adicionales. Los términos relacionados con el dragado de datos, la pesca de datos y espionaje de los datos se refieren a la utilización de métodos de minería de datos a las partes de la muestra de un conjunto de datos de población más grandes establecidas que son (o pueden ser) demasiado pequeño para las inferencias estadísticas fiables que se hizo acerca de la validez de cualquier patrones descubiertos. Estos métodos pueden, sin embargo, ser utilizado en la creación de nuevas hipótesis que se prueba contra las poblaciones de datos más grandes.

2.5.4.1 Proceso Un proceso típico de minería de datos consta de los siguientes pasos generales: Selección del conjunto de datos, tanto en lo que se refiere a las variables objetivo (aquellas que se quiere predecir, calcular o inferir), como a las variables independientes (las que sirven para hacer el cálculo o proceso), como posiblemente al muestreo de los registros disponibles. Análisis de las propiedades de los datos, en especial los histogramas, diagramas de dispersión, presencia de valores atípicos y ausencia de datos (valores nulos). Transformación del conjunto de datos de entrada, se realizará de diversas formas en función del análisis previo, con el objetivo de prepararlo para aplicar la técnica de minería de datos que mejor se adapte a los datos y al problema, a este paso también se le conoce como pre procesamiento de los datos. Seleccionar y aplicar la técnica de minería de datos, se construye el modelo predictivo, de clasificación o segmentación. Extracción de conocimiento, mediante una técnica de minería de datos, se obtiene un modelo de conocimiento, que representa patrones de comportamiento observados en los valores de las variables del problema o relaciones de asociación entre dichas variables. También pueden usarse varias técnicas a la vez para generar distintos modelos, aunque generalmente cada técnica obliga a un pre procesado diferente de los datos. Interpretación y evaluación de datos, una vez obtenido el modelo, se debe proceder a su validación comprobando que las conclusiones que arroja son válidas y suficientemente satisfactorias. En el caso de haber obtenido varios modelos mediante el uso de distintas técnicas, se deben comparar los modelos en busca de aquel que se ajuste mejor al problema. Si ninguno de los modelos alcanza los resultados esperados, debe alterarse alguno de los pasos anteriores para generar nuevos modelos. Si el modelo final no superara esta evaluación el proceso se podría repetir desde el principio o, si el experto lo considera oportuno, a partir de cualquiera de los pasos anteriores. Esta retroalimentación se podrá repetir cuantas veces se considere necesario hasta obtener un modelo válido. Una vez validado el modelo, si resulta ser aceptable (proporciona salidas adecuadas y/o con márgenes de error admisibles) éste ya está listo para su explotación. Los modelos obtenidos por técnicas de minería de datos se aplican incorporándolos en los sistemas de análisis de información de las organizaciones, e incluso, en los sistemas transaccionales. En este sentido cabe destacar los esfuerzos del Data Mining Group, que está estandarizando el lenguaje PMML (Predictive Model Markup Language), de manera que los modelos de minería de datos sean interoperables en distintas plataformas, con Página 32 de 57

independencia del sistema con el que han sido construidos. Los principales fabricantes de sistemas de bases de datos y programas de análisis de la información hacen uso de este estándar. Tradicionalmente, las técnicas de minería de datos se aplicaban sobre información contenida en almacenes de datos. De hecho, muchas grandes empresas e instituciones han creado y alimentan bases de datos especialmente diseñadas para proyectos de minería de datos en las que centralizan información potencialmente útil de todas sus áreas de negocio. No obstante, actualmente está cobrando una importancia cada vez mayor la minería de datos desestructurados como información contenida en ficheros de texto, en Internet, etc.

2.5.4.2 Técnicas de minería de datos Como ya se ha comentado, las técnicas de la minería de datos provienen de la Inteligencia artificial y de la estadística, dichas técnicas, no son más que algoritmos, más o menos sofisticados que se aplican sobre un conjunto de datos para obtener unos resultados.

2.5.4.3 Aplicaciones  Negocios.- La minería de datos puede contribuir significativamente en las aplicaciones de administración empresarial basada en la relación con el cliente. En lugar de contactar con el cliente de forma indiscriminada a tr avés de un centro de llamadas o enviando cartas, sólo se contactará con aquellos que se perciba que tienen una mayor probabilidad de responder positivamente a una determinada oferta o promoción. Por lo general, las empresas que emplean minería de datos ven rápidamente el retorno de la inversión, pero también reconocen que el número de modelos predictivos desarrollados puede crecer muy rápidamente. En lugar de crear modelos para predecir qué clientes pueden cambiar, la empresa podría construir modelos separados para cada región y/o para cada tipo de cliente. También puede querer determinar qué clientes van a ser rentables durante una ventana de tiempo (una quincena, un mes,...) y sólo enviar las ofertas a las personas que es probable que sean rentables. Para mantener esta cantidad de modelos, es necesario gestionar las versiones de cada modelo y pasar a una minería de datos lo más automatizada posible.  Hábitos de compra en supermercados .- El ejemplo clásico de aplicación de la minería de datos tiene que ver con la detección de hábitos de compra en supermercados. Un estudio muy citado detectó que los viernes había una cantidad inusualmente elevada de clientes que adquirían a la vez pañales y cerveza. Se detectó que se debía a que dicho día solían acudir Página 33 de 57

al supermercado padres jóvenes cuya perspectiva para el fin de semana consistía en quedarse en casa cuidando de su hijo y viendo la televisión con una cerveza en la mano. El supermercado pudo incrementar sus ventas de cerveza colocándolas próximas a los pañales para fomentar las ventas compulsivas.  Patrones de fuga.- Un ejemplo más habitual es el de la detección de patrones de fuga. En muchas industrias —como la banca, las telecomunicaciones, etc. — existe un comprensible interés en detectar cuanto antes aquellos clientes que puedan estar pensando en rescindir sus contratos para, posiblemente, pasarse a la competencia. A estos clientes —y en función de su valor— se les podrían hacer ofertas per sonalizadas, ofrecer promociones especiales, etc., con el objetivo último de retenerlos. La minería de datos ayuda a determinar qué clientes son los más proclives a darse de baja estudiando sus patrones de comportamiento y comparándolos con muestras de cli entes que, efectivamente, se dieron de baja en el pasado.  Fraudes.- Un caso análogo es el de la detección de transacciones de lavado de dinero o de fraude en el uso de tarjetas de crédito o de servicios de telefonía móvil e, incluso, en la relación de los contribuyentes con el fisco. Generalmente, estas operaciones fraudulentas o ilegales suelen seguir patrones característicos que permiten, con cierto grado de probabilidad, distinguirlas de las legítimas y desarrollar así mecanismos para tomar medidas rápidas frente a ellas.  Recursos humanos.- La minería de datos también puede ser útil para los departamentos de recursos humanos en la identificación de las características de sus empleados de mayor éxito. La información obtenida puede ayudar a la contratació n de personal, centrándose en los esfuerzos de sus empleados y los resultados obtenidos por éstos. Además, la ayuda ofrecida por las aplicaciones para Dirección estratégica en una empresa se traducen en la obtención de ventajas a nivel corporativo, tales como mejorar el margen de beneficios o compartir objetivos; y en la mejora de las decisiones operativas, tales como desarrollo de planes de producción o gestión de mano de obra.  Comportamiento en Internet.- También es un área en boga el del análisis del comportamiento de los visitantes —sobre todo, cuando son clientes potenciales— en una página de Internet. O la utilización de la información —obtenida por medios más o menos legítimos— sobre ellos para ofrecerles propaganda

Página 34 de 57

adaptada específicamente a su perfil. O para, una vez que adquieren un determinado producto, saber inmediatamente qué otro ofrecerle teniendo en cuenta la información histórica disponible acerca de los clientes que han comprado el primero .  Terrorismo.- La minería de datos ha sido citada como el método por el cual la unidad Able Danger del Ejército de los EE. UU. Había identificado al líder de los atentados del 11 de septiembre de 2001, Mohammed Atta, y a otros tres secuestradores del "11-S" como posibles miembros de una célula de Al Qaeda que operan en los EE. UU. Más de un año antes del ataque. Se ha sugerido que tanto la Agencia Central de Inteligencia y sus homóloga canadiense, Servicio de Inteligencia y Seguridad Canadiense, también han empleado este método.  Juegos.- Desde comienzos de la década de 1960, con la disponibilidad de oráculos para determinados juegos combinacionales, también llamados finales de juego de tablero (por ejemplo, para las tres en raya o en finales de ajedrez) con cualquier configuración de inicio, se ha abierto una nueva área en la minería de datos que consiste en la extracción de estrategias utilizadas por personas para estos oráculos. Los planteamientos actuales sobre reconocimiento de patrones, no parecen poder aplicarse con éxito al funcionamiento de estos oráculos. En su lugar, la producción de patrones perspicaces se basa en una amplia experimentación con bases de datos sobre esos finales de juego, combinado con un estudio intensivo de los propios finales de juego en problemas bien diseñados y con conocimiento de la técnica (datos previos sobre el final del juego). Ejemplos notables de investigadores que trabajan en este campo son Berlekamp en el juego de puntos -y-cajas (o Timbiriche) y John Nunn en finales de ajedrez.  Genética.- En el estudio de la genética humana, el objetivo principal es entender la relación cartográfica entre las partes y la variación individual en las secuencias del ADN humano y la variabilidad en la susceptibilidad a las enfermedades. En términos más llanos, se trata de saber cómo los cambios en la secuencia de ADN de un individuo afectan al riesgo de desarrollar enfermedades comunes (como por ejemplo el cáncer). Esto es muy importante para ayudar a mejorar el diagnóstico, prevención y trat amiento de las enfermedades. La técnica de minería de datos que se utiliza para realizar esta tarea se conoce como "reducción de dimensionalidad multifactorial"

Página 35 de 57

 Ingeniería eléctrica.- En el ámbito de la ingeniería eléctrica, las técnicas minería de datos han sido ampliamente utilizadas para monitorizar las condiciones de las instalaciones de alta tensión. La finalidad de esta monitorización es obtener información valiosa sobre el estado del aislamiento de los equipos. Para la vigilancia de las vibraciones o el análisis de los cambios de carga en transformadores se utilizan ciertas técnicas para agrupación de datos (clustering) tales como los Mapas Auto-Organizativos (SOM, Self-organizing map). Estos mapas sirven para detectar condiciones anormales y para estimar la naturaleza de dichas anomalías.

2.6 Sistemas concurrentes, paralelos y distribuidos 2.6.1 Programación concurrente La computación concurrente es la simultaneidad en la ejecución de múltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en una sola unidad central de proceso (multiprogramación), en varios procesadores o en una red de computadores distribuidos. La programación concurrente está relacionada con la programación paralela, pero enfatiza más la interacción entre tareas. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina. Los pioneros en este campo fueron Edsger Dijkstra, Per Brinch Hansen, y C. A. R. Hoare.

2.6.2 Redes de computadoras Una red de computadoras, también llamada red de ordenadores, red de comunicaciones de datos o red informática, es un conjunto de equipos informáticos y software conectados entre sí por medio de dispositivos físicos que envían y reciben impulsos eléctricos, ondas electromagnéticas o cualquier otro medio para el transporte de datos, con la finalidad de compartir información, recursos y ofrecer servicios.1 Como en todo proceso de comunicación se requiere de un emisor, un mensaje, un medio y un receptor. La finalidad principal para la creación de una red de computadoras es compartir los recursos y la información en la distancia, asegurar la confiabilidad y la disponibilidad de la información, aumentar la velocidad de transmisión de los datos y reducir el costo general de estas acciones.2 Un ejemplo es Internet, la cual es una gran red de millones de computadoras ubicadas en distintos puntos del planeta interconectadas básicamente para compartir información y recursos. La estructura y el modo de funcionamiento de las redes informáticas actuales están definidos en varios estándares, siendo el más importante y extendido de todos ellos el modelo TCP/IP basado en el modelo de referencia OSI. Este

Página 36 de 57

último, estructura cada red en siete capas con funciones concretas pero relacionadas entre sí; en TCP/IP se reducen a cuatro capas. Existen multitud de protocolos repartidos por cada capa, los cuales también están regidos por sus respectivos estándares.3

2.6.2.1 Software Sistema operativo de red: permite la interconexión de ordenadores para poder acceder a los servicios y recursos. Al igual que un equipo no puede trabajar sin un sistema operativo, una red de equipos no puede funcionar sin un sistema operativo de red. En muchos casos el sistema operativo de red es parte del sistema operativo de los servidores y de los clientes, por ejemplo en Linux y Microsoft Windows. Software de aplicación: en última instancia, todos los elementos se utilizan para que el usuario de cada estación, pueda utilizar sus programas y archivos específicos. Este software puede ser tan amplio como se necesite ya que pueda incluir procesadores de texto, paquetes integrados, sistemas administrativos de contabilidad y áreas afines, sistemas especializados, correos electrónicos, etc. El software adecuado en el sistema operativo de red elegido y con los protocolos necesarios permite crear servidores para aquellos servicios que se necesiten.

2.6.2.2 Hardware Para lograr el enlace entre las computadoras y los medios de transmisión (cables de red o medios físicos para redes alámbricas e infrarrojos o radiofrecuencias para redes inalámbricas), es necesaria la intervención de una tarjeta de red, o NIC (Network Card Interface), con la cual se puedan enviar y recibir paquetes de datos desde y hacia otras computadoras, empleando un protocolo para su comunicación y convirtiendo a esos datos a un formato que pueda ser transmitido por el medio (bits, ceros y unos). Cabe señalar que a cada tarjeta de red le es asignado un identificador único por su fabricante, conocido como dirección MAC (Media Access Control), que consta de 48 bits (6 bytes). Dicho identificador permite direccionar el tráfico de datos de la red del emisor al receptor adecuado. El trabajo del adaptador de red es el de convertir las señales eléctricas que viajan por el cable (ej: red Ethernet) o las ondas de radio (ej: red Wi-Fi) en una señal que pueda interpretar el ordenador. Estos adaptadores son unas tarjetas PCI que se conectan en las ranuras de expansión del ordenador. En el caso de ordenadores portátiles, estas tarjetas vienen en formato PCMCIA o similares. En los ordenadores del siglo XXI, tanto de sobremesa como portátiles, estas tarjetas ya vienen integradas en la placa base. Adaptador de red es el nombre genérico que reciben los dispositivos encargados de realizar dicha conversión. Esto significa que estos adaptadores pueden ser tanto Ethernet, como wireless, así como de otros tipos como fibra óptica, coaxial, etc. También las velocidades disponibles varían según el tipo de adaptador; éstas pueden ser, en Ethernet, de 10, 100, 1000 Mbps o 10000, y en los inalámbricos, principalmente, de 11, 54, 300 Mbps.

Página 37 de 57

2.6.3 Cómputo paralelo: Computación paralela

GRAFICO 14: COMPUTO PARALELO La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente.1 Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma paralela (no es lo mismo que concurrente). Existen varios tipos de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. Durante muchos años, la computación paralela se ha aplicado en la computación de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. La computación paralela se ha convertido en el paradigma dominante en la arquitectura de computadores, principalmente en los procesadores multinúcleo.2 Sin embargo, recientemente, el consumo de energía de los ordenadores paralelos se ha convertido en una preocupación.3 Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento en una sola máquina, mientras que los clusters, los MPP y los grids emplean varios ordenadores para trabajar en la misma tarea. Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales4 porque el paralelismo introduce nuevos tipos de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. El incremento de velocidad que consigue un programa como resultado de la paralelización viene dado por la ley de Amdahl.

2.6.4 Sistemas Distribuidos: Computación distribuida La computación distribuida o informática en malla, es un nuevo modelo para resolver problemas de computación masiva utilizando un gran número de ordenadores organizadas en racimos incrustados en una infraestructura de telecomunicaciones distribuida.

Página 38 de 57

2.6.4.1 Sistemas distribuidos Un sistema distribuido se define como: una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones distribuida; cada máquina posee sus componentes de hardware y software que el usuario percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El usuario accede a los recursos remotos (RPC) de la misma manera en que accede a recursos locales, o un grupo de computadores que usan un software para conseguir un objetivo en común. Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone otro componente debe ser capaz de reemplazarlo, esto se denomina tolerancia a fallos. El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), y miles o millones de hosts (Internet); esto se denomina escalabilidad. 1

2.6.4.2 Características  Para cada uno de los usuarios debe ser similar al trabajo en el Sistema Centralizado.  Seguridad interna en el sistema distribuido.  Se ejecuta en múltiples Computadoras.  Tiene varias copias del mismo Sistema Operativo o de diferentes Sistemas Operativos que proveen los mismos servicios.  Entorno de trabajo cómodo.  Dependiente de redes (LAN, MAN, WAN, etc.).  Compatibilidad entre los dispositivos conectados.  Transparencia (El uso de múltiples procesadores y el acceso remoto debe ser invisible).  Interacción entre los equipos.  Diseño de software compatible con varios usuarios y sistemas operativos  vida extraterrestre.

2.6.4.3 Seguridad El punto de la seguridad es delicado en este tipo de computación distribuida pues las conexiones se hacen de forma remota y no local, entonces suelen surgir problemas para controlar el acceso a los otros nodos. Esto puede aprovecharse para un ataque de Dos, aunque la red no va a dejar de funcionar porque uno falle. Esa es una ventaja de este sistema grid.

Página 39 de 57

2.7 Inteligencia Artificial

GRAFICO 15: INTELIGENCIA ARTIFICIAL

2.7.1 Inteligencia artificial En ciencias de la computación se denomina inteligencia artificial (IA) a la capacidad de razonar de un agente no vivo. John McCarthy, acuñó el término en 1956, la definió: "Es la ciencia e ingeniería de hacer máquinas inteligentes, especialmente programas de cómputo inteligentes. Para explicar la definición anterior, entiéndase a un Agente inteligente que permite pensar, evaluar y actuar conforme a ciertos principios de optimización y consistencia, para satisfacer algún objetivo o finalidad. De acuerdo al concepto previo, racionalidad es más general y por ello más adecuado que inteligencia para definir la naturaleza del objetivo de esta disciplina. Con lo cual , y de manera más específica la inteligencia artificial es la disciplina que se encarga de construir procesos que al ser ejecutados sobre una arquitectura física producen acciones o resultados que maximizan una medida de rendimiento determinada, basándose en la secuencia de entradas percibidas y en el conocimiento almacenado en tal arquitectura. Existen distintos tipos de conocimiento y medios de representación del conocimiento, el cual puede ser cargado en el agente por su diseñador o puede ser aprendido por el mismo agente utilizando técnicas de aprendizaje.

Página 40 de 57

También se distinguen varios tipos de procesos válidos para obtener resultados racionales, que determinan el tipo de agente inteligente. De más simples a más complejos, los cinco principales tipos de procesos son: Ejecución de una respuesta predeterminada por cada entrada (análogas a actos reflejos en seres vivos). Búsqueda del estado requerido en el conjunto de los estados producidos por las acciones posibles. Algoritmos genéticos (análogo al proceso de evolución de las cadenas de ADN). Redes neuronales artificiales (análogo al funcionamiento físico del cerebro de animales y humanos). Razonamiento mediante una lógica formal (análogo al pensamiento abstracto humano). También existen distintos tipos de percepciones y acciones, pueden ser obtenidas y producidas, respectivamente por sensores físicos y sensores mecánicos en máquinas, pulsos eléctricos u ópticos en computadoras, tanto como por entradas y salidas de bits de un software y su entorno software. Varios ejemplos se encuentran en el área de control de sistemas, planificación automática, la habilidad de responder a diagnósticos y a consultas de los consumidores, reconocimiento de escritura, reconocimiento del habla y reconocimiento de patrones. Los sistemas de IA actualmente son parte de la rutina en campos como economía, medicina, ingeniería y la milicia, y se ha usado en gran variedad de aplicaciones de software, juegos de estrategia como ajedrez de computador y otros videojuegos.

2.7.2 Categorías de la inteligencia Artificial Entre las distintas categorías que posee la inteligencia artificial destacamos las siguientes:

2.7.2.1 Sistemas que piensan como humanos Estos sistemas tratan de emular el pensamiento humano; por ejemplo las redes neuronales artificiales. La automatización de actividades que vinculamos con procesos de pensamiento humano, actividades como la Toma de decisiones, resolución de problemas, aprendizaje. Sistemas que actúan como humanos.- Estos sistemas tratan de actuar como humanos; es decir, imitan el comportamiento humano; por ejemplo la robótica. El estudio de cómo lograr que los computadores realicen tareas que, por el momento, los humanos hacen mejor.

2.7.2.2 Sistemas que piensan racionalmente Es decir, con lógica (idealmente), tratan de imitar o emular el pensamiento lógico racional del ser humano; por ejemplo los sistemas expertos. El estudio de los cálculos que hacen posible percibir, razonar y actuar. Sistemas que actúan racionalmente (idealmente). – Tratan de emular en forma racional el comportamiento humano; por ejemplo los agentes inteligentes .Está relacionado con conductas inteligentes en artefactos.9

Página 41 de 57

2.7.2.3 Inteligencia artificial computacional La Inteligencia Computacional (también conocida como IA subsimbólicainductiva) implica desarrollo o aprendizaje interactivo (por ejemplo, modificaciones interactivas de los parámetros en sistemas conexionistas). El aprendizaje se realiza basándose en datos empíricos.

2.7.2.4 La inteligencia artificial y los sentimientos El concepto de IA es aún demasiado difuso. Contextualizando, y teniendo en cuenta un punto de vista científico, podríamos englobar a esta ciencia como la encargada de imitar una persona, y no su cuerpo, sino imitar al cerebro, en todas sus funciones, existentes en el humano o inventadas sobre el desarrollo de una máquina inteligente. A veces, aplicando la definición de Inteligencia Artificial, se piensa en máquinas inteligentes sin sentimientos, que «obstaculizan» encontrar la mejor solución a un problema dado. Muchos pensamos en dispositivos artificiales capaces de concluir miles de premisas a partir de otras premisas dadas, sin que ningún tipo de emoción tenga la opción de obstaculizar dicha labor. En esta línea, hay que saber que ya existen sistemas inteligentes. Capaces de tomar decisiones «acertadas». Aunque, por el momento, la mayoría de los investigadores en el ámbito de la Inteligencia Artificial se centran sólo en el aspecto racional, muchos de ellos consideran seriamente la posibilidad de incorporar componentes «emotivos» como indicadores de estado, a fin de aumentar la eficacia de los sistemas inteligentes. Particularmente para los robots móviles, es necesario que cuenten con algo similar a las emociones con el objeto de saber –en cada instante y como mínimo– qué hacer a continuación [Pinker, 2001, p. 481]. Al tener «sentimientos» y, al menos potencialmente, «motivaciones», podrán actuar de acuerdo con sus «intenciones» [Mazlish, 1995, p. 318]. Así, se podría equipar a un robot con dispositivos que controlen su medio interno; por ejemplo, que «sientan hambre» al detectar que su nivel de energía está descendiendo o que «sientan miedo» cuando aquel esté demasiado bajo. Esta señal podría interrumpir los procesos de alto nivel y obligar al robot a conseguir el preciado elemento [Johnson-Laird, 1993, p. 359]. Incluso se podría introducir el «dolor» o el «sufrimiento físico», a fin de evitar las torpezas de funcionamiento como, por ejemplo, introducir la mano dentro de una cadena de engranajes o saltar desde una cierta altura, lo cual le provocaría daños irreparables. Esto significa que los sistemas inteligentes deben ser dotados con mecanismos de retroalimentación que les permitan tener conocimiento de estados internos, igual que sucede con los humanos que disponen de propiocepción, intercepción, nocicepción, etcétera. Esto es fundamental tanto para tomar decisiones como para conservar su propia integridad y seguridad. La retroalimentación en sistemas está particularmente desarrollada en cibernética, por ejemplo en el cambio de dirección y velocidad autónomo de un misil, utilizando como parámetro la posición en cada instante en relación al objetivo que debe alcanzar. Esto debe ser diferenciado del conocimiento que un sistema o programa

Página 42 de 57

computacional puede tener de sus estados internos, por ejemplo la cantidad de ciclos cumplidos en un loop o bucle en sentencias tipo do... for, o la cantidad de memoria disponible para una operación determinada. A los sistemas inteligentes el no tener en cuenta elementos emocionales les permite no olvidar la meta que deben alcanzar. En los humanos el olvido de la meta o el abandonar las metas por perturbaciones emocionales es un problema que en algunos casos llega a ser incapacitante. Los sistemas inteligentes, al combinar una memoria durable, una asignación de metas o motivación, junto a la toma de decisiones y asignación de prioridades con base en estados actuales y estados meta, logran un comportamiento en extremo eficiente, especialmente ante problemas complejos y peligrosos. En síntesis, lo racional y lo emocional están de tal manera interrelacionados entre sí, que se podría decir que no sólo no son aspectos contradictorios sino que son –hasta cierto punto– complementarios.

2.7.2.5 Aplicaciones de la inteligencia artificial              

Lingüística computacional Minería de datos (Data Mining) Industriales. Medicina Mundos virtuales Procesamiento de lenguaje natural (Natural Language Processing) Robótica Mecatrónica Sistemas de apoyo a la decisión Videojuegos Prototipos informáticos Análisis de sistemas dinámicos. Smart Process Management Simulación de multitudes

2.7.2 Razonamiento automatizado El razonamiento automatizado (o razonamiento automático) es un área de las ciencias de la computación dedicado a comprender diferentes aspectos del razonamiento de forma que permita la creación de programas con el objeto de permitir a los ordenadores razonar de forma autónoma o casi autónoma. Como tal, está considerado como un subcampo de la inteligencia artificial, pero tiene, también, conexiones con la ciencia computacional teórica e incluso filosofía. Sus siglas en inglés son AR, del término Automated reasoning. Las sub-áreas más destacadas del razonamiento automático son, probablemente, la demostración automática de teoremas (y la menos automatizada, pero más pragmática demostración interactiva de teoremas) y la comprobación automatizada de pruebas (considerada como razonamiento correcto garantizado bajo condiciones fijas), pero se ha desarrollado también un trabajo extenso en el razonamiento por analogía, inducción y abducción. Otros Página 43 de 57

temas importantes son el razonamiento con incertidumbre y razonamiento no monótono.

2.7.3 Robótica La robótica es la rama de la tecnología diferenciada de la telecomunicación (cuya función es cubrir todas las formas de comunicación a distancia) que se dedica al diseño, construcción, operación, disposición estructural, manufactura y aplicación de los robots. La robótica combina diversas disciplinas como son: la mecánica, la electrónica, la informática, la inteligencia artificial y la ingeniería de control.3 Otras áreas importantes en robótica son el álgebra, los autómatas programables y las máquinas de estados. El término robot se popularizó con el éxito de la obra RUR (Robots Universales Rossum), escrita por Karel Capek en 1920. En la traducción al inglés de dicha obra, la palabra checa robota, que significa trabajos forzados, fue traducida al inglés como robot.

2.7.4 Visión por computador La visión artificial, también conocida como visión por computador (del inglés computer vision) o visión técnica, es un subcampo de la inteligencia artificial. El propósito de la visión artificial es programar un computador para que "entienda" una escena o las características de una imagen. Cuando la retina está dañada o no funciona bien, los fotorreceptores dejan de funcionar, pero eso no quiere decir que toda la estructura del sistema visual humano no pueda seguir funcionando. Por ello, algunos científicos están desarrollando microchips de silicio que puedan dotar de visión artificial a aquellas personas a quienes no les funcionan los fotorreceptores. Como ya sabemos, la información captada por los fotorreceptores se transmite a las células ganglionales, donde se interpreta y se manda al cerebro a través del nervio óptico. Existen enfermedades que afectan a estas células como la tetignosis pigmentaria o la DMAE, que dejan inoperativos los fotorreceptores pero no dañan las células ganglionales o el nervio óptico, con lo cual el problema no es que la información no puede llegar al cerebro, sino que no se puede captar. En estos casos se pueden desarrollar unos conos y bastones artificiales. Los requisitos de los microchips para que cumplan la función de los fotorreceptores son: Que sean lo suficientemente pequeños como para implantarlos en el ojo. Que tengan una fuente de abastecimiento de energía continua. Que no causen rechazo, es decir, que sean biocompatibles con los tejidos del ojo. Uno de los micros que se ha desarrollado con éxito por el momento es un dispositivo de 2 mm de diámetro y tan delgado como un cabello humano. Contiene 3,500 células solares microscópicas que imitan a los bastones y los conos y convierten la luz en impulsos eléctricos. Se abastece de energía solar, con lo que se evitan cables y baterías.

Página 44 de 57

2.7.4.1 Producción de la imagen digital en microscopía óptica La digitalización de una imagen electrónica o de video capturada por un microscopio óptico permite obtener un incremento espectacular en las posibilidades de ampliar características, extraer información o modificar la imagen. En comparación con el mecanismo tradicional de captura de imágenes, la fotomicrografía en película, la digitalización de la imagen y el proceso de postadquisición/recuperación permiten una modificación reversible de la imagen como matriz ordenada de enteros fundamentalmente libre de ruido, más que una mera serie de variaciones análogas en color e intensidad. Esta sección trata sobre diversos temas de actualidad acerca de la adquisición y procesamiento de imágenes para microscopía óptica.

2.7.4.2 Propiedades básicas de las imágenes digitales Las imágenes de señal continua se reproducen mediante dispositivos electrónicos analógicos que registran los datos de la imagen con precisión utilizando varios métodos, como una secuencia de fluctuaciones de la señal eléctrica o cambios en la naturaleza química de la emulsión de una película, que varían continuamente en los diferentes aspectos de la imagen. Para procesar o visualizar en el ordenador una señal continua o una imagen analógica, se debe convertir primero a un formato comprensible para el ordenador o formato digital. Este proceso se aplica a todas las imágenes, independientemente de su origen, de su complejidad y de si son en blanco y negro (escala de grises) o a todo color. Una imagen digital se compone de una matriz rectangular (o cuadrada) de píxeles que representan una serie de valores de intensidad ordenados en un sistema de coordenadas (x, y).

2.7.4.3 Introducción a los sensores de imagen CMOS Los sensores de imagen CMOS se han diseñado con la capacidad para integrar un número de funciones de procesamiento y control directamente en el circuito integrado del sensor, lo que se extiende más allá de la tarea fundamental de recopilación de fotones. Estos nuevos aspectos incluyen generalmente lógica temporal, control de exposición, conversión de analógico a digital, obturación, balance de blancos, ajuste del aumento y algoritmos de procesamiento inicial de la imagen. Se están introduciendo sensores de imagen CMOS económicos en el campo de la microscopía óptica en instrumentos para fines educativos que combinan una calidad óptica aceptable con paquetes de software de control e imagen fáciles de usar.

2.7.4.4 Estrategias recomendadas para el procesamiento de imágenes digitales Dependiendo de las condiciones de iluminación, la integridad de la muestra y los métodos de preparación, las imágenes capturadas con el microscopio óptico pueden requerir una cantidad considerable de rehabilitación/reinserción/renovación para conseguir un equilibrio entre Página 45 de 57

precisión científica y composición estética. Las imágenes digitales que se obtienen mediante un CCD (charge-coupled device) o un CMOS (complementary metal oxide semiconductor) a menudo presentan señales a ruido pobres, iluminación irregular, impurezas de enfoque, deslumbramiento, cambios en los colores y otros problemas que distorsionan la calidad global de la imagen.

2.7.5 Aprendizaje Automático El Aprendizaje Automático o Aprendizaje de Máquinas es una rama de la Inteligencia Artificial cuyo objetivo es desarrollar técnicas que permitan a las computadoras aprender. De forma más concreta, se trata de crear programas capaces de generalizar comportamientos a partir de una información no estructurada suministrada en forma de ejemplos. Es, por lo tanto, un proceso de inducción del conocimiento. En muchas ocasiones el campo de actuación del Aprendizaje Automático se solapa con el de la Estadística, ya que las dos disciplinas se basan en el análisis de datos. Sin embargo, el Aprendizaje Automático se centra más en el estudio de la Complejidad Computacional de los problemas. Muchos problemas son de clase NP-hard, por lo que gran parte de la investigación realizada en Aprendizaje Automático está enfocada al diseño de soluciones factibles a esos problemas. El Aprendizaje Automático puede ser visto como un intento de automatizar algunas partes del Método Científico mediante métodos matemáticos. El Aprendizaje Automático tiene una amplia gama de aplicaciones, incluyendo motores de búsqueda, diagnósticos médicos, detección de fraude en el uso de tarjetas de crédito, análisis del mercado de valores, clasificación de secuencias de ADN, reconocimiento del habla y del lenguaje escrito, juegos y robótica.

2.7.5.1 Interacción Hombre-Máquina Algunos sistemas de Aprendizaje Automático intentan eliminar toda necesidad de intuición o conocimiento experto de los procesos de análisis de datos, mientras otros tratan de establecer un marco de colaboración entre el experto y la computadora. De todas formas, la intuición humana no puede ser reemplazada en su totalidad, ya que el diseñador del sistema ha de especificar la forma de representación de los datos y los métodos de manipulación y caracterización de los mismos.

2.7.5.2 Tipos de algoritmos Los diferentes algoritmos de Aprendizaje Automático se agrupan en una taxonomía en función de la salida de los mismos. Algunos tipos de algoritmos son:  Aprendizaje supervisado.- El algoritmo produce una función que establece una correspondencia entre las entradas y las salidas deseadas del sistema. Un ejemplo de este tipo de algoritmo es el problema de clasificación, donde el sistema de aprendizaje trata de etiquetar (clasificar) una serie de vectores utilizando una entre varias categorías (clases). La base de

Página 46 de 57

conocimiento del sistema está formada por ejemplos de etiquetados anteriores. Este tipo de aprendizaje puede llegar a ser muy útil en problemas de investigación biológica, biología computacional y bioinformática.  Aprendizaje no supervisado.- Todo el proceso de modelado se lleva a cabo sobre un conjunto de ejemplos formado tan sólo por entradas al sistema. No se tiene información sobre las categorías de esos ejemplos. Por lo tanto, en este caso, el sistema tiene que ser capaz de reconocer patrones para poder etiquetar las nuevas entradas.  Aprendizaje semisupervisado.- Este tipo de algoritmos combinan los dos algoritmos anteriores para poder clasificar de manera adecuada. Se tiene en cuenta los datos marcados y los no marcados.

 Aprendizaje por refuerzo.- El algoritmo aprende observando el mundo que le rodea. Su información de entrada es el feedback o retroalimentación que obtiene del mundo exterior como respuesta a sus acciones. Por lo tanto, el sistema aprende a base de ensayo-error.  Transducción.- Similar al aprendizaje supervisado, pero no construye de forma explícita una función. Trata de predecir las categorías de los futuros ejemplos basándose en los ejempl os de entrada, sus respectivas categorías y los ejemplos nuevos al sistema.  Aprendizaje multi-tarea.- Métodos de aprendizaje que usan conocimiento previamente aprendido por el sistema de cara a enfrentarse a problemas parecidos a los ya vistos. El análisis computacional y de rendimiento de los algoritmos de aprendizaje automático es una rama de la estadística conocida como teoría computacional del aprendizaje.  Aprendizaje Automático.- El aprendizaje automático nosotros lo llevamos a cabo de manera automática ya que es un proceso tan sencillo para nosotros que ni cuenta nos damos de cómo se realiza y todo lo que esto implica. Desde que nacemos hasta que morimos los seres humanos tenemos diferentes procesos entre ellos encontramos el de aprendizaje por medio del cual adquirimos conocimientos, desarrollamos habilidades para analizar y evaluar a través de métodos y técnicas así como también por medio de la experiencia propia, pero a las máquinas

Página 47 de 57

hay que indicarles cómo aprender, ya que si no se logra que una máquina sea capaz de desarrollar sus habilidades entonces el proceso de aprendizaje no se estará llevando a cabo, sino que solo será una secuencia repetitiva. También debemos tener en cuenta que el tener conocimiento o el hecho de realizar bien el proceso de aprendizaje automático no implica que se sepa utilizar, es preciso saber aplicarlo en las actividades cotidianas y un buen aprendizaje también implica saber cómo y cuándo utilizar nuestros conocimientos. Para llevar acabo un buen aprendizaje es necesario tener considerar todos los factores que a este le rodean como, la sociedad, la economía, la ciudad, el ambiente, el lugar, etc. Por lo cual es necesario empezar a tomar diversas medidas para lograr un aprendizaje adecuado, y obtener una automatización adecuada del aprendizaje, por lo cual lo primero que se debe tener en cuenta es el concepto de conocimiento, el cual es el entendimiento de un determinado tema o materia en el cual tu puedas dar tu opinión o punto de vista así como también responder a ciertas interrogantes que puedan surgir de dicho tema o materia. En el aprendizaje automático podemos obtener 3 tipos de conocimiento los cuáles son: 1. Crecimiento: Es el que se adquiere de lo que nos rodea, el cual guarda la información en la memoria como si dejara huellas. 2. Reestructuración: Al interpretar los conocimientos el individuo razona y genera nuevo conocimiento al cual se le llama de reestructuración. 3. Ajuste: Es el que se obtiene al generalizar varios conceptos o generando los propios. Los tres tipos se efectúan durante un proceso de aprendizaje automático pero la importancia de cada tipo de conocimiento depende de las características de lo que se está tratando de aprender. El aprendizaje es más que una necesidad, es un factor primordial para satisfacer las necesidades de la inteligencia artificial.

2.7.5.3 Aplicaciones       

Motores de búsqueda Diagnóstico médico Detección de fraudes con el uso de tarjetas de crédito Análisis del mercado de valores Clasificación de secuencias de ADN Reconocimiento del habla Robótica

Página 48 de 57

2.8 Gráficos por computador

GRAFICO 16: IMAGEN DIGITAL

2.8.1 Computación Grafica Una proyección 2D de una proyección 3D de un Pentácoron (4D) haciendo doble rotación con dos de sus planos ortogonales. La computación gráfica o gráficos por ordenador es el campo de la informática visual, donde se utilizan computadoras tanto para generar imágenes visuales sintéticamente como integrar o cambiar la información visual y espacial probada del mundo real. El primer mayor avance en la gráfica realizada por computadora era el desarrollo de Sketchpad en 1962 por Ivan Sutherland. Este campo puede ser dividido en varias áreas: Interpretado 3D en tiempo real (a menudo usado en juegos de vídeo), animación de computadora, captura de vídeo y creación de vídeo interpretado, edición de efectos especiales (a menudo usado para películas y televisión), edición de imagen, y modelado (a menudo usado para ingeniería y objetivos médicos). El desarrollo en la gráfica realizada por computadora fue primero alimentado por intereses académicos y patrocinio del gobierno. Sin embargo, cuando las aplicaciones verdaderas mundiales de la gráfica realizada por computadora (CG) en televisión y películas demostraron una alternativa viable a efectos especiales más a las tradicionales y las técnicas de animación, los comerciales han financiado cada vez más el avance de este campo. A menudo se piensa que la primera película para usar gráficos realizados por computadora era 2001: A Space Odyssey (1968), que intentó mostrar como las computadoras serían mucho más gráficas en el futuro. Sin embargo, todos los gráficos de computadora en aquella película eran la animación dibujada a mano (por ejemplo en las pantallas de televisión se simulaba el comportamiento de las computadoras con dibujos), y las secuencias de efectos especiales fue producida completamente con efectos ópticos y modelos convencionales.

Página 49 de 57

Quizás el primer uso de la gráfica realizada por computadora expresamente para ilustrar gráfica realizada por computadora estaba en Futureworld (1976), que incluyó una animación de una cara humana y mano - producido por Ed Catmull y Fred Parke en la Universidad de Utah.

2.8.1.1 Gráficos 2D de computadora El primer avance en la computación gráfica fue la utilización del tubo de rayos catódicos. Hay dos acercamientos a la gráfica 2d: vector y gráficos raster. La gráfica de vector almacena datos geométricos precisos, topología y estilo como posiciones de coordenada de puntos, las uniones entre puntos (para formar líneas o trayectos) y el color, el grosor y posible relleno de las formas. La mayor parte de los sistemas de vectores gráficos también pueden usar primitivas geométricas de forma estándar como círculos y rectángulos etc. En la mayor parte de casos una imagen de vectores tiene que ser convertida a una imagen de trama o raster para ser vista. Los gráficos de tramas o raster (llamados comúnmente Mapa de bits) es una rejilla bidimensional uniforme de pixeles. Cada pixel tiene un valor específico como por ejemplo brillo, transparencia en color o una combinación de tales valores. Una imagen de trama tiene una resolución finita de un número específico de filas y columnas. Las demostraciones de computadora estándares muestran una imagen de trama de resoluciones como 1280 (columnas) x 1024 (filas) pixeles. Hoy uno a menudo combina la trama y lo gráficos vectorizados en formatos de archivo compuestos (pdf, swf, svg).

2.8.1.2 Gráficos 3D de computadora Con el nacimiento de las estaciones de trabjy789pfajo (como las máquinas LISP, Paintbox computers y estaciones de trabajo Silicon Graphics) llegaron los gráficos 3D, basados en la gráfica de vectores. En vez de que la computadora almacene la información sobre puntos, líneas y curvas en un plano bidimensionales, la computadora almacena la posición de puntos, líneas y típicas caras (para construir un polígono) en un Espacio de tres dimensiones. Los polígonos tridimensionales son la sangre de prácticamente todos los gráficos 3d realizados en computadora. Como consiguiente, la mayoría de los motores de gráficos de 3D están basados en el almacenaje de puntos (por medio de 3 simples coordenadas Dimensionales X,Y,Z), líneas que conectan aquellos grupos de puntos, las caras son definidas por las líneas, y luego una secuencia de caras crean los polígonos tridimensionales. El software actual para generación de gráficos va más lejos de sólo el almacenaje de polígonos en la memoria de computadora. Las gráficas de hoy no son el producto de colecciones masivas de polígonos en formas reconocibles, ellas también resultan de técnicas en el empleo de Shading (Sombreadores), texturing (Texturizado o mapeado) y la rasterización (En referencia a mapas de bits).

Página 50 de 57

2.8.1.3 Representación basada en Imagen - Image Based Rendering (IBR) La computación gráfica permite la obtención imágenes 2D desde modelos tridimensionales. A fin de hacerse muy exacto y obtener imágenes foto realista, la entrada de los modelos 3D debería ser muy exacta en términos de geometría y colores. La simulación de paisajes y escenas fotorealilstas que utilicen esta técnica requiere un gran esfuerzo y talento con programas de CAD. En vez de obtener modelos 3D, Las representaciones basadas en imagen (IBR) usan imágenes tomadas de puntos de vista particulares y trata de obtener nuevas imágenes de otros puntos de vista. Aunque el término Representación basada en Imagen fue acuñado recientemente, aunque en la práctica se usó desde el inicio de la investigación en la Visión obtenida por Computadora. En 1996, se hicieron muy populares dos técnicas: los campos de luz (lightfield en inglés) y el lumigraph (que no tiene traducción asentada en español). Estas técnicas recibieron la atención especial de la comunidad de investigación. Desde entonces, muchas representaciones para IBR fueron propuestas. Un método popular es las texturas dependientes del punto de vista, una técnica IBR de la Universidad del Sur de California. La Universidad de Oxford usó conceptos de la "Máquina de Aprendizaje" para IBR. Sombreador: generalmente se le aplica a los materiales en todo sistema de simulación 3d, se les conoce también como shader. Sombreado Flat (plano): una técnica que sombrea cada polígono de un objeto basándose en su vector normal (dirección hacia la que apunta un polígono) y la posición e intensidad de una fuente de la luz. Sombreado de Gouraud: Inventado por Henri Gouraud en 1971, una técnica rápida y consciente de los recursos disponibles en una computadora, solía simular superficies suavemente sombreadas interpolando colores de vértice a través de la superficie de un polígono. Mapeo de texturas (Correlación de textura): una técnica para simular detalle superficial trazando un mapa de imágenes (texturas) en polígonos. Sombreado de Phong: Inventado por Bui Tuong Phong, una técnica de sombreado lisa que se acerca la superficie curva iluminada por la interpolación de los vértices normales de un polígono a través de la superficie; el modelo iluminado incluye la reflexión de brillo con un nivel controlable del mismo. Bump mapping (Correlación de relieve): Inventado por Jim Blinn, una técnica de perturbación normal (la dirección hacia donde apunta un polígono) solía simular superficies desiguales o arrugadas y con relieve. Ray Tracing (Trazador de rayos): un método basado en los principios físicos de la óptica geométrica que puede simular reflexiones múltiples y la transparencia. Radiosidad: una técnica para la iluminación global que usa la teoría de transferencia de radiación para simular la iluminación (reflejada) indirecta en escenas con superficies difusas. Blob: una técnica para representar superficies sin especificar una representación divisoria difícil, por lo general puesta en práctica como una superficie procesal como una Van der Waals equipotential (en química).

Página 51 de 57

2.8.2 Procesamiento digital de imágenes El procesamiento digital de imágenes es el conjunto de técnicas que se aplican a las imágenes digitales con el objetivo de mejorar la calidad o facilitar la búsqueda de información.

GRAFICO 17: PROCESO DIGITAL DE IMAGEN

2.8.2.1 Proceso de filtrado Es el conjunto de técnicas englobadas dentro del pre procesamiento de imágenes cuyo objetivo fundamental es obtener, a partir de una imagen origen, otra final cuyo resultado sea más adecuado para una aplicación específica mejorando ciertas características de la misma que posibilite efectuar operaciones del procesado sobre ella.

Página 52 de 57

2.8.2.2 Objetivos Los principales objetivos que se persiguen con la aplicación de filtros son: Suavizar la imagen: reducir la cantidad de variaciones de intensidad entre píxeles vecinos. Eliminar ruido: eliminar aquellos píxeles cuyo nivel de intensidad es muy diferente al de sus vecinos y cuyo origen puede estar tanto en el proceso de adquisición de la imagen como en el de transmisión. Realzar bordes: destacar los bordes que se localizan en una imagen. Detectar bordes: detectar los píxeles donde se produce un cambio brusco en la función intensidad. Por tanto, se consideran los filtros como operaciones que se aplican a los píxeles de una imagen digital para optimizarla, enfatizar cierta información o conseguir un efecto especial en ella.

2.8.2.3 Ventajas  Método simple y sencillo de implementar.  Fácil asociación del concepto de frecuencia con ciertas características de la imagen; cambios de tonalidad suaves implican frecuencias bajas y cambios bruscos frecuencias altas.  Proporciona flexibilidad en el diseño de soluciones de filtrado.  Rapidez en el filtrado al utilizar el Teorema de la Convolución.

2.8.2.4 Desventajas  

Se necesitan conocimientos en varios campos para desarrollar una aplicación para el procesamiento de imágenes. El ruido no puede ser eliminado completamente.

2.8.3 Geometría Computacional Por ejemplo algoritmos veloces para seleccionar sólo los puntos visibles en un poliedro visto desde cierto ángulo, usado en motores 3D

Página 53 de 57

2.9 Computación científica 2.9.1 Bioinformática La bioinformática, según una de sus definiciones más sencillas, es la aplicación de tecnología de computadores a la gestión y análisis de datos biológicos. Los términos bioinformática, biología computacional y, en ocasiones, biocomputación, utilizados en muchas situaciones como sinónimos, hacen referencia a campos de estudios interdisciplinares muy vinculados que requieren el uso o el desarrollo de diferentes técnicas estudiadas universitariamente en la Ingeniería Informática como ciencia aplicada de la disciplina informática. Entre estas pueden destarcarse las siguientes: matemática aplicada, estadística, ciencias de la computación, inteligencia artificial, química y bioquímica con las que el Ingeniero Informático soluciona problemas al analizar datos, o simular sistemas o mecanismos, todos ellos de índole biológica, y usualmente (pero no de forma exclusiva) en el nivel molecular. El núcleo principal de estas técnicas se encuentra en la utilización de recursos computacionales para solucionar o investigar problemas sobre escalas de tal magnitud que sobrepasan el discernimiento humano. La investigación en biología computacional se solapa a menudo con la biología de sistemas. Los principales esfuerzos de investigación en estos campos incluyen el alineamiento de secuencias, la predicción de genes, montaje del genoma, alineamiento estructural de proteínas, predicción de estructura de proteínas, predicción de la expresión génica, interacciones proteína-proteína, y modelado de la evolución. Una constante en proyectos de bioinformática y biología computacional es el uso de herramientas matemáticas para extraer información útil de datos producidos por técnicas biológicas de alta productividad, como la secuenciación del genoma. En particular, el montaje o ensamblado de secuencias genómicas de alta calidad desde fragmentos obtenidos tras la secuenciación del ADN a gran escala es un área de alto interés. Otros objetivos incluyen el estudio de la regulación genética para interpretar perfiles de expresión génica utilizando datos de chips de ADN o espectrometría de masas.

GRAFICO 18: BIOINFORMATICA

Página 54 de 57

2.9.2 Computación Cuántica La esfera de Bloch es una representación de un qubit, el bloque de construcción fundamental de los computadores cuánticos. La computación cuántica es un paradigma de computación distinto al de la computación clásica. Se basa en el uso de qubits en lugar de bits, y da lugar a nuevas puertas lógicas que hacen posibles nuevos algoritmos. Una misma tarea puede tener diferente complejidad en computación clásica y en computación cuántica, lo que ha dado lugar a una gran expectación, ya que algunos problemas intratables pasan a ser tratables. Mientras un computador clásico equivale a una máquina de Turing, un computador cuántico equivale a una máquina de Turín cuántica.

GRAFICO 19: COMPUTACION CUANTICA

2.9.2.1 Origen de la computación cuántica A medida que evoluciona la tecnología, aumenta la escala de integración y caben más transistores en el mismo espacio; así se fabrican microchips cada vez más pequeños, y es que, cuanto más pequeño es, mayor velocidad de proceso alcanza el chip. Sin embargo, no podemos hacer los chips infinitamente pequeños. Hay un límite en el cual dejan de funcionar correctamente. Cuando se llega a la escala de nanómetros, los electrones se escapan de los canales por donde deben circular. A esto se le llama efecto túnel. Una partícula clásica, si se encuentra con un obstáculo, no puede atravesarlo y rebota. Pero con los electrones, que son partículas cuánticas y se comportan como ondas, existe la posibilidad de que una parte de ellos pueda atravesar las paredes si son demasiado finas; de esta manera la señal puede pasar por canales donde no debería circular. Por ello, el chip deja de funcionar correctamente. En consecuencia, la computación digital tradicional no tardaría en llegar a su límite, puesto que ya se ha llegado a escalas de sólo algunas decenas de nanómetros. Surge entonces la necesidad de descubrir nuevas tecnologías y es ahí donde entra la computación cuántica en escena. La idea de computación cuántica surge en 1981, cuando Paul Benioff expuso su teoría para aprovechar las leyes cuánticas en el entorno de la computación. En vez de trabajar a nivel de voltajes eléctricos, se trabaja a nivel de cuanto. En la computación digital, un bit sólo puede tomar dos valores: 0 ó 1. En cambio, en Página 55 de 57

la computación cuántica, intervienen las leyes de la mecánica cuántica, y la partícula puede estar en superposición coherente: puede ser 0, 1 y puede ser 0 y 1 a la vez (dos estados ortogonales de una partícula subatómica). Eso permite que se puedan realizar varias operaciones a la vez, según el número de qubits. El número de qubits indica la cantidad de bits que pueden estar en superposición. Con los bits convencionales, si teníamos un registro de tres bits, había ocho valores posibles y el registro sólo podía tomar uno de esos valores. En cambio, si tenemos un vector de tres qubits, la partícula puede tomar ocho valores distintos a la vez gracias a la superposición cuántica. Así, un vector de tres qubits permitiría un total de ocho operaciones paralelas. Como cabe esperar, el número de operaciones es exponencial con respecto al número de qubits. Para hacerse una idea del gran avance, un computador cuántico de 30 qubits equivaldría a un procesador convencional de 10 teraflops (millones de millones de operaciones en coma flotante por segundo), cuando actualmente las computadoras trabajan en el orden de gigaflops (miles de millones de operaciones).

2.9.3 Neurociencia computacional La Neurociencia computacional es una ciencia interdisciplinar que enlaza los diversos campos de la neurociencia, la ciencia cognitiva, la ingeniería eléctrica, las ciencias de la computación, la física y las matemáticas. El término fue introducido por Eric L. Schwartz en una conferencia de 1985 en Carmel, California, a petición de la Systems Development Foundation, para ofrecer un resumen del estado actual de un campo que hasta entonces era nombrado de muy diversas formas: modelado neural, teoría cerebral y redes neurales. Las actas de esta reunión definitoria fueron publicadas más tarde en el libro "Neurociencia Computacional", MIT Press (1990). Las primeras raíces históricas del campo pueden ser rastreadas hasta el trabajo de personas como Hodgkin y Huxley, Hubel y Wiesel, y David Marr, por nombrar unos pocos. Hodgkin y Huxley desarrollaron la pinza de voltaje y crearon el primer modelo matemático del potencial de acción. Hubel y Wiesel descubrieron que las neuronas de la corteza visual primaria, la primera área cortical que procesa información desde la retina, poseían campos receptivos orientados y organizados en columnas (Hubel y Wiesel, 1959). El trabajo de David Marr se centró en las interacciones entre neuronas, sugeriendo un acercamiento computacional al estudio de cómo ciertos grupos funcionales de neuronas en el hipocampo y el neocórtex interactúan, almacenan, procesan y transmiten información. Los modelos computacionales biológicamente realistas de neuronas y dendritas comenzaron con las investigaciones de Wilfrid Rall, y el primer modelo multicompartimental se basó en la teoría de cables. La neurociencia computacional difiere del conexionismo psicológico y de las teorías del aprendizaje de disciplinas como el aprendizaje automático, las redes neurales y la teoría del aprendizaje estadístico en que enfatiza las descripciones funcionales y biológicamente realistas de neuronas (y sistemas neurales), su fisiología y su dinámica. Estos modelos captan las características esenciales del sistema biológico en múltiples escalas espacio-temporales desde las corrientes de membranas, proteínas y acoplamiento químico hasta las oscilaciones de redes, la arquitectura topográfica y de columnas, y el aprendizaje y la memoria. Página 56 de 57

Estos modelos computacionales se usan para probar hipótesis que puedan ser verificadas directamente mediante experimentos biológicos actuales o futuros. En la actualidad, este campo está experimentando una rápida expansión. Existe gran variedad de programas, como el GENESIS o el NEURON, que permiten un veloz y sistemático modelado in silico de neuronas realistas. El proyecto Blue Brain, una colaboración entre IBM y la Escuela Politécnica Federal de Lausanne, pretende construir una simulación biofísica detallada de una columna cortical en el superordenador Blue Gene. Este proyecto internacional tiene un subproyecto Cajal Blue Brain desarrollado en España, coordinado por la Universidad Politécnica de Madrid (Facultad de Informática y CeSViMa) en colaboración con el Instituto Cajal del CSIC.

2.9.3.1 Temas Principales Los desarrollos de la neurociencia computacional se pueden clasificar en varias líneas de investigación. La mayoría de neurocientíficos computacionales se basan en investigaciones experimentales centradas en analizar nuevos datos y sintetizar nuevos modelos de fenómenos biológicos.

2.9.3.2 Comportamiento de las redes Las neuronas biológicas se conectan entre sí de forma compleja y recurrente. A diferencia de la mayoría de redes neurales artificiales, estas conexiones son escasas y suelen ser específicas. Se desconoce cuánta información es transmitida a través de redes tan escasamente conectadas. También se desconoce cuáles son las funciones computacionales de esos patrones de conectividad específica, si es que las hay. Las interacciones entre las neuronas de una red pequeña pueden reducirse a modelos simples como el modelo de Ising. La mecánica estadística de sistemas tan simples es fácil de describir teóricamente. Pruebas recientes [cita requerida] sugieren que la dinámica de redes neuronales arbitrarias puede ser reducida a interacciones de conjuntos (Schneidman et al, 2006; Shlens et al, 2006.) Pero se desconoce si esas descripciones transmiten alguna función computacional importante. El surgimiento del microscopio de dos fotones y la técnica de imagen de calcio permite en la actualidad potentes métodos experimentales con los que poner a prueba las nuevas teorías sobre redes neuronales. Aunque muchos neuro-teóricos se decantan por modelos de complejidad reducida, otros argumentan que descifrar las relaciones de las estructuras funcionales exige incluir tanta estructura neuronal y de redes como sea posible. Los modelos de este tipo suelen ser diseñados en enormes plataformas de simulación como GENESIS o NEURON.2

2

CAPITULO SEGUNDO

Página 57 de 57

CAPITULO 3 3. Relación con otros campos

P

or ser una disciplina reciente, existen varias definiciones alternativas para la ciencia de la computación. Esta puede ser vista como una forma de ciencia, matemáticas o una nueva disciplina que no puede ser categorizada siguiendo los modelos actuales. Las ciencias de la computación frecuentemente se cruzan con otras áreas de investigación, tales como la física y la lingüística. Pero es con las matemáticas con las que se considera que tiene un grado mayor de relación. Eso es evidenciado por el hecho de que los primeros trabajos en el área fueran fuertemente influenciados por matemáticos como Kurt Gödel y Alan Turín. En la actualidad sigue habiendo un intercambio de ideas útil entre ambos campos en áreas como la lógica matemática, la teoría de categorías, la teoría de dominios, el álgebra y la geometría. Otro punto a destacar es que a pesar de su nombre, las ciencias de la computación raramente involucran el estudio mismo de las máquinas conocidas como computadoras. De hecho, el renombrado científico Edsger Dijkstra es muy citado por la frase "Las ciencias de la computación están tan poco relacionadas con las computadoras como la astronomía con los telescopios." Debido a esto, se propuso buscar un nombre definido para esta ciencia emergente, que evitara la relación con las computadoras. Una primera propuesta fue la de Peter Naur, que acuñó el término datología, para reflejar el hecho de que la nueva disciplina se ocupaba fundamentalmente del tratamiento de los datos, independientemente de las herramientas de dicho tratamiento, fueran computadoras o artificios matemáticos. La primera institución científica en adoptar la denominación fue el Departamento de Datología de la Universidad de Copenage, fundado en 1969, siendo el propio Peter Naur el primer profesor de datología. Esta denominación se utiliza principalmente en los países escandinavos. Asimismo, en los primeros momentos, un gran número de términos aparecieron asociados a los practicantes de la computación. En esta lista se pueden ver los sugeridos en las revistas y comunicados de ACM : turingeniero, turologista, hombre de los diagramas de flujo(flow-charts-man), metamatemático aplicado, y epistemólogo aplicado. Tres meses más tarde se sugirió el término contólogo, seguido de hipólogo al año siguiente. También se sugirió el término compútica para la disciplina. Informática era el término más frecuentemente usado en toda Europa. El diseño y desarrollo de computadoras y sistemas computacionales está generalmente considerado como un campo reclamado por disciplinas ajenas a las ciencias de la computación. Por ejemplo, el estudio del hardware está usualmente considerado como parte de la ingeniería informática, mientras que

Página 1 de 1

el estudio de sistemas computacionales comerciales y su desarrollo es usualmente llamado tecnologías de la información (TI) o sistemas de información. Sin embargo, hay una estrecha comunicación de ideas entre las distintas disciplinas relacionadas con las computadoras. La ciencia de la computación a menudo es criticada desde otros estamentos que la consideran escasamente rigurosa y científica. Esta opinión se plasma en la expresión: "La ciencia es a las ciencias de la computación como la hidrodinámica a la fontanería", atribuida a Stan Kelly-Bootle y otros afines. La investigación en ciencias de la computación usualmente también se relaciona con otras disciplinas, como la ciencia cognitiva, la física (véase computación cuántica), la lingüística, etc. La relación entre las ciencias de la computación y la ingeniería de software es un tema muy discutido, por disputas sobre lo que realmente significa el término "ingeniería de software" y sobre cómo se define a las ciencias de la computación. Algunas personas creen que la ingeniería de software sería un subconjunto de las ciencias de la computación. Otras por su parte, tomando en cuenta la relación entre otras disciplinas científicas y de la ingeniería, creen que el principal objetivo de las ciencias de la computación sería estudiar las propiedades del cómputo en general, mientras que el objetivo de la ingeniería de software sería diseñar cómputos específicos para lograr objetivos prácticos, con lo que se convertirían en disciplinas diferentes. Este punto de vista es mantenido, entre otros por (Parnas 1998). Incluso hay otros que sostienen que no podría existir una ingeniería de software. Los aspectos académicos, políticos y de financiación en las áreas de ciencias de la computación tienden a estar drásticamente influenciados por el criterio del departamento encargado de la investigación y la educación en cada universidad, que puede estar orientado a la matemática o a la ingeniería. Los departamentos de ciencias de la computación orientados a la matemática suelen alinearse del lado de la computación científica y las aplicaciones de cálculo numérico. El término computación científica, que no debe confundirse con ciencia de la computación, designa a todas aquellas prácticas destinadas a modelar, plantear experimentos y validar teorías científicas sirviéndose de medios computacionales. En estos casos la computación es una mera herramienta y el esfuerzo se dirige a avanzar en los campos objetivo (física, biología, mecánica de fluidos, radiotransmisión,...) mas que en la propia ciencia de la computación. Finalmente, el público en general algunas veces confunde la ciencia de la computación con áreas vocacionales que trabajan con computadoras, o piensan que trata acerca de su propia experiencia con las computadoras, lo cual típicamente envuelve actividades como los juegos, la navegación web, y el procesamiento de texto. Sin embargo, el punto central de la ciencia de la computación va más allá de entender las propiedades de los programas que se emplean para implementar aplicaciones de software como juegos y navegadores web, y utiliza ese entendimiento para crear nuevos programas o mejorar los existentes.3

3

CAPITULO TERCERO

Página 2 de 2

BIBLIOGRAFIA  Abelson, H. y Sussman, G.J. con Sussman, J. (1996). Structure and Interpretation of Computer Programs, 2nd Ed. EUA: MIT Press. ISBN 0262-01153-0.  Constable, R.L. (1997). "Nature of the Information Sciences".  Constable, R.L. (2000, Marzo). "Computer Science: Achievements and Challenges circa 2000".  Parnas, D.L. (1998). Software Engineering Programmes are not Computer Science Programmes.  Sipser, Michael (2005). Introduction to the Theory of Computation (2 edición). Course Technology. ISBN 978-0534950972.  Kelley, Dean (1995). Teoría de Autómatas y Lenguajes Formales. Prentice Hall. ISBN 978-0-691-13382-9.  Boolos, George; Burgess, John; & Jefrey, Richard (2007). Computability and logic. Cambridge. ISBN 978-0-521-70146-4.  S. Barry Cooper (2004). Computability theory. Chapman & Hall/CRC. ISBN 1-58488-237-9.  Sección 68Qxx, Theory of computing de American Mathematical Society. «2010 Mathematics Subject Classification.». Consultado el 7 de marzo de 2010.

LINKOGRAFIA  http://es.wikipedia.org/wiki/Ciencias_de_la_computaci%C3%B3n  http://es.wikipedia.org/wiki/Criptograf%C3%ADa  http://es.wikipedia.org/wiki/Teor%C3%ADa_de_la_computaci%C3%B3 n

 http://es.wikipedia.org/wiki/An%C3%A1lisis_de_algoritmos  http://es.wikipedia.org/wiki/Bioinform%C3%A1tica

HIPERVINCULOS  TRIPTICO.docx  CIENCIAS DE LA COMPUTACION.pptx

Página 1 de 1