あなたがより良いアルゴリズムを書いてより良いプログラマーになるのを助けたあなたが学んだいくつかの一般的な数学の公式は何ですか?
例:私はエクルディアン距離の式sqrt((x1-x2)^2+(y1-y2)^2)
について学びました。これは、2つの要素を比較することで、類似オブジェクトを見つける方法を理解するのに役立ちました。
2の能力を知ることは、特に低レベルのビット単位演算を扱う場合に便利です。
ブール代数についてはすでに触れましたが、実用的な例をいくつか挙げておきたいと思います。
ブール代数は、複雑なブール式(if
ステートメントなど)を扱うときに非常に便利です。
いくつかの有用な表現と法則:
分配率
A&(B | C)=(A&B)| (交流)
A | (B&C)=(A | B)&(A | C)
だからあなたは次にそのような表現に出会ったとき:
if((A || B) && (A || C) && (A || D) && (A || E)) { ... }
次のように簡単に縮小できます。
if(A || (B && C && D && E)) { ... }
否定とドモルガンの法則
!(!A)= A
!(A&B)=!A | !B
!(A | B)=!A&!B
あなたがそのような声明を持っているとしましょう:
if(!A && !B && !C) {..}
そして、あなたはそれの反対を構築する必要があります。書き込み:
if(!(!A && !B && !C)) {...}
動作しますが、この同等のものほどクールに見えません:
if(A | B | C) {...}
私の経験では、数式は非常に具体的な計算に使用され、プロジェクトに適用される場合と適用されない場合があります。
何かを計算する必要がある場合は、通常、ライブラリまたはサンプルソースコード内に、計算できる関数があります。たとえば、Y期間にわたってX%で負債を返済するために必要な支払いを計算するExcelのPMT()関数。本当にそれを計算する方法を知りたいですか、それとも組み込みのものを呼び出すだけで十分ですか?
過去10年間、Ceil()、Min()、Max()以外の数学ライブラリの何かを使用する必要がなかったと思います。これは、コンピューターが数学ベースの問題を解決するために考案されたにもかかわらず、 、今日の一般的な用途は、データの流れに関する意思決定です。
たとえば、膨大な量のコードがあるFacebookを例にとります。どこかにおそらく数学がいくつかありますが、おそらくシステムライブラリであるCrypto APIを主に疑っています。しかし、データベースへのアクセス、承認の決定、ページの作成、情報のルーティングでは、数学をあまり使用していません。
はい、金融、物理学、工学など、多くの数学を必要とする市場がありますが、これらの業界では、主な専門分野は数学/経済学、物理学、工学などである可能性が高いため、質問は次のようになります。式f(x)言語Y? '
IMOの時間をより効果的に使用するには、アルゴリズム(Big O表記を含む)とデザインパターンを調査します。
あなたをより良いプログラマーにすることができる公式はありません。
数学関連のスキルはあなたをより良いプログラマーにすることができます:
私は Taylor series について言及したいと思います。これは、「より重い」関数の迅速な近似を得るために非常に役立ちます。たとえば、sin(x)
の0はx-(x*x*x/6)
で近似できます。
一般に、物事を最後の有効数字まで計算する代わりに、物事を迅速に概算するための巧妙な方法があるという考え(基本関数の場合、ほとんどの最新のプロセッサには高速ハードワイヤード実装が含まれているため、テイラーを使用して罪を概算することはそれほど重要ではないかもしれません)スピードゲイン)。
基本的な統計式は知っておくと便利です。 線形回帰 を少なくとも数回使用しました。
否定に対するブールの「and」および「or」の変換に関するデモーガンの法則、およびブール論理(ダブル否定など)に関するいくつかのより基本的な関連情報。
プログラミングは非常に広い分野です。数学の数式は、プログラミングのどの領域にいるかによって異なります。グラフィックスやゲームプログラミングに慣れている場合は、三角法や幾何学についてもっと知る必要があります。ゲームプログラミングは、物理学、レンダリング、シェーダーなどの分野にさらに分類でき、リストは続きます。したがって、物理シミュレーションの専門家であれば、物理に関連することを知っておく必要があります。
あなたがセキュリティに夢中なら、あなたは数論の専門家でなければなりません。
一般的には、これらの組み合わせに行くことができます。学習は決して害はありません。
T(n)= aT(n/b)+ f(n)、a> = 1、b> 1
マスター定理 はプログラミングで知っておくと良いでしょう。再帰アルゴリズムの複雑さを見つけるのに役立つ再帰関係を解決できます。これは、「分割統治」スタイルのアルゴリズムを作成する場合に特に重要です。大まかに言えば、各「ステップ」の複雑さと分岐係数がわかっていれば、マスター定理を使用して複雑さを求めることができます。
「アルゴリズムはすごい」ではなく、「ループを書いて、xとyの間のすべての数を合計する」を教える学校が多すぎます。
また... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
コサインの法則、多くの幾何学的問題にとって非常に重要、
特に角度の決定。
ブール代数を知ることは非常に役立ちます。それはあなたがのようなコードを書くのを防ぎます
if (x < 10)
return true;
else
return false;
(ブラッカーのものは「適用された」種類のものです)
それはあなたがいる分野に強く依存しているので、一般的な方向性を与えることは困難です。しかし、上記はかなり多くの工学学位の基礎をカバーしています。ちなみに、これらのカテゴリはしばしば重複しています(三角法+行列演算、微積分+行列演算など)。
私はいつも近くに数学ハンドブックを持っています。 1つは何かがよくわからないことがよくあり、整理された方法で提示するのに役立ちます。
最適化の問題については、対数尤度を理解しておくとよいでしょう。たとえば、二乗和を最小化しようとしている場合、それは尤度の対数を最大化することと同じです。
log( Product( exp( -(x[i]-mean)^2 )) )
=
- Sum( (x[i]-mean)^2 )
パフォーマンス調整の領域で他のお気に入りは、二項分布とベータ分布です。計算は非常に簡単です。
プログラムの状態のランダムな時間のサンプルを10個取り、それがF = 40%の時間で特定の条件にある場合、それはちょうど不当なコインを使ったコイン投げ実験のようなものです。その状態で表示される回数は、平均10 * 0.4 = 4の二項分布であり、sqrt(10 * 0.4 * 0.6)= sqrt(2.4)= 1.55の標準偏差です。
一方、10個のサンプルを取り、その状態で4つのサンプルでそれを見た場合、Fの大きさについて何がわかりますか?可能な結果は0、1、2、3、4、...、9、10です。これは11の可能性であり、あなたが見た可能性(4)は5番目のものです。したがって、11個のuniform(0,1)乱数を取り、それらを並べ替えます。 5番目の分布は、ベータ分布であるFの分布です。モードは4/10です。その平均は5/11です。その分散は5 * 6 /(11 ^ 2 * 12)= 0.021、標準偏差= 0.144です。
多くの人々は、ソフトウェアのパフォーマンスの問題を特定し、誤った問題を見つけるのを避けるために、多数のサンプルが必要であると考えています。これらの分布は、少数のサンプルがコストについて多くのことを明らかにできることを示しています。
これは少し簡単かもしれませんが、G=(V,E)
は覚えておくと良いでしょう。つまり、グラフは頂点とエッジのセットです。グラフは多くのものを表すのにとても便利です。