Итак, есть много областей математики, которые имеют отношение к науке о КС, но специально для программирования:
Теория графов : это большая. Графики и деревья есть везде. Сети, карты, дорожки в видеоиграх. Даже такие вещи, как решение кубика Рубика, могут быть смоделированы как графовый алгоритм и решены с помощью A *.
Дискретная математика : помимо теории графов, знание этой области в целом полезно. Он полон доказательств по индукции, которые очень полезны для понимания рекурсии, что очень полезно в программировании, особенно со структурами данных. Знание о множествах, подсчете, включении-исключении, булевой логике и т. Д. Может пригодиться время от времени.
Теория типов: неудивительно, что знание теории типов помогает в понимании программирования на типизированных языках и, в более широком смысле, в использовании типов в качестве средства обеспечения определенных свойств корректности. Знание теории подтипов поможет вам понять ковариацию и контравариантность в Java-подобных языках. Знание таких вещей, как параметрический полиморфизм, очевидно, полезно при изучении таких языков, как Haskell или Purescript, но такие языки, как Scala, TypeScript и Rust, становятся все более распространенными в промышленности, а типы лежат в их основе.
Если вы доведите это до крайности, вы получите такие вещи, как Coq, Agda и Idris, которые можно использовать для доказательства чрезвычайно точных свойств правильности программ.
Теория вычислимости и сложности : знание, когда проблема неразрешима или NP-сложна, полезна, потому что вы не будете тратить часы, ломая свой мозг для быстрого способа сделать это. Аналогичным образом, знание некоторых теорий, лежащих в основе алгоритмов аппроксимации, управляемости с фиксированными параметрами или экспоненциальных алгоритмов с низким основанием, может помочь, когда вам действительно необходимо решить NP-сложную задачу.
Теория автоматов: многие проблемы могут быть смоделированы с помощью различных конечных автоматов, поэтому полезно понимать их свойства.