5. Capítulo 1
Algoritmo
La lámpara
no funciona
¿Está
enchufada?
¿Foco
quemado?
Comprar
nueva lámpara
No
Reemplazar
el foco
Enchufarla
Sí
No
Sí
Los diagramas de flujo sirven para representar algoritmos de
manera gráfica.
En matemáticas, lógica, ciencias de la computación y dis-
ciplinas relacionadas, un algoritmo (del griego y latín,
dixit algorithmus y éste a su vez del matemático persa Al-
Juarismi[1]
) es un conjunto prescrito de instrucciones o
reglas bien definidas, ordenadas y finitas que permite rea-
lizar una actividad mediante pasos sucesivos que no gene-
ren dudas a quien deba realizar dicha actividad.[2]
Dados
un estado inicial y una entrada, siguiendo los pasos sucesi-
vos 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 frecuente-
mente 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 multiplicación, para calcular el pro-
ducto, el algoritmo de la división para calcular el cocien-
te 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 de ecuaciones
lineales.
1.1 Definición formal
En general, no existe ningún consenso definitivo en cuan-
to a la definición formal de algoritmo. Muchos autores
los señalan como listas de instrucciones para resolver un
cálculo o un problema abstracto, es decir, que un número
finito de pasos convierten los datos de un problema (en-
trada) en una solución (salida).[1][2][3][4][5][6]
Sin embar-
go 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 Era-
tóstenes que nunca termine de calcular números primos
no deja de ser un algoritmo.[7]
A lo largo de la historia varios autores han tratado de
definir formalmente a los algoritmos utilizando modelos
matemáticos. Esto fue realizado por Alonzo Church en
1936 con el concepto de “calculabilidad efectiva” basa-
da en su cálculo lambda y por Alan Turing basándose en
la máquina de Turing. Los dos enfoques son equivalen-
tes, en el sentido en que se pueden resolver exactamente
los mismos problemas con ambos enfoques.[8][9]
Sin em-
bargo, 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 conside-
remos 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 da-
tos 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
1
6. 2 CAPÍTULO 1. ALGORITMO
independiente de su implementación (los algo-
ritmos 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 es-
tado al siguiente queda completamente deter-
minada por una descripción fija y finita; es de-
cir, 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 funcio-
ne 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 so-
lo 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 Turing (o equivalen-
temente, en un lenguaje de programación suficientemente
general):[10]
Aritmetizabilidad. Solamente operaciones
innegablemente calculables están disponibles
en el paso inicial.
1.2 Medios de expresión de un al-
goritmo
Los algoritmos pueden ser expresados de muchas ma-
neras, 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 re-
presentar algoritmos; no obstante, se mantienen indepen-
dientes de un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres
niveles:
1. Descripción de alto nivel. Se establece el proble-
ma, se selecciona un modelo matemático y se expli-
ca el algoritmo de manera verbal, posiblemente con
ilustraciones y omitiendo detalles.
2. Descripción formal. Se usa pseudocódigo para des-
cribir la secuencia de pasos que encuentran la solu-
ción.
3. Implementación. Se muestra el algoritmo expresa-
do en un lenguaje de programación específico o al-
gún objeto capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que
el algoritmo es correcto, un análisis de complejidad o am-
bos.
1.2.1 Diagrama de flujo
Diagrama de flujo que expresa un algoritmo para calcular la raíz
cuadrada de un número x
Los diagramas de flujo son descripciones gráficas de algo-
ritmos; 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 al-
goritmos 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 aje-
nas a la computación.
1.2.2 Pseudocódigo
El pseudocódigo (falso lenguaje, el prefijo pseudo signifi-
ca 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 progra-
mación, como asignaciones, ciclos y condicionales, aun-
7. 1.3. ALGORITMOS COMO FUNCIONES 3
que 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 algorit-
mos descritos en pseudocódigo requieren menos espacio
para representar instrucciones complejas.
El pseudocódigo está pensado para facilitar a las perso-
nas el entendimiento de un algoritmo, y por lo tanto pue-
de omitir detalles irrelevantes que son necesarios en una
implementación. Programadores diferentes suelen utili-
zar convenciones distintas, que pueden estar basadas en la
sintaxis de lenguajes de programación concretos. Sin em-
bargo, el pseudocódigo, en general, es comprensible sin
necesidad de conocer o utilizar un entorno de programa-
ció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 pseudocódigo cumple con las funciones antes men-
cionadas 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.
1.2.3 Sistemas formales
La teoría de autómatas y la teoría de funciones recur-
sivas proveen modelos matemáticos que formalizan el
concepto de algoritmo. Los modelos más comunes son
la máquina de Turing, 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 independien-
tes de cualquier computadora y de cualquier implemen-
tación.
1.2.4 Implementación
Muchos algoritmos son ideados para implementarse en
un programa. Sin embargo, los algoritmos pueden ser im-
plementados en otros medios, como una red neuronal, un
circuito eléctrico o un aparato mecánico y eléctrico. Al-
gunos algoritmos inclusive se diseñan especialmente para
implementarse usando lápiz y papel. El algoritmo de mul-
tiplicación tradicional, el algoritmo de Euclides, la criba
de Eratóstenes y muchas formas de resolver la raíz cua-
drada son sólo algunos ejemplos.
1.2.5 Variables
Son elementos que toman valores específicos de un tipo
de datos concreto. La declaración de una variable puede
realizarse comenzando con var. Principalmente, existen
dos maneras de otorgar valores iniciales a variables:
1. Mediante una sentencia de asignación.
2. Mediante un procedimiento de entrada de datos (por
ejemplo: 'read').
Ejemplo:
... i:=1; read(n); while i < n do begin (* cuerpo del bucle
*) i := i + 1 end; ...
1.2.6 Estructuras secuenciales
La estructura secuencial es aquella en la que una acción
sigue a otra en secuencia. Las operaciones se suceden de
tal modo que la salida de una es la entrada de la siguiente
y así sucesivamente hasta el fin del proceso. La asignación
de esto consiste, en el paso de valores o resultados a una
zona de la memoria. Dicha zona será reconocida con el
nombre de la variable que recibe el valor. La asignación
se puede clasificar de la siguiente forma:
1. Simples: Consiste en pasar un valor constante a una
variable (a ← 15)
2. Contador: Consiste en usarla como un verificador
del número de veces que se realiza un proceso (a ←
a + 1)
3. Acumulador: Consiste en usarla como un sumador
en un proceso (a ← a + b)
4. De trabajo: Donde puede recibir el resultado de una
operación matemática que involucre muchas varia-
bles (a ← c + b*1/2).
Un ejemplo de estructura secuencial, como obtener el
área de un triángulo:
Inicio ... float b, h, a; printf(“Diga la base”); scanf("%f”,
&b); printf(“Diga la altura”); scanf("%f”, &h); a =
(b*h)/2; printf(“El área del triángulo es %f”, a) ... Fin
1.3 Algoritmos como funciones
Esquemática de un algoritmo solucionando un problema de ciclo
hamiltoniano.
Un algoritmo se puede concebir como una función que
transforma los datos de un problema (entrada) en los da-
tos de una solución (salida). Más aun, los datos se pueden
representar a su vez como secuencias de bits, y en general,
de símbolos cualesquiera.[1][9][11]
Como cada secuencia
de bits representa a un número natural (véase Sistema bi-
nario), entonces los algoritmos son en esencia funciones
de los números naturales en los números naturales que sí
se pueden calcular. Es decir que todo algoritmo calcula
8. 4 CAPÍTULO 1. ALGORITMO
una función f : N → N donde cada número natural es la
codificación de un problema o de una solución.
En ocasiones los algoritmos son susceptibles de nunca ter-
minar, por ejemplo, cuando entran a un bucle infinito.
Cuando esto ocurre, el algoritmo nunca devuelve ningún
valor de salida, y podemos decir que la función queda
indefinida para ese valor de entrada. Por esta razón se
considera que los algoritmos son funciones parciales, es
decir, no necesariamente definidas en todo su dominio de
definición.
Cuando una función puede ser calculada por medios algo-
rítmicos, sin importar la cantidad de memoria que ocu-
pe o el tiempo que se tarde, se dice que dicha función
es computable. No todas las funciones entre secuencias
datos son computables. El problema de la parada es un
ejemplo.
1.4 Análisis de algoritmos
Como medida de la eficiencia de un algoritmo, se suelen
estudiar los recursos (memoria y tiempo) que consume
el algoritmo. El análisis de algoritmos se ha desarrollado
para obtener valores que de alguna forma indiquen (o es-
pecifiquen) la evolución del gasto de tiempo y memoria
en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de
las ciencias de la computación y, en la mayoría de los ca-
sos, su estudio es completamente abstracto sin usar nin-
gún tipo de lenguaje de programación ni cualquier otra
implementación; por eso, en ese sentido, comparte las ca-
racterísticas de las disciplinas matemáticas. Así, el aná-
lisis de los algoritmos se centra en los principios básicos
del algoritmo, no en los de la implementación particular.
Una forma de plasmar (o algunas veces “codificar”) un
algoritmo es escribirlo en pseudocódigo o utilizar un len-
guaje muy simple tal como Lexico, cuyos códigos pueden
estar en el idioma del programador.
Algunos escritores restringen la definición de algoritmo
a procedimientos que deben acabar en algún momento,
mientras que otros consideran procedimientos que po-
drían ejecutarse eternamente sin pararse, suponiendo el
caso en el que existiera algún dispositivo físico que fue-
ra capaz de funcionar eternamente. En este último caso,
la finalización con éxito del algoritmo no se podría defi-
nir como la terminación de este con una salida satisfac-
toria, sino que el éxito estaría definido en función de las
secuencias de salidas dadas durante un periodo de vida
de la ejecución del algoritmo. Por ejemplo, un algoritmo
que verifica que hay más ceros que unos en una secuencia
binaria infinita debe ejecutarse siempre para que pueda
devolver un valor útil. Si se implementa correctamente,
el valor devuelto por el algoritmo será válido, hasta que
evalúe el siguiente dígito binario. De esta forma, mien-
tras evalúa la siguiente secuencia podrán leerse dos tipos
de señales: una señal positiva (en el caso de que el nú-
mero de ceros sea mayor que el de unos) y una negativa
en caso contrario. Finalmente, la salida de este algoritmo
se define como la devolución de valores exclusivamente
positivos si hay más ceros que unos en la secuencia y, en
cualquier otro caso, devolverá una mezcla de señales po-
sitivas y negativas.
1.5 Ejemplo de algoritmo
El problema consiste en encontrar el máximo de un con-
junto de números. Para un ejemplo más complejo véase
Algoritmo de Euclides.
1.5.1 Descripción de alto nivel
Dado un conjunto finito C de números, se tiene el pro-
blema de encontrar el número más grande. Sin pérdi-
da de generalidad se puede asumir que dicho conjunto
no es vacío y que sus elementos están numerados como
c0, c1, . . . , cn .
Es decir, dado un conjunto C = {c0, c1, . . . , cn} se pide
encontrar m tal que x ≤ m para todo elemento x que
pertenece al conjunto C .
Para encontrar el elemento máximo, se asume que el pri-
mer elemento ( c0 ) es el máximo; luego, se recorre el
conjunto y se compara cada valor con el valor del má-
ximo número encontrado hasta ese momento. En el caso
que un elemento sea mayor que el máximo, se asigna su
valor al máximo. Cuando se termina de recorrer la lista,
el máximo número que se ha encontrado es el máximo de
todo el conjunto.
1.5.2 Descripción formal
El algoritmo puede ser escrito de una manera más formal
en el siguiente pseudocódigo:
Sobre la notación:
• "←" representa una asignación: m ← x significa que
la variable m toma el valor de x ;
• "devolver" termina el algoritmo y devuelve el valor
a su derecha (en este caso, el máximo de C ).
1.5.3 Implementación
En lenguaje C++:
int max(int c[], int n) { int i, m = c[0]; for (i = 1; i < n;
i++) if (c[i] > m) m = c[i]; return m; }
9. 1.7. REFERENCIAS 5
1.6 Véase también
1.6.1 Tipos de algoritmos según su función
• Algoritmo de ordenamiento
• Algoritmo de búsqueda
1.6.2 Técnicas de diseño de algoritmos
• Algoritmos voraces (greedy): seleccionan los ele-
mentos más prometedores del conjunto de candida-
tos hasta encontrar una solución. En la mayoría de
los casos la solución no es óptima.
• Algoritmos paralelos: permiten la división de un
problema en subproblemas de forma que se puedan
ejecutar de forma simultánea en varios procesado-
res.
• Algoritmos probabilísticos: algunos de los pasos de
este tipo de algoritmos están en función de valores
pseudoaleatorios.
• Algoritmos determinísticos: el comportamiento del
algoritmo es lineal: cada paso del algoritmo tiene
únicamente un paso sucesor y otro antecesor.
• Algoritmos no determinísticos: el comportamiento
del algoritmo tiene forma de árbol y a cada paso del
algoritmo puede bifurcarse a cualquier número de
pasos inmediatamente posteriores, además todas las
ramas se ejecutan simultáneamente.
• Divide y vencerás: dividen el problema en subcon-
juntos disjuntos obteniendo una solución de cada
uno de ellos para después unirlas, logrando así la so-
lución al problema completo.
• Metaheurísticas: encuentran soluciones aproxima-
das (no óptimas) a problemas basándose en un cono-
cimiento anterior (a veces llamado experiencia) de
los mismos.
• Programación dinámica: intenta resolver problemas
disminuyendo su coste computacional aumentando
el coste espacial.
• Ramificación y acotación: se basa en la construcción
de las soluciones al problema mediante un árbol im-
plícito que se recorre de forma controlada encon-
trando las mejores soluciones.
• Vuelta atrás (backtracking): se construye el espa-
cio de soluciones del problema en un árbol que se
examina completamente, almacenando las solucio-
nes menos costosas.
1.6.3 Temas relacionados
• Cota inferior asintótica
• Cota ajustada asintótica
• Complejidad computacional
• Diagramas de flujo
• Diagrama Nassi-Shneiderman
• Máquina de Turing
1.6.4 Disciplinas relacionadas
• Ciencias de la Computación
• Análisis de algoritmos
• Complejidad computacional
• Informática
• Inteligencia artificial
• Investigación operativa
• Matemáticas
• Programación
1.7 Referencias
[1] Brassard, Gilles; Bratley, Paul (1997). Fundamentos
de Algoritmia. Madrid: PRENTICE HALL. ISBN 84-
89660-00-X.
[2] Real Academia Española. Diccionario de la lengua espa-
ñola "Conjunto ordenado y finito de operaciones que per-
mite hallar la solución de un problema."
[3] Cormen, Thomas; Leiserson, Charles; Rivest, Ronald;
Stein, Clifford (2009). Introduction to algorithms. Cam-
bridge, Massachusetts: The MIT Press. ISBN 978-0-262-
53305-8.
[4] Ralph P. Grimaldi (1998). «Propiedades de los números
enteros: Inducción matemática». Matemáticas Discreta y
Combinatoria. México: Addison Wesley Longman de Mé-
xico. ISBN 968-444-324-2.
[5] Johnsonbaugh, Richard (2005). «Introducción a la teoría
de números». Matemáticas Discretas. México: PEARSON
EDUCACIÓN. ISBN 970-26-0637-3.
[6] Carl Reynolds & Paul Tymann (2008). Schaum’s Outli-
ne of Principles of Computer Science. McGraw-Hill. ISBN
978-0-07-146051-4.
[7] Gurevich, Yuri (2000). «Sequential Abstract State Machi-
nes capture Sequential Algorithms». ACM Transactions
on Computational Logic 1 (1). ISSN 1529-3785, 77-111.
10. 6 CAPÍTULO 1. ALGORITMO
[8] John E. Savage (1987). The Complexity of Computing.
Krieger Publishing Co. ISBN 089874833X.
[9] Sipser, Michael (2005). Introduction to the Theory of
Computation (2 edición). Course Technology. ISBN 978-
0534950972.
[10] Nachum Dershowitz & Yuri Gurevich (2008). «A na-
tural axiomatization of computability and proof of
Church’s Thesis». Bulletin of Symbolic Logic 14 (3). ISSN
10798986, 299-350.
[11] Kelley, Dean (1995). Teoría de Autómatas y Lenguajes
Formales. Prentice Hall. ISBN 0-13-497777-7.
1.8 Bibliografía
• Aho, A. The Design and Analysis of Computer Algo-
rithms
• Cormen, T. H., Leiserson, C. E., Rivest, R. L. y
Stein, C. Introduction to Algorithms (2nd ed.)
• Brassard, G. y P. Bratley. Fundamentos de Algorit-
mia, (ISBN 848966000X)
• Knuth, D. E. The Art of Computer Programming,
[quien fue también, el creador del TeX]
• Mamber, U. Introduction to Algorithms. A Creative
Approach
• Sedgewick, R. Algorithms in C (3r ed) (también exis-
ten versiones en C++ y Java)
1.9 Enlaces externos
Wikilibros
• Wikilibros alberga un libro o manual sobre
Algoritmia.
• Wikcionario tiene definiciones y otra informa-
ción sobre algoritmo.Wikcionario
• Algoritmos para principiantes
• Portal de algoritmia
• Técnicas de Diseño de Algoritmos manual que ex-
plica y ejemplifica los distintos paradigmas de dise-
ño de algoritmos. Rosa Guerequeta y Antonio Va-
llecillo (profesores de la Universidad de Málaga).
• Transparencias de la asignatura “Esquemas Algorít-
micos”, Campos, J.
• Apuntes y problemas de Algorítmica por Domingo
Giménez Cánovas
• Curso de Diseño de Algoritmos de Carlos Pes
11. Capítulo 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 posible 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 pro-
blemas intratables pasan a ser tratables. Mientras que un
computador clásico equivale a una máquina de Turing,[1]
un computador cuántico equivale a una máquina de Tu-
ring cuántica.
2.1 Origen de la computación
cuántica
A medida que evoluciona la tecnología, aumenta la esca-
la 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 ha-
cer 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 atra-
vesar 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 la computación cuántica entra 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 tra-
bajar a nivel de voltajes eléctricos, se trabaja a nivel de
cuanto. En la computación digital, un bit sólo puede to-
mar dos valores: 0 ó 1. En cambio, en 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 pue-
den estar en superposición. Con los bits convencionales,
si teníamos un registro de tres bits, había ocho valores po-
sibles 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 con-
vencional de 10 teraflops (10 millones de millones de ope-
raciones en coma flotante por segundo), cuando actual-
7
12. 8 CAPÍTULO 2. COMPUTACIÓN CUÁNTICA
mente las computadoras trabajan en el orden de gigaflops
(miles de millones de operaciones).
2.2 Problemas de la computación
cuántica
Uno de los obstáculos principales para la computación
cuántica es el problema de la decoherencia cuántica, que
causa la pérdida del carácter unitario (y, más específica-
mente, la reversibilidad) de los pasos del algoritmo cuán-
tico. Los tiempos de decoherencia para los sistemas can-
didatos, en particular el tiempo de relajación transversal
(en la terminología usada en la tecnología de resonan-
cia magnética nuclear e imaginería por resonancia mag-
nética) está típicamente entre nanosegundos y segundos,
a temperaturas bajas. Las tasas de error son típicamen-
te proporcionales a la razón entre tiempo de operación
frente a tiempo de decoherencia, de forma que cualquier
operación debe ser completada en un tiempo mucho más
corto que el tiempo de decoherencia. Si la tasa de error es
lo bastante baja, es posible usar eficazmente la corrección
de errores cuántica, con lo cual sí serían posibles tiempos
de cálculo más largos que el tiempo de decoherencia y, en
principio, arbitrariamente largos. Se cita con frecuencia
una tasa de error límite de 10−4
, por debajo de la cual se
supone que sería posible la aplicación eficaz de la correc-
ción de errores cuánticos.
Otro de los problemas principales es la escalabilidad,
especialmente teniendo en cuenta el considerable incre-
mento en qubits necesarios para cualquier cálculo que im-
plica la corrección de errores. Para ninguno de los siste-
mas actualmente propuestos es trivial un diseño capaz de
manejar un número lo bastante alto de qubits para resol-
ver problemas computacionalmente interesantes hoy en
día.
2.3 Hardware para computación
cuántica
Aún no se ha resuelto el problema de qué hardware sería
el ideal para la computación cuántica. Se ha definido una
serie de condiciones que debe cumplir, conocida como la
lista de Di Vincenzo, y hay varios candidatos actualmente.
2.3.1 Condiciones a cumplir
• El sistema ha de poder inicializarse, esto es, llevarse
a un estado de partida conocido y controlado.
• Ha de ser posible hacer manipulaciones a los qubits
de forma controlada, con un conjunto de operacio-
nes que forme un conjunto universal de puertas ló-
gicas (para poder reproducir cualquier otra puerta
lógica posible).
• El sistema ha de mantener su coherencia cuántica a
lo largo del experimento.
• Ha de poder leerse el estado final del sistema, tras el
cálculo.
• El sistema ha de ser escalable: tiene que haber una
forma definida de aumentar el número de qubits, pa-
ra tratar con problemas de mayor coste computacio-
nal.
2.3.2 Candidatos
• Espines nucleares de moléculas en disolución, en un
aparato de RMN.
• Flujo eléctrico en SQUIDs.
• Iones suspendidos en vacío .
• Puntos cuánticos en superficies sólidas.
• Imanes moleculares en micro-SQUIDs.
• Computadora cuántica de Kane.
• Computación adiabática, basada en el teorema adia-
bático.
Procesadores
En 2004, científicos del Instituto de Física aplicada de la
Universidad de Bonn publicaron resultados sobre un re-
gistro cuántico experimental. Para ello utilizaron átomos
neutros que almacenan información cuántica, por lo que
son llamados qubits por analogía con los bits. Su objeti-
vo actual es construir una puerta cuántica, con lo cual se
tendrían los elementos básicos que constituyen los proce-
sadores, que son el corazón de los computadores actuales.
Cabe destacar que un chip de tecnología VLSI contiene
actualmente más de 100.000 puertas, de manera que su
uso práctico todavía se presenta en un horizonte lejano.
Transmisión de datos
Científicos de los laboratorios Max Planck y Niels Bohr
publicaron, en noviembre de 2005, en la revista Nature,
resultados sobre la transmisión de información cuánti-
ca, usando la luz como vehículo, a distancias de 100
km[cita requerida]
. Los resultados dan niveles de éxito en las
transmisiones del 70%, lo que representa un nivel de ca-
lidad que permite utilizar protocolos de transmisión con
autocorrección.
Actualmente se trabaja en el diseño de repetidores, que
permitirían transmitir información a distancias mayores
a las ya alcanzadas.
13. 2.5. CRONOLOGÍA 9
2.4 Software para computación
2.4.1 Algoritmos cuánticos
Los algoritmos cuánticos se basan en un margen de error
conocido en las operaciones de base y trabajan reducien-
do el margen de error a niveles exponencialmente peque-
ños, comparables al nivel de error de las máquinas actua-
les.
• Algoritmo de Shor
• Algoritmo de Grover
• Algoritmo de Deutsch-Jozsa
2.4.2 Modelos
• Computadora cuántica de Benioff
• Computadora cuántica de Feynman
• Computadora cuántica de Deutsch
2.4.3 Complejidad
La clase de complejidad BQP estudia el costo de los al-
goritmos cuánticos con bajo margen de error.
2.4.4 Problemas propuestos
Se ha sugerido el uso de la computación cuántica como
alternativa superior a la computación clásica para varios
problemas, entre ellos:
• Factorización de números enteros
• Logaritmo discreto
• Simulación de sistemas cuánticos: Richard Feynman
conjeturó en 1982 que los ordenadores cuánticos se-
rían eficaces como simuladores universales de siste-
mas cuánticos, y en 1996 se demostró que la conje-
tura era correcta.[2]
2.5 Cronología
2.5.1 Años 80
A comienzos de la década de los 80, empezaron a sur-
gir las primeras teorías que apuntaban a la posibilidad de
realizar cálculos de naturaleza cuántica.
1981 - Paul Benioff
Las ideas esenciales de la computación cuántica surgie-
ron de la mente de Paul Benioff que trabajaba en el Ar-
gone National Laboratory en Illinois (EE. UU.). Teorizó
un ordenador tradicional (máquina de Turing) operando
con algunos principios de la mecánica cuántica.
1981-1982 Richard Feynman
El Dr. Richard Feynman, físico del California Institute
of Technology en California (EE. UU.) y ganador del
premio Nobel en 1965 realizó una ponencia durante el
“First Conference on the Physics of Computation” reali-
zado en el Instituto Tecnológico de Massachusetts (EE.
UU.) Su charla, bajo el título de “Simulating Physics
With Computers” proponía el uso de fenómenos cuánti-
cos para realizar cálculos computacionales y exponía que
dada su naturaleza algunos cálculos de gran complejidad
se realizarían más rápidamente en un ordenador cuántico.
1985 - David Deutsch
Este físico israelí de la Universidad de Oxford, Inglaterra,
describió el primer computador cuántico universal, es de-
cir, capaz de simular cualquier otro computador cuánti-
co (principio de Church-Turing ampliado). De este modo
surgió la idea de que un computador cuántico podría eje-
cutar diferentes algoritmos cuánticos.
2.5.2 Años 90
En esta época la teoría empezó a plasmarse en la prác-
tica: aparecieron los primeros algoritmos cuánticos, las
primeras aplicaciones cuánticas y las primeras máquinas
capaces de realizar cálculos cuánticos.
1993 - Dan Simon
Desde el departamento de investigación de Microsoft
(Microsoft Research), surgió un problema teórico que de-
mostraba la ventaja práctica que tendría un computador
cuántico frente a uno tradicional.
Comparó el modelo de probabilidad clásica con el modelo
cuántico y sus ideas sirvieron como base para el desarrollo
de algunos algoritmos futuros (como el de Shor).
1993 - Charles Benett
Este trabajador del centro de investigación de IBM en
Nueva York descubrió el teletransporte cuántico y que
abrió una nueva vía de investigación hacia el desarrollo
de comunicaciones cuánticas.
1994-1995 Peter Shor
Este científico estadounidense de AT&T Bell Laborato-
ries definió el algoritmo que lleva su nombre y que per-
mite calcular los factores primos de números a una velo-
cidad mucho mayor que en cualquier computador tradi-
cional. Además su algoritmo permitiría romper muchos
de los sistemas de criptografía utilizados actualmente. Su
algoritmo sirvió para demostrar a una gran parte de la co-
munidad científica que observaba incrédula las posibili-
dades de la computación cuántica, que se trataba de un
14. 10 CAPÍTULO 2. COMPUTACIÓN CUÁNTICA
campo de investigación con un gran potencial. Además,
un año más tarde, propuso un sistema de corrección de
errores en el cálculo cuántico.
1996 - Lov Grover
Inventó el algoritmo de búsqueda de datos que lleva su
nombre "Algoritmo de Grover". Aunque la aceleración
conseguida no es tan drástica como en los cálculos facto-
riales o en simulaciones físicas, su rango de aplicaciones
es mucho mayor. Al igual que el resto de algoritmos cuán-
ticos, se trata de un algoritmo probabilístico con un alto
índice de acierto.
1997 - Primeros experimentos
En 1997 se iniciaron los primeros experimentos prácticos
y se abrieron las puertas para empezar a implementar to-
dos aquellos cálculos y experimentos que habían sido des-
critos teóricamente hasta entonces. El primer experimen-
to de comunicación segura usando criptografía cuántica
se realiza con éxito a una distancia de 23 Km. Además se
realiza el primer teletransporte cuántico de un fotón.
1998 - 1999 Primeros Qbit
Investigadores de Los Álamos y el Instituto Tecnológi-
co de Massachusets consiguen propagar el primer Qbit a
través de una solución de aminoácidos. Supuso el primer
paso para analizar la información que transporta un Qbit.
Durante ese mismo año, nació la primera máquina de 2-
Qbit, que fue presentada en la Universidad de Berkeley,
California (EE. UU.) Un año más tarde, en 1999, en los
laboratorios de IBM-Almaden, se creó la primera máqui-
na de 3-Qbit y además fue capaz de ejecutar por primera
vez el algoritmo de búsqueda de Grover.
2.5.3 Año 2000 hasta ahora
2000 - Continúan los progresos
De nuevo IBM, dirigido por Isaac Chuang (Figura 4.1),
creó un computador cuántico de 5-Qbit capaz de ejecu-
tar un algoritmo de búsqueda de orden, que forma parte
del Algoritmo de Shor. Este algoritmo se ejecutaba en un
simple paso cuando en un computador tradicional reque-
riría de numerosas iteraciones. Ese mismo año, científi-
cos de Los Álamos National Laboratory (EE. UU.) anun-
ciaron el desarrollo de un computador cuántico de 7-Qbit.
Utilizando un resonador magnético nuclear se consiguen
aplicar pulsos electromagnéticos y permite emular la co-
dificación en bits de los computadores tradicionales.
2001 - El algoritmo de Shor ejecutado
IBM y la Universidad de Stanford, consiguen ejecutar por
primera vez el algoritmo de Shor en el primer computador
cuántico de 7-Qbit desarrollado en Los Álamos. En el ex-
perimento se calcularon los factores primos de 15, dando
el resultado correcto de 3 y 5 utilizando para ello 1018
moléculas, cada una de ellas con 7 átomos.
2005 - El primer Qbyte
El Instituto de “Quantum Optics and Quantum Informa-
tion” en la Universidad de Innsbruck (Austria) anunció
que sus científicos habían creado el primer Qbyte, una
serie de 8 Qbits utilizando trampas de iones.
2006 - Mejoras en el control del cuanto
Científicos en Waterloo y Massachusetts diseñan métodos
para mejorar el control del cuanto y consiguen desarrollar
un sistema de 12-Qbits. El control del cuanto se hace cada
vez más complejo a medida que aumenta el número de
Qbits empleados por los computadores.
2007 - D-Wave
La empresa canadiense D-Wave Systems había supues-
tamente presentado el 13 de febrero de 2007 en Silicon
Valley, una primera computadora cuántica comercial de
16-qubits de propósito general; luego la misma compañía
admitió que tal máquina, llamada Orion, no es realmente
una computadora cuántica, sino una clase de máquina de
propósito general que usa algo de mecánica cuántica para
resolver problemas.[cita requerida]
2007 - Bus cuántico
En septiembre de 2007, dos equipos de investigación es-
tadounidenses, el National Institute of Standards (NIST)
de Boulder y la Universidad de Yale en New Haven con-
siguieron unir componentes cuánticos a través de super-
conductores.
De este modo aparece el primer bus cuántico, y este dis-
positivo además puede ser utilizado como memoria cuán-
tica, reteniendo la información cuántica durante un cor-
to espacio de tiempo antes de ser transferido al siguiente
dispositivo.
2008 - Almacenamiento
Según la Fundación Nacional de Ciencias (NSF) de los
EE. UU., un equipo de científicos consiguió almacenar
por primera vez un Qubit en el interior del núcleo de un
átomo de fósforo, y pudieron hacer que la información
permaneciera intacta durante 1,75 segundos. Este perio-
do puede ser expansible mediante métodos de corrección
de errores, por lo que es un gran avance en el almacena-
miento de información.
15. 2.7. NOTAS Y REFERENCIAS 11
2009 - Procesador cuántico de estado sólido
El equipo de investigadores estadounidense dirigido por
el profesor Robert Schoelkopf, de la Universidad de Ya-
le, que ya en 2007 había desarrollado el Bus cuántico,
crea ahora el primer procesador cuántico de estado sóli-
do, mecanismo que se asemeja y funciona de forma si-
milar a un microprocesador convencional, aunque con la
capacidad de realizar sólo unas pocas tareas muy simples,
como operaciones aritméticas o búsquedas de datos.
Para la comunicación en el dispositivo, esta se realiza me-
diante fotones que se desplazan sobre el bus cuántico, cir-
cuito electrónico que almacena y mide fotones de micro-
ondas, aumentando el tamaño de un átomo artificialmen-
te.
2011 - Primera computadora cuántica vendida
La primera computadora cuántica comercial es vendi-
da por la empresa D-Wave Systems, fundada en 1999 a
Lockheed Martin, por 10 millones de dólares.[3]
2012 - Avances en chips cuánticos
IBM anuncia que ha creado un chip lo suficientemente
estable como para permitir que la informática cuántica
llegue a hogares y empresas. Se estima que en unos 10
o 12 años se puedan estar comercializando los primeros
sistemas cuánticos.[4]
2013 - Computadora cuántica más rápida que un
computador convencional
En abril la empresa D-Wave Systems lanza el nuevo
computador cuántico D-Wave Two el cual es 500000 ve-
ces superior a su antecesor D-Wave One, con un poder
de cálculo de 439 qubits. Realmente el D-Wave Two tuvo
graves problemas finalmente, dado a que no tenía las me-
joras de procesamiento teóricas frente al D-Wave One[5]
Éste fue comparado con un computador basado en el mi-
croprocesador Intel Xeon E5-2690 a 2.9 GHz, teniendo
en cuenta que lo obteniendo, es decir, el resultado en pro-
medio de 4000 veces superior.[6]
2.6 Véase también
• Computación basada en ADN
• Criptografía cuántica
• Electrónica molecular
• Entrelazamiento cuántico
• Fotónica
• Intelligence Advanced Research Projects Activity
(IARPA)
• Simulador cuántico universal
• Teleportación cuántica
• Valletrónica
2.7 Notas y referencias
[1] Con la salvedad de que una máquina de Turing tiene me-
moria infinita.
[2] Lloyd, Seth (1996). «Universal Quantum Simulators».
Science 273: 1073–1078.
[3] World’s first commercial quantum computer sold to Lock-
heed Martin, 27 de mayo de 2011
[4] IBM shows off quantum computing advances, says prac-
tical qubit computers are close
[5]
[6] computer finally proves its faster than a conventional PC,
but only just
2.8 Bibliografía
• Ordenador cuántico universal y la tesis de
Church-Turing
• Deutsch, D. “Quantum Theory, the Church-
Turing Principle, and the Universal Quan-
tum Computer” Proc. Roy. Soc. Lond. A400
(1985) pp. 97–117.
• Uso de computadoras cuánticas para simular
sistemas cuánticos
• Feynman, R. P. “Simulating Physics with
Computers” International Journal of Theore-
tical Physics, Vol. 21 (1982) pp. 467–488.
• Computación Cuántica e Información Cuántica
• Nielsen, M. y Chuang, I. “Quantum Compu-
tation and Quantum Information” Cambridge
University Press (September, 2000), ISBN 0-
521-63503-9.
2.9 Bibliografía complementaria
• Agustín Rayo, «Computación cuántica», Investiga-
ción y Ciencia, 405, junio de 2010, págs. 92-93.
16. 12 CAPÍTULO 2. COMPUTACIÓN CUÁNTICA
• Mastriani, Mario (4 de septiembre de 2014).
Memorias matriciales correlacionadas cuánticas,
simples y mejoradas: una propuesta para su estudio y
simulación sobre GPGPU. p. 268. Consultado el 12
de septiembre de 2014.
2.10 Enlaces externos
• Frecuencias Cuánticas
• Wikimedia Commons alberga contenido multi-
media sobre Computación cuánticaCommons.
• Referencias generales
• Computación cuántica Escrito por Sergi Baila
• Computación cuántica Epistemowikia
• Qubit.org (Centre for Quantum Computation)
(en inglés)
• Institute for Quantum Computing (en inglés)
• Grupo de Información y Computación Cuán-
tica de la Universidad Politécnica de Madrid.
• Computación, Información y Criptografía
Cuántica en la Comunidad de Madrid (QUI-
TEMAD)
• QubitNews (en inglés)
• Qwiki (Wiki sobre Computación Cuántica)
(en inglés)
• Artículos sobre física cuántica (libre acceso)
(en inglés)
• Algunos tutoriales
• El ordenador Insuperable Artículo divulgativo
de David Deutsch.
• Informática Cuántica Historia, Modelos y Al-
goritmos.
• La Nación: Qubit x Qubit
• La Nación: Por qué Google y el Pentágono
quieren computadoras cuánticas
• La Nación: Microsoft apuesta a que la compu-
tación cuántica sea el próximo gran salto
• Compañías que desarrollan computadoras
cuánticas
• D-Wave Systems, Vancouver, BC, Canada
• IBM
• Patentes relacionadas con la computación cuán-
tica
• Algunas patentes concedidas relacionadas con
la computación cuántica
• Algunas patentes publicadas relacionadas con
la computación cuántica
17. Capítulo 3
Computadora óptica
Una computadora óptica es una computadora que usa
la luz en vez de la electricidad (es decir fotones en lugar
de electrones) para manipular, almacenar y transmitir da-
tos. Los fotones tienen propiedades físicas fundamenta-
les diferentes a las de los electrones, y los investigadores
han intentado hacer uso de estas propiedades, sobre todo
usando los principios básicos de la óptica, para producir
computadores con el desempeño y/o capacidades mayo-
res que los de los computadores electrónicos. La tecno-
logía de computadores ópticos todavía está en los prime-
ros tiempos: computadoras ópticas funcionales han sido
construidas en el laboratorio, pero ninguna ha progresado
más allá de la etapa del prototipo.
La mayoría de los proyectos de investigación se enfocan
en el reemplazo de los componentes de computadora ac-
tuales por equivalentes ópticos, dando por resultado un
sistema de computadora digital óptica que procesa da-
tos binarios. Este acercamiento parece ofrecer las mejo-
res perspectivas a corto plazo para la computación óp-
tica comercial, puesto que los componentes ópticos po-
drían ser integrados en los computadores tradicionales
para producir un híbrido óptico/electrónico. Otros pro-
yectos de investigación toman un acercamiento no tradi-
cional, intentando desarrollar enteramente nuevos méto-
dos de computar que no son físicamente posibles con la
electrónica.
3.1 Componentes ópticos para la
computadora digital binaria
El bloque de construcción fundamental de computado-
res electrónicos modernos es el transistor. Para substi-
tuir componentes electrónicos por los ópticos, es reque-
rido un “transistor óptico” equivalente. Esto es alcanzado
usando materiales con un índice de refracción no lineal.
En particular, existen materiales donde la intensidad de
la luz entrante afecta a la intensidad de la luz transmitida
a través del material, de una manera similar a la respues-
ta del voltaje en un transistor electrónico. Este efecto del
“transistor óptico” es usado para crear puertas de lógica,
que a su vez están ensamblados en los componentes de
alto nivel del CPU del computador.
3.2 Ideas falsas, retos y perspecti-
vas
Otra aclamada ventaja de la óptica es que puede reducir
el consumo de energía, pero, sobre distancias cortas, un
sistema de comunicación óptico típicamente usará más
energía que uno electrónico. Esto es porque el ruido de
disparo de un canal de comunicación óptico es mayor que
el ruido de Johnson-Nyquist (también conocido como rui-
do térmico) de un canal eléctrico, lo que en teoría de la in-
formación significa que requerimos más energía de señal
para alcanzar la misma capacidad de datos. Sin embargo,
sobre distancias más largas y a mayores velocidades de
datos, la pérdida en las líneas eléctricas es suficientemen-
te mayor que en las comunicaciones ópticas, las cuales
comparativamente usarán una cantidad de energía más
baja. A medida que se eleva la velocidad de datos de co-
municación, esta distancia llega a ser más corta y así la
perspectiva de usar la óptica en sistemas de cálculo llega
a ser más práctica.[cita requerida]
Un significativo desafío a la computación óptica es que
el cómputo es un proceso no lineal, en el cual múltiples
señales deben interactuar para computar la respuesta. La
luz, que es una onda electromagnética, solamente puede
interactuar con otra onda electromagnética en presencia
de los electrones en un material, y la fuerza de esta in-
teracción es mucho más débil para la luz de onda elec-
tromagnética, que para las señales electrónicas en una
computadora convencional. Esto da como resultado que
los elementos de procesamiento para una computadora
óptica requieren más energía y mayores dimensiones que
para una computadora electrónica convencional usando
transistores.[cita requerida]
3.3 Véase también
• Computadora
• Computadora electrónica
• Computadora mecánica
• Red neural óptica
13
18. 14 CAPÍTULO 3. COMPUTADORA ÓPTICA
3.4 Enlaces externos
• Optical Computer Architectures: The Application of
Optical Concepts to Next Generation Computers, Op-
tical Computer Architectures: The Application of Op-
tical Concepts to Next Generation Computers book by
Alastair D. McAulay (1999)
• BARROS S., GUAN S. & ALUKAIDEY T., “An
MPP reconfigurable architecture using free-space
optical interconnects and Petri net configuring” in
Journal of System Architecture (The EUROMI-
CRO Journal) Special Double Issue on Massively
Parallel Computing Systems vol. 43, no. 6 & 7, pp.
391-402, April 1997
• T.S. Guan & S.P.V. Barros, “Reconfigurable Multi-
Behavioural Architecture using Free-Space Optical
Communication” in Proceedings of the IEEE Inter-
national Workshop on Massively Parallel Processing
using Optical Interconnections. , April 1994
• T.S. Guan & S.P.V. Barros, “Parallel Processor
Communications through Free-Space Optics” in
IEEE Region 10’s Ninth Annual International Con-
ference on Frontiers of Computer Technology , Au-
gust 1994
• Architectural issues in designing symbolic processors
in optics
• D. Goswami, “Optical Computing”, Resonance, Ju-
ne 2003; ibid July 2003. ,
• K.-H. Brenner, Alan Huang: “Logic and architectu-
res for digital optical computers (A)", J. Opt. Soc.
Am., A 3, 62, (1986)
• K.-H. Brenner: “A programmable optical processor
based on symbolic substitution”, Appl. Opt. 27, No.
9, 1687 - 1691, (1988)
• NASA scientists working to improve optical computing
technology
• International Workshop on Optical SuperComputing
• Optical solutions for NP-complete problems
• Speed-of-light computing comes a step closer New
Scientist
19. Capítulo 4
Ciencias de la computación
Las Ciencias de la computación estudian los fundamen-
tos teóricos de la información y el cómputo, junto con
técnicas prácticas para la implementación y aplicación
de estos fundamentos teóricos.
Las ciencias de la computacion son aquellas que abar-
can las bases teóricas de la información y la computación,
así como su aplicación en sistemas computaciona-
les.[1][2][3]
El cuerpo de conocimiento de las ciencias de la
computación es frecuentemente descrito como el estudio
sistemático de los procesos algorítmicos que describen y
transforman información: su teoría, análisis, diseño, efi-
ciencia, implementación y aplicación.[4]
Es el estudio sistemático de la factibilidad, estructura,
expresión y mecanización de procedimientos metó-
dicos (o algoritmos) que subyacen en la adquisi-
ción, representación, procesamiento, almacenamiento,
comunicación y acceso a la información si dicha infor-
mación está codificada en forma de bits en una memoria
de computadora o especificada en una estructura de genes
y proteínas en una célula biológica.[5]
Existen diversos campos o disciplinas dentro de las cien-
cias de la computación o ciencias computacionales; algu-
nos resaltan los resultados específicos del cómputo (como
los gráficos por computadora), mientras que otros (co-
mo la teoría de la complejidad computacional) se rela-
cionan con propiedades de los algoritmos usados al rea-
lizar cómputo y otros se enfocan en los problemas que
requieren la implementación de sistemas computaciona-
les. 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 pro-
gramación específicos para desarrollar una solución a un
problema computacional específico. Un científico de la
computación o computólogo se especializa en teoría de
la computación y en el diseño e implementación de siste-
mas de computacionales.[6]
Según Peter J. Denning, la cuestión fundamental en que
se basa la ciencia de la computación es: «¿Qué puede ser
(eficientemente) automatizado?».[7]
4.1 Historia
Charles Babbage es reconocido por inventar la primera compu-
tadora mecánica.
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.[8]
Los primeros cimien-
tos de lo que se convertiría en ciencias de la computación
son anteriores a la invención de la computadora digital
moderna. Se trataba de máquinas para el cálculo de las ta-
reas numéricas fijas, como el ábaco han existido desde la
antigüedad, ayudando en cálculos tales como la multipli-
cación y la división. Además, los algoritmos para realizar
cálculos han existido desde la antigüedad, incluso antes
de que se crearan equipos de computación sofisticados.
Los antiguos sánscritos tratadistas Shulba Sutras, o “Re-
glas de la cuerda”, es un libro de algoritmos escritos en
800 a. C. para la construcción de objetos geométricos co-
mo altares utilizando una clavija y cuerda, un precursor
temprano del campo moderno de la geometría compu-
tacional.
Blaise Pascal diseñó y construyo la primera calculadora
mecánica de trabajo, la Pascalina, en 1642.[9]
En 1673
Gottfried Leibniz creó una calculadora mecánica digital,
15
20. 16 CAPÍTULO 4. CIENCIAS DE LA COMPUTACIÓN
Ada Lovelace es reconocida por escribir el primer algoritmo pro-
cesado por una computadora.
llamada el 'Stepped Reckoner'.[10]
Él puede ser conside-
rado el primer computólogo y teórico de la información,
entre otras razones, porque fue el primero en documen-
tar el sistema numérico binario. En 1820, Charles Xa-
vier Thomas de Colmar lanzó la calculadora mecánica
industrial[11]
cuando lanzó su simplificado aritmómetro,
que fue la primera máquina de calcular lo suficientemen-
te fuerte y lo suficientemente confiable para ser usada a
diario en un entorno industrial. Charles Babbage inició el
diseño de la primera calculadora automática mecánica,
su máquina diferencial, en 1822, que finalmente le dio la
idea de la primera calculadora mecánica programable, su
máquina analítica.[12]
Él comenzó a desarrollar esta má-
quina en 1834 y “en menos de dos años que había esboza-
do muchas de las características más destacadas del mo-
derno equipo. Un paso fundamental fue la adopción de un
sistema de tarjetas perforadas derivado del telar de Jac-
quard"[13]
haciéndolo infinitamente programable.[14]
En
1843, durante la traducción de un artículo francés sobre
la máquina analítica, Ada Lovelace escribió, en una de las
muchas notas que incluye el artículo, un algoritmo para
calcular los números de Bernoulli, que es considerado co-
mo el primer programa de ordenador.[15]
Al rededor de
1885, Herman Hollerith inventó la máquina tabuladora,
que usaba tarjetas perforadas para procesar información
estadística; finalmente, su compañía se convirtió en parte
de IBM. En 1937, cien años después del sueño imposible
de Babbage, Howard Aiken convencidos por IBM, que
estaban manufacturando todo tipo de equipos de tarje-
tas perforadas y así como la calculadora de negocio [16]
para desarrollar su calculadora programable gigante, el
ASCC/Harvard Mark I, se basó en la máquina analítica
de Babbage, que a su vez utiliza las tarjetas perforadas
y una unidad central de cálculo. Cuando se terminó de
construir la máquina, algunas personas lo aclamaron co-
mo “el sueño de Babbage hecho realidad”.[17]
Durante la década de 1940, conforme se desarrollaban
nuevas y más poderosas máquinas para computar, el tér-
mino computador se comenzó a utilizar para referirse
a las máquinas y ya no a sus antecesores humanos.[18]
Cuando se hizo evidente que las computadoras no so-
lamente podrían utilizarse para realizar cálculos mate-
máticos, el campo de las ciencias de la computación se
amplió para estudiar cómputo en general. Las ciencias
de la computación empezaron a establecerse como una
disciplina académica distinta de las demás en la déca-
da de 1950 y principios de 1960.[7][19]
Entonces sur-
gió el primer programa de grado universitario mundo, el
Cambridge Diploma in Computer Science, se inició en
la Universidad de Cambridge en el Cambridge Compu-
ter Lab (departamento de ciencias de la computación) en
1953. El primer programa de grado universitario en cien-
cias de la computación en los Estados Unidos se formó en
Universidad de Purdue en 1962.[20]
Desde que se dispo-
ne ordenadores prácticos, muchas aplicaciones la compu-
tación se han convertido en las distintas áreas de estudio
en sus propios términos.
Aunque inicialmente muchos creyeron que era imposi-
ble que las computadoras en sí mismas podrían consti-
tuir en realidad un campo científico de estudio, a fina-
les de los años cincuenta se fue volviendo gradualmente
aceptada entre la población mayor académica.[21][22]
Es
la marca IBM que a 2015 es muy conocida la que formó
parte de la revolución de las ciencias de la computación
durante este tiempo. IBM (abreviación de International
Business Machines) lanzó el IBM 704[23]
y más tarde las
computadoras de IBM 709[24]
que fueron ampliamente
utilizadas durante el período de exploración de este ti-
po de dispositivos. “Sin embargo, el trabajo con las IBM
[computadoras] fue frustrante ... si hubieras perdido tanto
como una letra en una instrucción, el programa chocaría,
y usted tendría que empezar todo el proceso otra vez”.[21]
Durante a finales de 1950, la disciplinas de las ciencias de
la computación estaban en sus etapas de desarrollo más
primordiales, y tales cuestiones eran comunes.[22]
La disciplina científica de las ciencias de la computación
nace a principios de 1940 con la confluencia de la teoría
de algoritmos, lógica matemática y la invención del pro-
grama almacenado en una computadora electrónica.[4]
Ejemplos de esto son los trabajos de Alan Turing, Alonzo
Church y Kurt Gödel en 1930 acerca de los algoritmos y
su trabajo en sistemas de reglas (véase Cálculo Lamb-
da, Máquina de Turing y Problemas Indecidibles), los al-
goritmos creados por Augusta Ada sesenta años antes,
la computadora analógica construida por Vannevar Bush
en 1920 y las computadoras eléctricas construidas por
21. 4.1. HISTORIA 17
Howard Aiken y Konrad Zuse en 1930. Los escritos de
John Von Neumann dieron una profundidad intelectual
considerable a esta disciplina emergente a mediados de
la década de 1940.
En 1960, había suficientemente cuerpo de conocimiento
que ameritaba la creación de departamentos académicos
y programas de grado universitario para esta disciplina.[4]
IBM es reconocida como la marca que formó parte de la
revolución de las ciencias de la computación durante ese
tiempo. IBM (abreviación de International Business Ma-
chines) lanzó la IBM 704[25]
y más tarde la IBM 709[26]
computadoras, que fueron ampliamente utilizadas duran-
te el período de exploración de este tipo de dispositivos.
“Sin embargo, el trabajo con la IBM [equipo] era frus-
trante ... si te equivocas en una letra de alguna instrucción,
el programa se arruinaría, y se tendría que empezar todo
el proceso otra vez”.[21]
Durante la década de 1950, la
disciplina de las ciencias de la computación estaba en su
etapa de desarrollo, y estos problemas eran algo común.
El tiempo ha dado mejoras significativas en la capacidad
de uso y la eficacia de la tecnología de la computación.
La sociedad moderna ha presenciado un cambio signifi-
cativo en los usuarios de la tecnología en cómputo, de ser
utilizada únicamente por expertos, profesionales y cien-
tíficos, a una base de usuarios que es casi omnipresente
a la teoría con la cual se desarrolló y funciona este tipo
de tecnología. Inicialmente, las computadoras eran bas-
tante costosas, y era necesario un cierto grado de ayuda
humana para el uso eficiente - en parte de operadores de
computadoras profesionales. Como la adopción equipo se
hizo más generalizado y asequible, se necesitaba menos
asistencia humana en el uso común.
4.1.1 Mayores logros
A pesar de su corto tiempo de ser una disciplina cientí-
fica formal, las ciencias de la computación han hecho un
gran número de contribuciones importantes a la ciencia
y la sociedad –de hecho, junto con la electrónica, es una
ciencia fundacional de la época actual de la historia hu-
mana llamada Era de la información y la Revolución de la
Información, visto como el tercer gran salto en el progre-
so tecnológico humano después de la Revolución Indus-
trial (1750-1850) y la revolución neolítica (8000-5000 a.
C.)–.
Estas contribuciones a la humanidad incluyen:
• El comienzo de la "Revolución digital", la cual inclu-
ye la actual Era de la información y el Internet.[28]
• Una definición formal de computación y
computabilidad, y una demostración formal de
que existen problemas que son computacionale-
mente irresolubles e intratables.[29]
• El concepto de lenguaje de programación, una he-
rramienta para la expresión precisa de información
El ejército alemán uso la máquina enigma durante la Segunda
Guerra Mundial; su sistema de cifrado fue finalmente descubier-
to por Alan Turing, considerado el padre de la Computación. La
lectura de la información que contenían los mensajes supuesta-
mente encriptados son considerados, a veces, como la causa de
haber podido concluir la Segunda Guerra Mundial al menos dos
años antes de lo que hubiera acaecido sin su descifrado. El des-
cifrado a gran escala del tráfico de Enigma en Bletchley Park
fue uno de los factores más importantes que contribuyeron a la
victoria Aliada.[27]
metodológica a varios niveles de abstracción.[30]
• En criptología, el criptoanálisis de Enigma fue un
factor importante, el cual contribuyó a la victoria
Aliada en la Segunda Guerra Mundial.[27]
• Cómputo Científico permitió la evaluación de pro-
cesos y situaciones de gran complejidad, así como la
experimentación mediante software. También per-
mitió el avance en investigación de la mente huma-
na y el mapeo del genoma humano junto el Proyecto
Genoma Humano.[28]
proyectos de Cómputo Distri-
buido tales como Folding@home que estudiaron el
plegamiento de proteínas.
• El Comercio algorítmico ha incrementado la
eficiencia y la liquidez de los mercados finan-
cieros mediante técnicas de inteligencia artifi-
cial, aprendizaje automático, y otros métodos
estadísticos y numéricos a gran escala.[31]
Alta fre-
cuencia de comercio algorítmico también puede
exacerbar la volatilidad financiera.[32]
• Computación gráfica e imágenes generadas por
computadora se han convertido omnipresentes en
22. 18 CAPÍTULO 4. CIENCIAS DE LA COMPUTACIÓN
la era moderna del entretenimiento, sobre to-
do en televisión, cine, publicidad, animación y
videojuegos. [cita requerida]
• Simulación de varios procesos, incluyendo dinámica
de fluidos computacionales, sistemas físicos, eléctri-
cos, electrónicos y de circuitos, así como las socie-
dades y las situaciones sociales (sobre todo juegos de
guerra), junto con sus hábitats, entre muchos otros.
Las computadoras modernas permiten la optimiza-
ción de diseños tales como aviones completos. Se
destaca el diseño de circuitos eléctricos y electró-
nicos con SPICE, así como software para la reali-
zación física de nuevos diseños. Este último incluye
software de diseño esencial para circuito integrados.
• La Inteligencia artificial (IA) es cada vez más impor-
tante, ya que se hace más eficiente y compleja. Exis-
ten muchas aplicaciones de la IA, algunas se pueden
ver en el hogar, tales como aspiradores robóticos.
También está presente en los videojuegos y en el
campo de batalla moderno en aviones no tripulados,
sistemas antimisiles, y robots de apoyo para escua-
drones.
4.2 Filosofía
Un gran número de científicos de la computación han ar-
gumentado a favor de la distinción de tres paradigmas di-
ferentes en ciencias de la computación. Peter Wegner ha
argumentado que esos paradigmas son la ciencia, la tec-
nología y las matemáticas.[33]
El grupo de investigación
de Peter Denning argumentó que son la abstracción (mo-
delado), y diseño. Amnon H. Eden lo describe como el
“paradigma racionalista” (el cual trata a las ciencias de la
computación como una rama de las matemáticas, la cual
prevalence en ciencias de la computación teórica y princi-
palmente emplea el razonamiento deductivo), el paradig-
ma tecnocrático (que podría ser encontrado en enfoques
ingenieriles, más prominente en la ingeniería de software)
y el paradigma científico (que se enfoca a objetos relacio-
nados con la computación desde la perspectiva empírica
de las ciencias naturales identificable en algunas ramas de
la inteligencia artificial.
4.2.1 Nombre del campo
A pesar de su primera proposición en 1956,[22]
el término
“ciencias de la computación” aparece en 1959 en un ar-
tículo de la revista Communications of the ACM (presti-
giada publicación científica destinada a lectores con ex-
periencia en todos los ámbitos de la computación y los
sistemas de información),[34]
en el cual Louis Fein discu-
te sobre la creación de una Escuela de Estudios de Pos-
grado en Ciencias Computacionales análoga a la creación
de Harvard Business School en 1921,[35]
justificando el
nombre con el argumento de que: Como la ciencia admi-
nistrativa, el tema o área de conocimiento puede ser apli-
cado, es de carácter interdisciplinario y que cuenta con
las características típicas de una disciplina académica.[36]
Sus esfuerzos y los de otros, como el analista numérico
George Forsythe, fueron recompensados: universidades
pasaron a crear este tipo de programas de estudio, a partir
de 1962 en Purdue.[37]
A pesar del nombre de esta dis-
ciplina académica, una cantidad significativa de tópicos
en ciencias de la computación no involucran el estudio de
las computadoras, por esta razón muchos nombres alter-
nativos han sido propuestos.[38]
Algunos departamentos de universidades prefieren el tér-
mino “ciencias de la computación” para hacer énfasis en
esta diferencia. El científico danés Peter Naur sugirió el
término datología,[39]
para reflejar el hecho de que esta
disciplina científica gira en torno a los datos y a al tra-
tamiento de estos, mientras que no necesariamente invo-
lucra a las computadoras. La primer institución cientí-
fica en usar el término fue el Departamento de Datolo-
gía de la Universidad de Copenhague, fundado en 1969,
con Peter Naur como profesor de datología. El término
es usado en países escandinavos. En los primeros años de
la computación, un número de terminus para los practi-
cantes del campo de la computación fueron propuestos
en la revista Communications of the ACM – turingeniero,
turologo, hombre de los diagramas de flujo, matemático
meta-aplicado, and epistemologo aplicado.[40]
Tres me-
ses después en esa misma publicación científica, el tér-
mino computólogo fue sugerido. El siguiente año en la
misma publicación surgió el término hypologo.[41]
El tér-
mino computica también ha sido sugerido.[42]
En Euro-
pa, términos derivados de traducciones de la expresión
“automatic information” (e.g. “informazione automatica”
en Italiano) or “información y matemáticas” son frecuen-
temente usados, e.g. informatique (francés), Informatik
(alemán), Informática (Italia, Países Bajos), Informáti-
ca (España y Portugal), informatika (lenguas eslavas) o
pliroforiki (πληροφορική, que significa informática) en
Griego. Palabras similares han sido adoptadas en algunos
lugares del Reino Unido, por ejemplo en la Universidad
de Edimburgo.[43]
Pero estas no reflejan el aspecto de la
computabilidad, por esta razón en un contexto de investi-
gación científica tanto académica como industrial el tér-
mino ciencias de la computación es mayormente usado
en publicaciones y conferencias científicas.
4.3 Campos de las ciencias de la
computación
Como disciplina científica, las ciencias de la computación
abarcan una gama de temas, desde los estudios teóricos
de los algoritmos y los límites de la computación a los
problemas prácticos de la implementación de sistemas
computacionales en hardware y software.[44][45]
Compu-
ting Sciences Acreditation Board o la Junta de Acre-
23. 4.3. CAMPOS DE LAS CIENCIAS DE LA COMPUTACIÓN 19
ditación en Ciencias de la Computación. –Compuesta
por representantes de la Association for Computing Ma-
chinery (ACM), y la Sociedad de Computación IEEE
(IEEE-CS) [46]
– identifica cuatro áreas que considera cru-
ciales para la disciplina de ciencias de la computación:
teoría de la computación, algoritmos y estructuras de
datos, metodología y lenguajes de programación, arqui-
tectura de computadoras. Además de estas cuatro áreas,
C.S.A.B. también identifica ámbitos como la ingeniería
de software, inteligencia artificial, redes de computado-
ras y de telecomunicaciones, sistemas de bases de da-
tos, computación paralela, computación distribuida, la
interacción persona-computador, gráficos por ordenador,
sistemas operativos, cálculo numérico y simbólico siendo
importantes áreas de las ciencias de la computación.[44]
Ciencias de la computación teóricas El campo más
amplio de la ciencia de la computación teórica abarca tan-
to la teoría clásica de la computación y una amplia gama
de otros temas que se centran en los aspectos más abs-
tractos, lógicos y matemáticos de la computación.
Teoría de la computación
De acuerdo a Peter J. Denning, la pregunta fundamen-
tal en ciencias de la computación es, «¿Que puede ser
eficientemente automatizado?»[7]
El estudio de la teoría
de la computación está enfocado en responder pregun-
tas fundamentales acerca de que puede ser computado y
que cantidad de recursos son requeridos para ejecutar ta-
les cómputos. En un esfuerzo por resolver esta pregun-
ta, la teoría de la computabilidad examina que proble-
mas computacionales se pueden resolver en varios mode-
los teóricos de cómputo. La segunda pregunta está diri-
gida por la teoría de la complejidad computacional, que
estudia los costos de tiempo y espacio asociados a dife-
rentes enfoques para resolver una multitud de problemas
computacionales.
El famoso problema "¿P=NP?" es uno de los Problemas
del milenio,[47]
es un problema abierto en ciencias de la
computación.
Teoría de la información y códigos
La teoría de la información está relacionada a la cuanti-
ficación de la información. Fue desarrollada por Claude
E. Shannon para desarrollar los límites fundamentales del
procesamiento de señales así como sus operaciones, tales
como compresión y almacenamiento de datos así como la
comunicación de los datos de manera fiable.[48]
La teoría
de códigos es el estudio de las propiedades de los códigos
(sistemas para conversión de información de un lugar a
otro) y su ajuste para una aplicación específica. Los có-
digos son usados para comprimir datos, criptografía, de-
tección y corrección de errores y más recientemente para
la codificación de redes. Los códigos son estudiados para
el propósito de diseñar métodos eficientes y seguros para
la transmisión de datos.
Algoritmos y estructuras de datos
Los algoritmos y las estructuras de datos son el estudio de
métodos computacionales comúnmente usados así como
su eficiencia computacional.
Teoría de lenguajes de programación
La teoría del lenguaje de programación es una rama de
las ciencias de la computación que se ocupa del diseño,
implementación, análisis, caracterización y clasificación
de los lenguaje de programación y sus características in-
dividuales, cae dentro de la disciplina de las ciencias de
la computación, tanto en dependencia de las matemáticas
y la lingüística. Es un área de investigación activa, con
numerosas revistas académicas y conferencias especiali-
zadas en el tema.
4.3.1 Métodos formales
Los métodos formales son un tipo particular de la técnica
basada en las matemáticas para la especificación formal,
desarrollo y verificación formal de los sistemas de softwa-
re y hardware. El uso de métodos formales para el diseño
de software y hardware está motivado por la expectativa
de que, la realización de un análisis matemático adecuado
puede contribuir a la fiabilidad y robustez de un diseño.
Estos forman una importante base teórica para la ingenie-
ría de software, especialmente cuando está involucrado la
seguridad o robustez. Los métodos formales son un com-
plemento útil para las pruebas de software, ya que ayudan
a evitar errores y también pueden dar un marco para ha-
cer pruebas. Para su uso industrial, se requiere el apoyo de
herramientas. Sin embargo, el alto costo de la utilización
de métodos formales significa que por lo general sólo se
utilizan en el desarrollo de sistemas críticos de alta inte-
gridad donde la vida o la seguridad es de muy alta impor-
tancia. Los métodos formales se describen mejor como
la aplicación de un bastante amplia variedad de teóricos
fundamentales de la informática, en particular, los cálcu-
los lógica, los lenguajes formales, la teoría de autómatas,
y la semántica de los programas, sino también de tipo de
sistemas y tipos de datos algebraicos a los problemas en
el software y hardware de especificación y verificación.
Los métodos formales se describen mejor como la apli-
cación de una amplia variedad de fundamentos teóricos
de las ciencias de la computación, en particular la lógica
computaciónal, lenguajes formales, teoría de autómatas
y Semántica de lenguajes de programación pero también
áreas como sistemas de tipos y tipos de datos algebraicos
a problemas en la especificación y verificación de softwa-
re y hardware.
24. 20 CAPÍTULO 4. CIENCIAS DE LA COMPUTACIÓN
4.3.2 Ciencias de la computación aplicadas
Las ciencias de la computación aplicadas tratan de identi-
ficar ciertos aspectos conceptuales y teóricos de las cien-
cias de la computación que pueden ser aplicados directa-
mente para resolver problemas del mundo real.
Inteligencia artificial
Esta rama de las ciencias de la computación pretende o
es requerida para la síntesis de procesos meta-orientados
tales como la resolución de problemas, toma de decisio-
nes, la adaptación del medio ambiente, el aprendizaje y
la comunicación que se encuentran en los seres huma-
nos y los animales. Desde sus orígenes en la cibernética
y en la Conferencia de Dartmouth (1956), la investiga-
ción en inteligencia artificial (IA) ha sido necesariamen-
te multidisciplinaria, aprovechando áreas de especializa-
ción, tales como las matemáticas, la lógica simbólica, la
semiótica, la ingeniería eléctrica, la filosofía de la mente,
la neurofisiología, y la inteligencia social. La IA errónea-
mente es asociada en la mente popular con el desarrollo
robótico, pero el principal campo de aplicación prácti-
ca ha sido como un componente integrado en las áreas
de desarrollo de software que requieren la comprensión
y modelación computacional, tales como las finanzas y la
economía, la minería de datos y las ciencias físicas. El
término fue acuñado por el científico de la computación
y matemático John McCarthy en 1955.
Arquitectura de computadoras
La arquitectura de computadores u organización de
computadoras digitales es el diseño conceptual y la es-
tructura operacional fundamental de un sistema cómputo.
Se centra en gran medida de la manera en que la unidad
central de procesamiento realiza internamente y accede
a las direcciones en la memoria.[49]
El campo involucra
disciplinas de la ingeniería en computación y la ingenie-
ría eléctrica, la selección y la interconexión de los com-
ponentes de hardware para crear los equipos que cumplen
funciones, de rendimiento, y costes.
Análisis de rendimiento de computadoras
Análisis de rendimiento del equipo es el estudio del tra-
bajo que fluye a través de los equipos con el objetivo ge-
neral de mejora de rendimiento y control de tiempo de
respuesta, utilizando los recursos de manera eficiente, la
eliminación de los cuellos de botella, y la predicción de
rendimiento bajo cargas máximas previstas.[50]
Cómputo científico
La ciencia computacional (o computación científica) es el
campo de estudio que trata con la construcción de mode-
los matemáticos y técnicas de análisis cuantitativos así
como el uso de computadoras para analizar y resolver
problemas científicos. En el uso práctico, es típicamente
la aplicación de simulación por ordenador y otras formas
de cálculo a los problemas en diversas disciplinas cientí-
ficas.
Redes de computadoras
Esta rama de las ciencias de la computación que tiene co-
mo objetivo gestionar las redes entre computadoras en
todo el mundo.
Sistemas concurrentes, paralelos y distribuidos
Concurrencia es una propiedad de los sistemas en los
que varios cálculos están ejecutando de forma simultá-
nea, y, potencialmente, que interactúan entre sí. Un nú-
mero de modelos matemáticos han sido desarrollados pa-
ra el cálculo concurrente general, incluyendo las redes de
Petri, cálculos de proceso y del modelo de máquina de
acceso aleatorio en paralelo. Un sistema distribuido se
extiende la idea de la simultaneidad en varios ordenado-
res conectados a través de una red. Computadoras dentro
del mismo sistema distribuido tienen su propia memoria
privada, y la información es a menudo intercambian entre
sí para lograr un objetivo común.
Bases de datos
Una base de datos tiene la intención de organizar, alma-
cenar y recuperar grandes cantidades de datos de forma
sencilla. Bases de datos digitales se gestionan median-
te sistemas de gestión de base de datos para almacenar,
crear, mantener y consultar los datos, a través de mode-
los de bases de datos y lenguajes de consulta. Una base
de datos es un conjunto de datos interrelacionados entre
si mismos.
Informática en salud
Informática de la Salud se ocupa de las técnicas compu-
tacionales para la solución de problemas en el cuidado de
la salud.
Ciencia de la información
El campo estudia la estructura, algoritmos, comporta-
miento e interacciones de los sistemas naturales y arti-
ficiales que guardan, procesan, acceden a y comunican
información. También desarrolla sus propios fundamen-
tos conceptuales y teóricos y emplea fundamentos desa-
rrollados en otros campos.
25. 4.5. VÉASE TAMBIÉN 21
Ingeniería de software
Ingeniería de software es el estudio del diseño, imple-
mentación y modificación de software con la finalidad
de asegurarse de que es de alta calidad, asequible, fácil
de mantener, y rápido de construir. Es un enfoque siste-
mático para el diseño de software, que implica la aplica-
ción de prácticas de ingeniería de software. Los ingenie-
ros de software comercian con la organización y análisis
de software— no solo lidian con la creación o fabricación
de un nuevo software, sino también con su mantenimien-
to y disposición interna. Se prevé que estén entre las ocu-
paciones de más rápido crecimiento entre 2008 y 2018.
Debido a la novedad de este subcampo, la educación for-
mal en Ingeniería de software generalmente es parte de
los planes de estudio de ciencias de la computación, la
gran mayoría de ingenieros de software tienen un grado
académico en ciencias de la computación sin tener rela-
ción con la ingeniería.[51]
4.4 Relación con otros campos
Por 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 Turing. En la actualidad sigue
habiendo un intercambio de ideas útil entre ambos cam-
pos en áreas como la lógica matemática, la teoría de ca-
tegorí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 estu-
dio mismo de las máquinas conocidas como computado-
ras. De hecho, el renombrado científico Edsger Dijkstra
es muy citado por la frase «Las ciencias de la compu-
tación están tan poco relacionadas con las computadoras
como la astronomía con los telescopios». La investiga-
ción en ciencias de la computación también suele rela-
cionarse con otras disciplinas, como la ciencia cognitiva,
la física (véase computación cuántica), la lingüística, et-
cétera.
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 inge-
niería de software y sobre cómo se define a las ciencias de
la computación. Algunas personas creen que la ingenie-
ría de software sería un subconjunto de las ciencias de la
computación. Otras, 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ía en disciplinas diferentes. Este punto
de vista es el que sostiene, por ejemplo, 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 financiamiento
en las áreas de ciencias de la computación tienden a ver-
se influidos drásticamente por el criterio del departamen-
to 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áticas teóricas sue-
len 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 confun-
dirse con ciencia de la computación, designa a todas aque-
llas prácticas destinadas a modelar, plantear experimen-
tos 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,...), más que en la propia ciencia de la
computación.
Finalmente, el público en general algunas veces confun-
de la ciencia de la computación con áreas vocacionales
que trabajan con computadoras o piensan que trata acer-
ca de su propia experiencia con las computadoras, lo cual
suele incluir 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 en-
tender 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.[52]
4.5 Véase también
• Informático teórico
• Ciencias de la información
• Matemáticas
• Ingeniería en computación
• Anexo:Informáticos teóricos
• Programación
• Teoría de la computación
• Teoría de la complejidad computacional
• Problema de la cena de los filósofos
26. 22 CAPÍTULO 4. CIENCIAS DE LA COMPUTACIÓN
• Problemas no resueltos de las Ciencias de la Compu-
tación
• Anexo:Informáticos teóricos
• Mujeres en informática
• Premio Turing
4.6 Referencias
[1] "Computer science is the study of information" Department
of Computer and Information Science, Guttenberg Infor-
mation Technologies
[2] "Computer science is the study of computation." Computer
Science Department, College of Saint Benedict, Saint
John’s University
[3] "Computer Science is the study of all aspects of computer
systems, from the theoretical foundations to the very prac-
tical aspects of managing large software projects." Massey
University
[4] Anthony Ralston, Edwin D. Reilly, David Hemmendinger
(2000). Encyclopedia of Computer Science. Wiley. 978-0-
470-86412-8.
[5] http://www.cs.bu.edu/AboutCS/WhatIsCS.pdf.
[6] «WordNet Search - 3.1». Wordnetweb.princeton.edu.
Consultado el 14 de mayo de 2012.
[7] Denning, P.J. (2000). «Computer Science: The Discipli-
ne» (PDF). Encyclopedia of Computer Science.
[8] David Alan Grier (2005). When computers were human.
Princeton University Press. ISBN 84-89660-00-X.
[9] «Blaise Pascal». School of Mathematics and Statistics
University of St Andrews, Scotland.
[10] «A Brief History of Computing».
[11] En 1851
[12] «Science Museum - Introduction to Babbage». Archivado
desde el original el 8 de septiembre de 2006. Consultado
el 24 de septiembre de 2006.
[13] Anthony Hyman (1982). Charles Babbage, pioneer of the
computer.
[14] “La introducción de tarjetas perforadas en el nuevo mo-
tor era importante no sólo como una forma más conve-
niente de control que los tambores, si no porque se podría
programar de forma ilimitada, y estos programas podrían
ser almacenados y repetidos sin el peligro de introducir
errores en la configuracion a mano de la máquina; era im-
portante también porque sirvió para cristalizar sensación
de Babbage que había inventado algo realmente nuevo, al-
go mucho más que una máquina calculadora sofisticada.”
Bruce Collier, 1970
[15] «A Selection and Adaptation From Ada’s Notes found in
Ada, The Enchantress of Numbers,” by Betty Alexandra
Toole Ed.D. Strawberry Press, Mill Valley, CA». Con-
sultado el 4 de mayo de 2006. (enlace roto disponible en
Internet Archive; véase el historial y la última versión).
[16] “En este sentido Aiken necesitaba de IBM, cuya tecnolo-
gía incluida el uso de tarjetas perforadas, la acumulación
de datos numéricos, y la transferencia de los datos numé-
ricos de un registro a otro ", Bernard Cohen, p.44 (2000)
[17] Brian Randell, p. 187, 1975
[18] La Association for Computing Machinery (ACM) fue
fundada en 1947.
[19] «Some EDSAC statistics». Cl.cam.ac.uk. Consultado el
19 de noviembre de 2011.
[20] «Computer science pioneer Samuel D. Conte dies at 85».
Purdue Computer Science. 1 de julio de 2002. Consultado
el 12 de diciembre de 2014.
[21] Levy, Steven (1984). Hackers: Heroes of the Computer Re-
volution. Doubleday. ISBN 0-385-19195-2.
[22] Tedre, Matti (2014). The Science of Computing: Shaping
a Discipline. Taylor and Francis / CRC Press.
[23] «IBM 704 Electronic Data Processing System - CHM Re-
volution» (en inglés). Computerhistory.org. Consultado el
7 de julio de 2013.
[24] «IBM 709: a powerful new data processing system» (en
inglés). Computer History Museum. Consultado el 12 de
diciembre de 2014.
[25] «IBM 704 Electronic Data Processing System - CHM Re-
volution». Computerhistory.org. Consultado el 7 de julio
de 2013.
[26] «IBM 709: a powerful new data processing system».
Computer History Museum. Consultado el 12 de diciem-
bre de 2014.
[27] David Kahn, The Codebreakers, 1967, ISBN 0-684-
83130-9.
[28] http://web.archive.org/web/http://www.cis.cornell.edu/
Dean/Presentations/Slides/bgu.pdf
[29] Constable, R.L. (March 2000). Computer Science: Achie-
vements and Challenges circa 2000 (PDF).
[30] Abelson, H.; G.J. Sussman with J. Sussman (1996). Struc-
ture and Interpretation of Computer Programs (2nd edi-
ción). MIT Press. ISBN 0-262-01153-0. «La revolución
de la computadora es una revolución en la manera de pen-
sar y en la forma en que expresamos lo que pensamos. La
esencia de este cambio es la aparición de lo que podría
llamarse mejor epistemología procedimental —el estudio
de la estructura del conocimiento desde un punto de vista
imperativo, en oposición al punto de vista más declarativo
tomada por temas matemáticos clásicos–.»
[31] «Black box traders are on the march.» The Telegraph, 26
de agosto de 2006.