あなたは大学に行かなくても良いプログラマーになることができますが、基本的な計算複雑性理論を知らなくても、優れた中間プログラマーになることはできません。あなたは 'big O'表記法を知る必要はありませんが、私は個人的には、 '一定時間'、 'n log n'と 'n squared'の違いを理解できなければならないと思います。この知識がなくても、時間と空間とのトレードオフの仕方を知ることができるかもしれませんが、不在の場合、同僚とのコミュニケーションのための確固たる基盤はありません。
アルゴリズムの設計または理解にあたっては、実行に要する時間は入力のサイズの関数であることがあります。それが真であるとき、アルゴリズムの最悪/予想/最良ケースの実行時間は、サイズの対数($ n $)に比例すると 'n log n'と言うことができます。表記法および発声法は、データ構造によって占められる空間にも適用することができる。
私にとって、計算の複雑さの理論は美しく、物理学ほど深く、そして少しは遠くに行くのです!
時間(プロセッサー・サイクル)とスペース(メモリー)はお互いにトレードオフできます。エンジニアリングは妥協であり、これは良い例です。必ずしも体系的ではありません。しかし、一般的には、デコードする必要があるときに計算時間を犠牲にして、より厳密にエンコードすることでスペースを節約できます。キャッシュの一貫性を維持しなければならないため、キャッシュすることで時間を節約することができます。つまり、何かのローカルコピーを格納するためのスペースを費やすことができます。データ構造内でより多くの情報を保持することによって、時間を節約することができます。これは通常、わずかなスペースしか必要としませんが、アルゴリズムが複雑になる可能性があります。
空間/時間のトレードオフを改善することは、しばしば一方または他方を劇的に変えることができる。しかし、これに取り組む前に、あなたが改善しているものが、本当に最も改善が必要なものなのか、自分自身に尋ねてください。アルゴリズムで作業するのは楽しいですが、問題ではないものを改善することで目立った違いはなく、テストの負担をかけることはありません。
現代のコンピュータのメモリは、プロセッサ時間とは異なり、壁に衝突するまで使用されていないため、安価に見えます。失敗は壊滅的です。常駐しなければならない他のプログラムへの影響や、割り当てや割り当てを解除する時間など、メモリを使用するための隠されたコストもあります。スピードを上げるためにスペースを取り除く前に、これを慎重に検討してください。
Next How to Stress Test