Esto es más de lo que necesita, pero tal vez también a veces menos de lo que desea, dependiendo.
Conceptos básicos: ¿Qué es un logaritmo, qué es un exponente? ¿Qué es el módulo? Aritmética de enteros: ¿truncar vs redondear? ¿Qué indicadores de CPU pueden establecer un conjunto aritmético entero y por qué? ¿Cómo se representa un flotador, por qué es impreciso para decimal, qué es desbordamiento y subflujo? Binario, octal, hexadecimal … bytes, palabras, palabras dobles … ¿cuál es la diferencia? Lógica booleana: ¿Y, O, XOR? La ley de De Morgan? ¿Qué es la paridad? ¿Qué es asintóticamente más rápido, O (n log (n ^ 2)) u O (n sqrt n)? ¿Por qué el tipo de burbuja es malo, pero también, cuándo podría ser bueno?
Álgebra: cómo escribir una ecuación (a partir de un ‘problema de palabras’) y manipularla correctamente para obtener la variable que desea. (Esta habilidad puede oxidarse). Cómo simplificar o cambiar las ecuaciones en el código sin cambiar su resultado.
- Cómo resolver sumas consecutivas de UVa 12355
- ¿Cuál es la mejor manera de aprender Haskell como alguien con una sólida formación matemática pura?
- Cómo construir una computadora fuera del agua, y cómo ayuda esto con Navier-Stokes
- ¿Qué es una mónada?
- ¿Cuál es el mejor lenguaje para codificar ecuaciones?
Matemática aplicada (análisis numérico): ¿cómo encuentra una aproximación a una solución que sea lo suficientemente buena y cómo verifica que en realidad sea lo suficientemente buena (con el error vinculado que espera)? ¿Puedes encontrarlo sin una ecuación para la respuesta, acercándote hasta que la aproximación sea lo suficientemente buena?
Relevante para el hashing y la criptografía, especialmente: la teoría de números esenciales relacionada con los números primos, así como la aritmética modular. ¿Podría implementar el hash de cuco, por ejemplo, si no está en su biblioteca? ¿Podría hacerlo si tuviera que generar nuevas funciones hash en caso de que no se inserte un nuevo elemento? También hay muchas preguntas de rompecabezas relacionadas con los temas de los números primos, de una nota menos práctica.
Relacionado con la búsqueda exhaustiva y la optimización exhaustiva, o con posibles trucos para evitar hacer: combinatoria básica, suficiente para conocer al menos tus permutaciones de tus combinaciones.
Relacionado con las complejidades promedio del tiempo de ejecución y los algoritmos probabilísticos, o problemas que involucran probabilidad: suficiente de la teoría de probabilidad para conocer cosas como las distribuciones normales, poisson o binomiales. (En general, para ingeniería, conocer un PDF de un CDF, qué intervalo de confianza o valor p son). ¿Podría explicar la complejidad del tiempo de ejecución promedio de una lista de omisión?
Relacionado con todo: matemáticas discretas. Sepa cómo sumar los números del 1 al N, por ejemplo, y si desea ser un poco más peligroso, cómo encontrar fórmulas para las ‘relaciones de recurrencia’ en general (por ejemplo, inventando la forma cerrada para el Nth Fibonacci de rasguño u otra cosa).
En particular: teoría de grafos, tipos de gráficos, propiedades de gráficos, gráficos bipartitos, ciclos. Muchas cosas son reducibles a una representación gráfica, por lo que no es solo teórico.
Álgebra lineal: práctica, cuando surge el caso de uso. Diagonalizando matrices para exponenciación rápida, o invirtiendo o manipulando matrices para soluciones a sistemas de ecuaciones, o simplemente ejecutando matemáticas en paralelo con vectores. Comprender por qué ciertos problemas y sus datos pueden representarse en forma matricial.
Si solo tuvieras 6-10 horas y estuvieras mal: busca permutaciones (cómo contarlas), combinaciones (cómo contarlas), las fórmulas para la suma de un rango de enteros o enteros al cuadrado, las propiedades de logaritmos, algunas propiedades de la lógica booleana, algunas propiedades básicas de los primos, aritmética modular básica, cómo encontrar factores comunes o un ‘MCD’ o ‘MCM’, y eso es todo el tiempo que tiene.
Ah, y está el hecho divertido de que 2 ^ 10 es 1024. Eso puede ser útil para pensar en los poderes de 2 y relacionarlo con números familiares (2 ^ 10 es aproximadamente 10 ^ 3).
Me faltan algunas cosas; Hay libros sobre esto (principalmente bajo ‘matemáticas discretas’).
Para mayor claridad: en su mayor parte, estos no son problemas cotidianos en la vida de un programador. Prácticamente, el hecho de volverse muy, muy bueno pensando en errores ocasionales … evitaría muchos más errores (con mucho menos esfuerzo) que aprender todo lo anterior. Prácticamente, varias cosas anteriores surgen en aplicaciones que solo algunos programadores tocan, porque están construyendo las bibliotecas en las que confiamos (para que no tengamos que pasar años haciendo eso bien).
Entonces, a menos que su trabajo involucre tales cosas, mucho de esto sería para uso hobby o académico, principalmente, o para prepararse para la tendencia de la entrevista ‘algorítmica’. (Pero algunos de los conceptos básicos, sin duda, son muy importantes).