¿Cuáles son algunas fórmulas matemáticas algo comunes que aprendiste que te ayudaron a escribir mejores algoritmos y convertirte en un mejor programador?
Ejemplo: aprendí acerca de la fórmula de la distancia ecludiana: sqrt((x1-x2)^2+(y1-y2)^2)
que me ayudó a entender cómo encontrar objetos similares al comparar 2 factores.
learning
math
algorithms
GSto
fuente
fuente
sqrt
paso. Para un circuito interno apretado, eso podría importar.Respuestas:
Conocer los poderes de 2 es útil, especialmente cuando se trata de operaciones bit a nivel bajo.
fuente
setsockopt(...SO_KEEPALIVE..)
es mucho más fácil de leer o escribir quesetsockopt(...16...)
El álgebra booleana ya se mencionó, pero quería proporcionar algunos ejemplos prácticos.
El álgebra booleana es útil muy a menudo cuando trabajas con expresiones booleanas complejas (en
if
declaraciones, por ejemplo).Par expresiones y leyes útiles:
Distributividad
Entonces, la próxima vez que te topes con esa expresión:
Puede reducirlo fácilmente a:
Negación y Ley de De Morgan
Digamos que tienes esa declaración:
y necesitas construir lo contrario de eso. Escritura:
funcionaría, pero no se ve tan genial como este equivalente:
fuente
(P -> Q) <=> (!P | Q)
. Lo uso todo el tiempo, ya que muy pocos entornos ofrecen un operador de implicación lógica, esta es una equivalencia muy útil para las restricciones SQL CHECK.En mi experiencia, las fórmulas matemáticas se utilizan para cálculos muy específicos, que pueden aplicarse o no a su proyecto.
Si necesita calcular algo, generalmente hay una función en una biblioteca o un código fuente de ejemplo que puede calcularlo por usted. Por ejemplo, la función PMT () de Excel, que calcula los pagos necesarios para pagar una deuda al X% durante los períodos Y. ¿Realmente desea saber cómo lo calcula o es suficiente con llamar al integrado?
En los últimos 10 años, no creo que haya necesitado usar nada de la biblioteca de Matemáticas que no sea Ceil (), Min () y Max (), lo que demuestra que a pesar de que las computadoras fueron diseñadas para resolver problemas matemáticos , el uso común hoy en día es la toma de decisiones en torno al flujo de datos.
Tomemos, por ejemplo, Facebook, que tiene una gran cantidad de código. Probablemente haya algo de Matemáticas en alguna parte, pero sospecho que principalmente en la API Crypto, que probablemente sea una biblioteca del sistema. Pero el acceso a la base de datos, las decisiones de autorización, la creación de páginas y el enrutamiento de información probablemente no usen mucho Math.
Sí, hay mercados que necesitan muchas matemáticas (finanzas, física, ingeniería), pero en estas industrias, es más probable que su disciplina principal sea matemática / economía, física, ingeniería, etc., por lo que sus preguntas serían '¿cómo puedo escribir? fórmula f (x) en el lenguaje Y?
Un mejor uso de su tiempo, IMO, sería investigar Algoritmos (incluida la notación Big O) y Patrones de diseño.
fuente
No existe una fórmula que pueda convertirte en un mejor programador.
Las habilidades relacionadas con las matemáticas pueden hacerte un mejor programador:
fuente
Las fórmulas estadísticas básicas son buenas para saber. He usado regresión lineal al menos algunas veces.
fuente
Me gustaría mencionar las series de Taylor que son bastante útiles para obtener aproximaciones rápidas de funciones "más pesadas". Por ejemplo,
sin(x)
alrededor de 0 se puede aproximar conx-(x*x*x/6)
.En general, la idea de que hay formas inteligentes de aproximar las cosas rápidamente, en lugar de calcularlas hasta el último dígito significativo (aunque para funciones elementales, la mayoría de los procesadores modernos contienen implementaciones rápidas cableadas, por lo que usar Taylor para aproximar el pecado puede no ser tan significativo ganancia de velocidad).
fuente
Las leyes de De Morgan, sobre la transformación de booleanos "y" y "o" en relación con las negaciones, y algunas cositas más elementales relacionadas sobre la lógica booleana (como la doble negación).
fuente
Regla de tres (tipo de multiplicación cruzada)
+1 para fórmulas estadísticas básicas.
Vi a muchos muchachos con dificultades para aplicar esta simple regla en el código básico.
fuente
Secuencia y series matemáticas.
He visto demasiadas escuelas enseñando "escribir un ciclo para sumar todos los números entre x e y" en lugar de "los algoritmos son IMPRESIONANTES"
También ... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
fuente
Ley de cosenos , muy importante para muchos problemas geométricos,
Especialmente la determinación del ángulo.
fuente
a^2 + b^2 = c^2
La programación es un campo muy amplio. La fórmula matemática depende del área de programación en la que se encuentre. Si le gustan los gráficos, la programación de juegos necesita saber más trigonometría, geometría. La programación de juegos se puede clasificar en áreas como física, renderizado, sombreador ... y la lista continúa. Entonces, si eres un experto en simulación de física, entonces debes saber cosas relacionadas con la física.
Si te gusta la seguridad, debes ser un experto en teoría de números.
En general, puede ir una combinación de estos, y cualquiera que sea su interés. Aprender nunca está de más.
fuente
Métodos de prueba
En particular, los que he usado con relativa frecuencia:
Hay más, y he usado muchos de ellos en un momento u otro, pero estos son los 3 que recuerdo haber usado de un vistazo. También son infinitamente útiles si puede tener en cuenta su intención al escribir pruebas unitarias o de integración.
fuente
T (n) = aT (n / b) + f (n), a> = 1, b> 1
Master Theorem es bueno saber para la programación. Le permite resolver relaciones de recurrencia que pueden ayudarlo a encontrar la complejidad de los algoritmos recursivos. Esto es particularmente importante cuando se escribe un algoritmo de estilo "divide y vencerás". En términos generales, puede utilizar el teorema maestro para obtener la complejidad si conoce la complejidad de cada "paso" y el factor de ramificación.
fuente
(los que están en brackers son más del tipo "aplicado")
Es difícil dar instrucciones generales, ya que depende en gran medida del campo en el que se encuentre. Pero lo anterior cubre los conceptos básicos de muchos grados de ingeniería. Eso sí, estas categorías a menudo se superponen (trigonometría + operaciones de matriz, cálculo + operaciones de matriz, y así sucesivamente).
Siempre tengo un manual matemático cerca. Uno a menudo no está seguro de algo, y ayuda a que se presente de manera organizada.
fuente
Conocer el álgebra booleana ayuda mucho. Le evita escribir código como
fuente
Para problemas de optimización, es bueno comprender la probabilidad de registro. Por ejemplo, si está tratando de minimizar una suma de cuadrados, es lo mismo que maximizar el registro de la probabilidad, porque (en términos generales)
Otros favoritos en el ámbito del ajuste del rendimiento son las distribuciones Binomial y Beta. Son muy simples de calcular.
Si toma 10 muestras de tiempo aleatorio del estado de un programa, y está en una determinada condición durante F = 40% del tiempo, entonces es como un experimento de lanzamiento de moneda con una moneda injusta. El número de veces que lo verá en esa condición es una distribución binomial con una media de 10 * 0.4 = 4 y una desviación estándar de sqrt (10 * 0.4 * 0.6) = sqrt (2.4) = 1.55.
Por otro lado, si toma 10 muestras y lo ve en esa condición en 4 muestras, ¿qué le dice eso sobre cuán grande es F? Los posibles resultados son 0, 1, 2, 3, 4, ..., 9, 10. Esas son 11 posibilidades, y la posibilidad que viste (4) es la quinta. Por lo tanto, tome 11 números aleatorios uniformes (0,1) y ordénelos. La distribución del quinto es la distribución de F, una distribución Beta. Su modo es 4/10. Su media es el 5/11. Su varianza es 5 * 6 / (11 ^ 2 * 12) = 0.021, y desviación estándar = 0.144.
Muchas personas piensan que se necesitan grandes cantidades de muestras para localizar problemas de rendimiento del software y evitar encontrar falsos. Estas distribuciones muestran que una pequeña cantidad de muestras puede revelar mucho sobre su costo.
fuente
Esto puede ser un poco simple, pero
G=(V,E)
es bueno tenerlo en cuenta. En otras palabras, un gráfico es un conjunto de vértices y aristas. Los gráficos son muy útiles para representar muchas cosas.fuente