2009-05-14 7 views
9

自分がCompSciコースでより優れたプログラマの1人であるとは思っていますが、私は本当に数学に優れている人に魅了されています。私は数学タイプの課題や試験があるときはいつも私のアプローチは非常に定式化されている、つまりAのような問題に遭遇したらメソッドBを使用しなければならないと結果はCのように見えます。私は、私が改訂した問題を解決する方法しか分かりません。より良いプログラマになるための数学スキルを向上させる方法

今年の夏、アルゴリズムと計算の複雑さの分野にもっと深く浸るために、数学的問題とその解をよりよく理解するために時間を割いています。

ヒント?

答えて

26

あなたはまともな数学の能力を持っているように聞こえる - あなたはメカニックと多分あなたが学んだことの背後にある直感を少し理解して - しかし、あなたは良い問題解決に少し足りないことスキル、特にあなたは「私は以前に遭遇した問題を解決する方法しか知りません。

これを修正するには、Project Eulerをご覧ください。これらの問題を解決するための規定された方法はまったくなく、それぞれを成功裏に克服するために複数の知識領域を統合する必要があることがよくあります。特定の問題に対処するために多くのことをもたらす方法を見て、あなたのケーキを食べて食べるでしょう。より良いプログラマ/数学者になるでしょう。まったく違って見えているものがどのようにして実際に一体化したものになっているかを深く理解することができます。 (これは数学の多くの分野で特に当てはまります)

最後に、あなたの工芸のより良い実践者になるあなたの願いのためにあなたに誇り!誰もが同じレベルの野心を示していれば、私は一般的にソフトウェアがもっと良くなると思うのを助けることはできません。

+0

ProjectEulerリンクの場合+1。私はしばらくこのようなものを探してきました。 –

0

だと思います。私が読むことを楽しんだことのある本 - 数学の再訪から始まる - Matt BucklandのProgramming Game AI by Exampleです。

this bookを作成しましたが、もう一度それはどのようなプログラミングをしているのか、やる予定があるかによって異なります。

私は個人的には、物理​​学と代数学の理解が間違っているとは思いません。

2
  1. 練習練習練習
  2. ほとんどの大学(これは通常、無料であなたの授業料のお金を使用するために支払われる)で一般的に利用可能である個別指導サービスを使用します。
0

私は大学生時代を思い出させます。私は、問題を分析的に解決すること(すなわち、コンピューターレスの数学教授が黒板上で行う方法)よりも、数学的問題を提起し、数値またはモンテカルロの解を見つける方が簡単であることをすぐに知った。これは数値的な問題のために働き、一般的に数学的な経済学の試験に合格するほどあなたを助けません。

コンピュータで数学を行うもう1つの方法は、Mathematicaなどを使用することですが、数学上の問題が多いので、実際には何も学習しません。任意の複雑な関数を手で統合することは、ロケット科学である。 Mathematicaに任意の関数(解析的に!)を組み込むことは、calcを使うよりも難しくありません。exe

私は車輪を再発明し、オープンソースの自己完結型ライブラリを、応用数学の好きな枝を対象とする中括弧の言語で書くことをお勧めします。数学のAPIライブラリは、誰も触れることのできないブラックボックスを書くことが魔法のように難しいことで有名です。たとえば、何十年も誰もが改善していないような、Excelの統計プラグインです。誰が数学の図書館を書くかは、トンを学ぶでしょう。

-1

あなたがソフトウェアを理解したい場合は、私はこれらの分野となるだろうcategory theory

1

を勉強:

離散数学、線形代数、 組み合わせ論、確率と 統計、グラフ理論、数学的なロジック。

これはあなたのCSのほとんどのフィールド上のグリップを与えるだろう。あなたは特別なフィールドに移動したい場合は、特にいくつかの領域に飛び込む必要があります:あなたは、もちろんこれらのエントリを発見しただろう

Computer graphics -> Linear Algebra 
Gaming -> Linear Algebra, Physics 
Computer Linguistics -> Statistics, Graph Theory 
AI -> Statistics, Stochastics, Logic, Graph Theory 

blogs to freshen up my math in practicemath programming and learningを。彼らにはいくつかアドバイスがあります。

自分で線形代数とロジックにいくつかの良い基本的な本を取得後、他の

。 Sedgewickには基本的な数学の概念を持つアルゴリズムに関する良い本がいくつかあります。ジョン・ヴィンスはmatch concepts for computer graphicsにそれを持っています。

0

後藤www.projecteuler.netウェブサイト。 あなたは挑戦的な問題を見つけるでしょう。それらを解決しようとすると、あなたはいつか自分を誇りに思うでしょう。 good luck

8

最終的には、「サドルで少し時間を費やして」何か興味のあるものを選んで使い方を学ぶ必要があります。私はゲームプログラミングの数学に興味があったし、被写体に新ライダーの本を拾った - 現時点では名前を覚えていません。これは、概念や演習を持っていたし、私はそれを介して進むにつれて、私は概念や理論を理解しなかっただけでなく、実際にそれを置く方法を感じました。

あなたはこれらの関連の質問のいくつかを見てかかることがあります。そこにいくつかの良い答えがあります。彼らは皆あなたのケースには当てはまらないかもしれませんが、あるものはそうです。

How can I learn the math necessary for working with computer vision?

How to learn mathematical notation?

https://stackoverflow.com/questions/651865/basic-math-book-for-a-programmer

Learning Applied Statistics with a focus on R

https://stackoverflow.com/questions/568899/user-friendly-math-textbooks

https://stackoverflow.com/questions/509488/recommendations-for-discrete-math-resources

https://stackoverflow.com/questions/488502/best-language-to-program-some-math-free-fast-easy-cool-etc

Learning game programming (part 2) (math)

Math Resources for C/C++ Programmers

https://stackoverflow.com/questions/420500/helpful-math-classes-for-programmers

Math, programming, and learning

1

実装します。たくさん。

微積分と線形代数は悪い方法です。数学的方法は、あなたがそれらを実装することができるので、少しの努力で数学関連のものを実装することができるので、(コンピュータで実装されるように)役立ちます。

ここでは、あなたが探し始めることをお勧めするいくつかの科目です。私はそれぞれ少なくとも1つの種類を実装しており、数学だけでなく、難しい数学の問題を実際にどのようにプログラムするかを理解するのに役立ちました。

根の所見。 リニアシステムや他の行列操作(LU分解や効率的な行列式アルゴリズムなど)の解法。非線形システムの解法。 最小二乗法(連続および離散)。 補間(ラグランジェの多項式、ほとんどの単純な行列補間) 数値積分(ニュートンコート、チェビシェフガウス、ガウスラゲールなどの数値積分法が最も簡単だと思います) 数値常微分方程式(RungeKuttaと多段階方法)

さて、いくつかの非数値科目:

オペレーショナルリサーチ/線形計画/最適化:マトリックス表記でシンプレックスで始まる(私は個人的にこの複雑な呼び出し)は、動的プログラミングyourselfinto BranchAndBoundと冒険をしてみてください..

数字理論にはいくつかのinteresがあります特別なセキュリティと暗号化のアプリケーション

自分でVector3Dクラスを実装します。

また、ほとんどの最短経路アルゴリズムと検索を含むグラフを楽しんでください。私はこれを最も重要なデータ構造と考えています。

自分でチャレンジしたい場合は、最適化:キュー理論を詳しく調べてください。意思決定。アリコロニー最適化。

私はあなたのいくつかの洞察力を与え、あなたを恐れなかったことを願っています! :)

+0

私はこれが本当にまともな答えだと思っています。計算を介して数学的問題を解決する方法を学ぶことで、問題自体について多くの洞察を得ることができます。コンピューティングは数字ではなく、洞察についてのものです。 – temp2290

1

練習、練習と練習は答えです。私の子供は数学で問題を抱えていました。この問題は、Wiiゲームをプレイするのに費やす時間の半分よりも短い30分間、ほぼ毎日練習することによって克服することができました。この練習はwww.ourflashcards.comのこのツールで実現しました。私はそのツールを宣伝しているわけではなく、同じことを感じることを約束します。

関連する問題