¿Cuáles son buenas fórmulas matemáticas para saber para programar? [cerrado]

19

¿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.

GSto
fuente
2
No creo que sea la fórmula de distancia euclidiana.
Greg Hewgill
@Larry @Greg editado.
GSto
jaja ¿qué tal la secuencia de fibo ... bueno para la evaluación comparativa
aggietech
1
Fecha de finalización = (Fecha estimada + Número de días restantes / 2) ^ (Tiempo en el trabajo / Tiempo en casa) * Número de pizzas gratis
Skizz
77
Puede que le resulte interesante saber que si solo necesita comparar distancias, puede omitir el sqrtpaso. Para un circuito interno apretado, eso podría importar.

Respuestas:

16

Conocer los poderes de 2 es útil, especialmente cuando se trata de operaciones bit a nivel bajo.

AShelly
fuente
+1 - Ser capaz de convertir ay desde las bases 2, 16, 10 y 8 es imprescindible.
mouviciel
2
No estoy seguro acerca de la base 8, pero estoy de acuerdo con 2,16 y 10 conversiones. Debe ser capaz de hacerlo en un plazo razonable, pero no necesariamente al instante.
Incógnito
Mi único maestro es un animal hechizo. Convierte en su cabeza números ridículos y yo fui un TA para él durante un año más o menos, la clase siempre estaba impresionada como yo.
Chris
Odio la base 8 :)
1
Con macros, enumeraciones y campos de bits en lenguajes modernos, en qué casos las personas necesitan conocer potencias de 2, que son fundamentalmente números mágicos ... setsockopt(...SO_KEEPALIVE..)es mucho más fácil de leer o escribir quesetsockopt(...16...)
JBRWilkinson
15

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 ifdeclaraciones, por ejemplo).

Par expresiones y leyes útiles:

Distributividad

A y (B | C) = (A y B) | (A y C)

A | (B y C) = (A | B) y (A | C)

Entonces, la próxima vez que te topes con esa expresión:

if((A || B) && (A || C) && (A || D) && (A || E)) { ... }

Puede reducirlo fácilmente a:

if(A || (B && C && D && E)) { ... }

Negación y Ley de De Morgan

! (! A) = A

! (A y B) =! A | !SI

! (A | B) =! A y! B

Digamos que tienes esa declaración:

if(!A && !B && !C) {..}

y necesitas construir lo contrario de eso. Escritura:

if(!(!A && !B && !C)) {...}

funcionaría, pero no se ve tan genial como este equivalente:

if(A | B | C) {...}
serg
fuente
2
El problema al hacer esto es si se trata de reglas comerciales reales de la vida real, ya que tienen una tendencia a CAMBIAR. Si es así, debe reconstruir la expresión original para cambiarla y luego optimizarla nuevamente. Los mantenedores tienden a quejarse mientras lo hacen.
Y ahí es donde un mapa de Karnaugh puede ayudar. Solo funciona bien en hasta 4 banderas booleanas a la vez, pero si necesita más, ¡buena suerte!
Trabajo
3
+1 para la ley de De Morgan. Estoy sorprendido de cómo pocas personas parecen haber sido enseñadas y saben cómo aplicarlo.
Fortyrunner
Se le olvidó la siguiente: (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.
mu es demasiado corto el
La Ley de Karnaugh y De Morgan es algo que generalmente se le enseña a usar en las clases de ingeniería eléctrica, pero no en las clases de ingeniería informática. Lo cual es extraño, porque se pueden encontrar aplicaciones en este último como el uso práctico de la ley de De Morgan mencionada anteriormente.
Spoike
9

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.

JBRWilkinson
fuente
1
+1 porque parece una afirmación razonable: no hay una fórmula específica que deba conocer, pero el concepto de complejidad algorítmica (notación Big O) es muy importante.
Michael H.
Un montón de matemáticas ... Decide con qué anuncios molestarte.
Estoy de acuerdo en que la cantidad de matemática necesaria es generalmente bastante baja, aunque mi experiencia no es tan baja como la suya; termino periódicamente usando cosas trigonométricas en los gráficos.
Loren Pechtel
7

No existe una fórmula que pueda convertirte en un mejor programador.

Las habilidades relacionadas con las matemáticas pueden hacerte un mejor programador:

  • Método científico : forma de pensar matemática / científica y resolución de problemas
  • Abstracción : capacidad de reconocer abstracciones y patrones
  • Herencia : reutilización de trabajo / métodos existentes para resolver nuevos problemas
  • Experiencia : comprender un conjunto de problemas y soluciones
Branimir
fuente
-1, el hombre preguntó acerca de útiles fórmulas matemáticas. No puedo creer que esta respuesta haya sido votada en absoluto.
Jas
6

Las fórmulas estadísticas básicas son buenas para saber. He usado regresión lineal al menos algunas veces.

Nota para uno mismo - piense en un nombre
fuente
6

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 con x-(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).

Joonas Pulakka
fuente
3

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).

Peter Eisentraut
fuente
2

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.

Pagotti
fuente
+1 para multiplicación cruzada. En algunos programas propensos a problemas de desbordamiento de enteros, la multiplicación cruzada se utiliza para verificar que los resultados no se desborden.
rwong
2
No es un gran trato. Esto debería estar arraigado en la cabeza de un graduado de secundaria que desea estudiar CS.
Trabajo
@ Job: En un mundo teórico, ¡esto es cierto!
Pagotti
2

Ley de cosenos , muy importante para muchos problemas geométricos,

texto alternativo

Especialmente la determinación del ángulo.


fuente
¿Qué es gamma en esa ecuación?
Matt Ellen
1
@ Matt Ellen: el ángulo del lado a través del lado C (IOW, el ángulo entre A y B)
Lie Ryan
2
Y, por supuesto, un caso especial para los triángulos rectángulos:a^2 + b^2 = c^2
Nota para uno mismo - piense en un nombre
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
2

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.

Steven Evers
fuente
2

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.

Kurtis
fuente
1
¿Por qué es bueno saber para programar?
Matt Ellen
@MattEllen: 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.
Tikhon Jelvis
1
  • álgebra
  • trigonometría
  • vector (operaciones matriciales)
  • cálculo
  • [diversas interpolaciones y sus derivados]
  • [superficies, NURBS]

(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.

Torre
fuente
1

Conocer el álgebra booleana ayuda mucho. Le evita escribir código como

if (x < 10)
    return true;
else
    return false;
flujo libre
fuente
No estoy seguro de entender cómo el álgebra booleana ayuda a evitar que un usuario escriba eso. ¿Puedes proponer lo que el usuario debería escribir allí? (Supongo que return x <10; pero puede estar equivocado.)
Chris
1
Estás en lo correcto: debe ser return x <10. Piénsalo de esta manera. La evaluación (x <10) devolverá un resultado booleano. La instrucción if luego se desglosa en [if x es de hecho menor que 10] if (verdadero) devuelve verdadero; o [si x es mayor o igual a 10] if (falso) ... de lo contrario devuelve falso;
Eric Olsson
2
El (x <10) puede estar separando dos casos comerciales. Con la forma detallada, puede hacer más que solo devolver valores, lo que en modo de mantenimiento es muy bueno, ya que puede mantener los cambios al mínimo
1

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)

log( Product( exp( -(x[i]-mean)^2 )) )
  =
  - Sum( (x[i]-mean)^2 )

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.

Mike Dunlavey
fuente
0

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.

Jason Baker
fuente