Расширение возможностей программирования с лучшей математикой - PullRequest
6 голосов
/ 12 июля 2011

Я пришел к выводу, что рано или поздно мне захочется создавать более сложные приложения, которые будут принимать лучшие решения, а не просто простые операторы if / else.

Сейчас я изучаю математику по основам тригонометрии, я хотел бы получить навыки, необходимые для создания и понимания алгоритмов.

Из того, что я исследовал, мне нужно было понять и выучить следующие предметы:

  1. Продвинутая алгебра
  2. Исчисление
  3. Дискретная математика

К такому выводу я пришел. Также мне было интересно, есть ли сайт, где вы можете практиковать этот тип математики и отслеживать свой прогресс.

Спасибо.

Ответы [ 5 ]

5 голосов
/ 12 июля 2011

Позвольте мне перечислить несколько областей и почему вы должны изучить их:

Алгебра / Теория чисел : Существует целый ряд полезных теоретических алгоритмов, и в какой-то момент вам может понадобиться использовать / изменить существующий. Знание теории, объясняющей, почему они работают, значительно облегчает их запоминание (и повторное извлечение, если вы забудете;)). Классическим для такого алгоритма будет евклидов алгоритм для нахождения наибольшего общего делителя двух чисел. Более сложные алгоритмы, такие как квадратичное сито и т. Д., Имеют много применений в криптографии.

Теория графика : Надеюсь, мне не нужно слишком много объяснять. Графики используются для решения многих, многих различных задач в области компьютерных наук. Они используются для представления сетей, отношений между объектами, а также огромного класса специальных применений. Алгоритмы включают кратчайший путь, сетевой поток, раскраску и т. Д.

Линейная алгебра : Опять же, существует много научных применений линейной алгебры. Я думаю, что могу с уверенностью сказать, что основное использование линейной алгебры - это решение систем уравнений. Сложные дифференциальные уравнения решаются с использованием линейной алгебры. Умение умножать огромные матрицы и решать огромные системы линейных уравнений лежит в основе многих компьютерных симуляций. Более тесно связанные с повседневными вычислениями, компьютерная графика (особенно трехмерная графика) основана на линейной алгебре.

Исчисление : Это также должно быть само собой разумеющимся. Вы не продвинетесь слишком далеко в выполнении чего-либо, связанного с математикой и наукой, не зная исчисления. В то время как проклятие студентов колледжа, это действительно везде в современной науке.

Вероятность : Есть ряд вероятностных алгоритмов, которые полагаются на вероятность сделать свою грязную работу. Также симуляции могут также использовать случайность и вероятность для достижения хороших результатов. Нетрудно усвоить основы вероятности, а это все, что вам действительно нужно.

Статистика : пишете ли вы программу, которая рассчитывает статистику и выполняет статистические тесты, или вы сами используете статистику, это чрезвычайно полезный инструмент для расшифровки и интерпретации информации. На самом деле любой, не только математик и ученый, должен хотя бы иметь базовую статистику.

Числовой анализ : Это своего рода универсальный подход. Это то, что связывает математику и информатику вместе. Математика хорошо работает на бумаге, но когда вы начнете дискретизировать и ограничивать реальные числа, вы столкнетесь с проблемами. Для этого и нужен численный анализ. В нем описаны различные числовые проблемы, с которыми вы можете столкнуться при запуске этих математических алгоритмов, а также уловки математических / компьютерных наук, которые вы можете использовать, чтобы избежать / исправить их.

3 голосов
/ 12 июля 2011

Вы оставили несколько важных из своего списка:

  1. вероятность
  2. статистика
  3. линейная алгебра

Выне может быть слишком богатым, слишком худым или знать слишком много математики, но я бы спросил, нужно ли тебе идти по этому пути.Вы можете сделать много относительно сложной и полезной работы по программированию без использования исчисления или линейной алгебры;это просто не будет включать в себя научные вычисления или графику в Pixar.

Я бы также спросил, насколько вероятно, что что-то столь же строгое, как это может быть сделано путем самообучения.Вы были бы редким человеком, который освоил исчисление самостоятельно после завершения формального обучения.Математика - это, как правило, дверь с односторонним движением - если вы не пройдете через нее раньше, вам будет сложно вернуться позже.

3 голосов
/ 12 июля 2011

Хотя это очень субъективный вопрос, для которого правильность ответа не может быть должным образом оценена, вот несколько указателей:

  • Большинству алгоритмов требуется только один раздел математики. Если вы хотите построить алгоритмы в определенной проблемной области, вам может не понадобиться изучать все эти ветви. (Если вы просто хотите улучшить его, ответ становится еще труднее, поскольку очевидно, что все, что вы изучаете, является ценным.)

  • Проверка алгоритма конкуренции сайтов. Некоторые из них, такие как Project Euler, сосредоточены в основном на математических задачах. Другие (TopCoder, ACM ICPC, spoj, ...) ориентированы на все виды алгоритмов.

2 голосов
/ 12 июля 2011

Хороший обзор тем, полезных для информатики, можно найти в OpenCourseWare MIT.Посмотрев учебную программу для класса 6.042 (Математика для информатики), вы сможете получить представление о том, какие темы полезны: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/

Эта ссылка ведет к примечаниям к онлайн-курсу для класса, которыеотличный учебный инструмент.Курс экзаменов и ответы также доступны на OCW.Я определенно начал бы с работы с некоторыми из этих материалов, так как это требуется для всех студентов CS в MIT.

2 голосов
/ 12 июля 2011

Я обнаружил, что математическая индукция может быть очень полезной при разработке и понимании большого разнообразия алгоритмов. Есть хорошая книга, которая далеко продвигает эту идею: http://www.amazon.com/Introduction-Algorithms-Creative-Udi-Manber/dp/0201120372

...