より良いアルゴリズムを作成し、より良いプログラマーになるのに役立った、学んだ一般的な数学の式は何ですか?
例:エクリュディアン距離の公式について学びました。sqrt((x1-x2)^2+(y1-y2)^2)
これは、2つの要因を比較することにより、類似オブジェクトを見つける方法を理解するのに役立ちました。
より良いアルゴリズムを作成し、より良いプログラマーになるのに役立った、学んだ一般的な数学の式は何ですか?
例:エクリュディアン距離の公式について学びました。sqrt((x1-x2)^2+(y1-y2)^2)
これは、2つの要因を比較することにより、類似オブジェクトを見つける方法を理解するのに役立ちました。
回答:
2のべき乗を知ることは、特に低レベルのビット演算を扱う場合に便利です。
setsockopt(...SO_KEEPALIVE..)
比べてかなり読みやすいか書き込みであるsetsockopt(...16...)
ブール代数についてはすでに言及しましたが、実用的な例をいくつか提供したいと思いました。
ブール代数は、複雑なブール式(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) {...}
(P -> Q) <=> (!P | Q)
。論理含意演算子を提供する環境はごくわずかであるため、これを常に使用します。これは、SQL CHECK制約の非常に便利な同等物です。
私の経験では、数式は非常に特殊な計算に使用されますが、これはプロジェクトに適用される場合と適用されない場合があります。
何かを計算する必要がある場合は、通常、ライブラリまたはサンプルソースコードに関数があり、それを計算できます。たとえば、ExcelのPMT()関数は、Y期間にわたって債務をX%で返済するために必要な支払いを計算します。あなたは本当にそれがどのようにそれを計算するかを知りたいですか、それとも組み込みのものを呼び出すだけで十分ですか?
過去10年間、Ceil()、Min()、およびMax()以外のMathライブラリの何かを使用する必要はないと考えています。 、今日の一般的な用途は、データの流れに関する意思決定です。
たとえば、大量のコードを持っているFacebookを考えてみましょう。おそらくどこかにMathがありますが、主にCrypto APIが疑われます。これはおそらくシステムライブラリです。ただし、データベースへのアクセス、承認の決定、ページの構築、および情報のルーティングでは、おそらく大量のMathを使用しません。
はい、金融、物理学、工学など、多くの数学を必要とする市場がありますが、これらの業界では、主な分野は数学/経済学、物理学、工学などである可能性が高いため、質問は言語Yの式f(x)
あなたの時間、IMOのより良い使い方は、アルゴリズム(ビッグO表記を含む)とデザインパターンを調査することです。
基本的な統計式は知っておくと良いでしょう。少なくとも数回は線形回帰を使用しました。
De Morganの法則、否定に関連したブール「and」および「or」の変換、およびブール論理(二重否定など)に関するいくつかの関連するより基本的な情報。
「アルゴリズムは素晴らしい」ではなく、「xとyの間のすべての数値を合計するループを書く」と教えている学校が多すぎます。
また... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
プログラミングは非常に広い分野です。数学の公式は、プログラミングのどの領域に依存します。グラフィックス、ゲームプログラミングに興味がある場合は、より多くの三角法、ジオメトリを知る必要があります。ゲームプログラミングは、物理学、レンダリング、シェーダーなどの分野にさらに分類できます。リストは続きます。したがって、物理シミュレーションの専門家であれば、物理学に関連することを知っておく必要があります。
セキュリティに興味があるなら、あなたは数論の専門家でなければなりません。
一般的には、これらの組み合わせを使用できますが、興味のあるものはどれでもかまいません。学習は痛くない。
T(n)= aT(n / b)+ f(n)、a> = 1、b> 1
マスター定理は、プログラミングに役立つものです。再帰関係を解くことができ、再帰アルゴリズムの複雑さを見つけるのに役立ちます。これは、「分割統治」スタイルのアルゴリズムを記述するときに特に重要です。大まかに言うと、各「ステップ」の複雑さと分岐要因を知っていれば、マスター定理を使用して複雑さを得ることができます。
ブール代数を知ることは大いに役立ちます。次のようなコードを書くことを防ぎます
if (x < 10)
return true;
else
return false;
最適化の問題については、対数尤度を理解することをお勧めします。たとえば、平方和を最小化しようとする場合、尤度のログを最大化することと同じです。
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個の均一な(0,1)乱数を取得し、並べ替えます。5番目の分布は、ベータ分布であるFの分布です。モードは4/10です。平均は5/11です。その分散は5 * 6 /(11 ^ 2 * 12)= 0.021、標準偏差= 0.144です。
多くの人は、ソフトウェアのパフォーマンスの問題を特定し、誤った問題を発見しないようにするには、多数のサンプルが必要だと考えています。これらの分布は、少数のサンプルがコストについて多くを明らかにできることを示しています。
これは少し簡単かもしれませんが、G=(V,E)
心に留めておくべき良い方法です。言い換えると、グラフは頂点とエッジのセットです。グラフは、多くのものを表すのに非常に便利です。