Análisis Algorítmico
Utiliza la combinatoria y las relaciones de recurrencia.
Una gran parte de la informática implica tratar de comprender cuán eficientes son los algoritmos para realizar tareas específicas. Desea una forma de poder considerar si un algoritmo es más rápido o requiere menos recursos que otro; de esta manera, puede diseñar programas que realicen la misma tarea con menos recursos. Esto es necesario si desea poder escalar sus aplicaciones para manejar entradas grandes.
Para hacer esto, los informáticos han inventado una serie de anotaciones y trucos para clasificar el rendimiento de los algoritmos. La idea es bastante sencilla:
- ¿Cuál es la importancia de la ciencia, la tecnología y las matemáticas para la nación?
- ¿Es más rápido correr en sentido horario o antihorario alrededor del perímetro de un campo perfectamente cuadrado, con una inclinación de aproximadamente 20 grados?
- ¿Por qué los científicos no han intentado desarrollar sus propias formas de modelado cuantitativo del mundo natural, independientemente de los paradigmas matemáticos en su mayoría no comprometidos científicamente y antiguos?
- ¿Puede la ciencia seguir funcionando si todas las adiciones se cambian a multiplicaciones y viceversa?
- Entre culturas e idiomas, ¿cuáles son ejemplos de diferencias en matemáticas y ciencias (en términos de notación, etc.)?
- La complejidad de tiempo (cuánto tiempo tarda) de un algoritmo es aproximadamente igual al número de operaciones que realiza en una entrada dada. Digamos que desea poder ordenar una lista de números [matemáticos] n [/ matemáticos]. Si el paso más costoso en este proceso utiliza aproximadamente [matemáticas] n ^ {2} [/ matemáticas], entonces usted dice que la complejidad del tiempo está en el orden de las operaciones [matemáticas] n ^ {2} [/ matemáticas], denotado como [matemáticas] O (n ^ {2}) [/ matemáticas]. Derivar la complejidad del tiempo implica muchas matemáticas, particularmente la combinatoria y las relaciones de recurrencia.
- la complejidad del espacio (cuánto espacio ocupa) de un algoritmo es aproximadamente cuántos recursos adicionales necesita para poder manejar la entrada. Nuevamente, tomemos una lista de números [matemáticos] n [/ matemáticos]. Si termina creando listas adicionales [matemáticas] n [/ matemáticas], cada una con un carácter, entonces tiene una complejidad espacial de [matemáticas] O (n) [/ matemáticas].
La complejidad temporal de los algoritmos a veces no es muy intuitiva. La exponenciación mediante el algoritmo de cuadratura puede llevar tiempo [matemático] O (log (n)) [/ matemático], por ejemplo. Aquí hay una derivación de la complejidad temporal del tipo de fusión usando series infinitas y relaciones de recurrencia.
Esquemas de compresión de datos
Utiliza probabilidad y estadísticas, mucho.
Muchos algoritmos por sí mismos explotan las matemáticas avanzadas. La probabilidad es un favorito perenne.
Los esquemas de compresión de datos se utilizan para comprimir archivos explotando patrones en los datos. Por ejemplo, en lugar de escribir ‘aaaaa’, una computadora podría simplemente marcar esa región en la memoria como 5a, lo que indica que esta sección tiene cinco a, reduciendo el número de caracteres necesarios para expresar eso de 5 a solo 2.
Sin embargo, a veces no es muy fácil discernir patrones que pueden ser explotados. Ahí es donde entra en juego la probabilidad. Los esquemas, como la mezcla de contexto, intentan predecir la siguiente región en la memoria a partir de todas las piezas anteriores, lo que puede ahorrar una gran cantidad de sobrecarga.
Visión por computadora, gráficos y procesamiento de imágenes
Utiliza álgebra lineal (y ocasionalmente cálculo)
Si alguna vez has jugado un videojuego o has visto animación, realmente estás viendo una de las hazañas matemáticas más monumentales en informática. Casi todo en los gráficos de computadora se puede describir como una transformación : se toma un vector y se le aplican varias matrices para obtener un nuevo vector. El vector es la unidad fundamental de los gráficos; una buena analogía es una línea recta. Encadenarlos juntos te permite crear gráficos realmente interesantes.
La visión por computadora trata de hacer que las computadoras entiendan lo que significan las imágenes. Las imágenes en realidad no son más que valores RGB codificados en una matriz, por lo que, donde vemos una obra de arte pintoresca, la computadora solo ve un área gigante de números. Si alguna vez has aplicado un filtro en Instagram, realmente has estado haciendo algunas multiplicaciones de matriz avanzadas notables.
Qué pueden hacer los algoritmos de desenfoque gaussianos con un poco de matemática
Muchos motores de juegos también utilizan la física para calcular cosas como la dispersión de la luz en los juegos 3D. Puedo decirle por experiencia que estas son integrales realmente complicadas y feas, y la mayoría de las computadoras usan algoritmos numéricos (como los métodos de diferencias finitas) para resolverlos.
Estructuras de datos
Utiliza la teoría de grafos
Este es un árbol de búsqueda binario, un ejemplo de un árbol binario y una estructura de datos.
Las estructuras de datos son abstracciones que le permiten manipular cómo se almacenan y acceden los objetos. Muchas estructuras de datos realmente interesantes, todas muy útiles, porque algunas de ellas pueden reducir los algoritmos potencialmente [matemáticos] O (n ^ {2}) [/ matemáticos] a solo [matemáticos] O (1) [/ matemáticos] ( tiempo constante ) algoritmos: son gráficos.
Creo que no es un error decir que la teoría de grafos es lo único que terminas aprendiendo si estás en informática. Puede usarlo para diseñar motores de ajedrez, por ejemplo, o construir Google Maps. La teoría de gráficos a menudo se preocupa por encontrar rutas (formas de ir de un nodo a otro) a través de un gráfico: si puede modelar su problema como un gráfico, puede aplicar soluciones de la teoría de gráficos en la mayoría de los casos.
Las estructuras de datos generalmente se agrupan con algoritmos en la mayoría de los cursos de CS.
Criptografía
Usa teoría de números
La criptografía utiliza muchas técnicas para hacer exactamente dos cosas:
- Haciendo números de operaciones en diferentes bases
- Factorizar enteros grandes, lo que requiere muchos trucos de la aritmética modular
No todo esto involucra matemáticas avanzadas: los desafíos criptográficos de Matasano presumen de que todos pueden resolverse con matemáticas muy elementales. Pero sí requiere que entres en la mente de un teórico de números.