62

2006年に非常に小さな学校を卒業して以来、形が悪く時代遅れのプログラムでした(私は外国人で、当時はこれ以上の学校を知りませんでした).他の高等概念の基礎となる数学的およびソフトウェアの観点。

つまり、アルゴリズム入門に関する MIT のオープン コースウェアを聞いたり見たりしようとしましたが、コースをよりよく理解するための数学的概念がいくつか欠けていることにすぐに気付きました。

では、優れたソフトウェア エンジニアが知っておくべきコアとなる数学的概念とは何でしょうか? そして、あなたが私に推薦する可能性のある本/サイトは何ですか?

4

27 に答える 27

62

プログラマーのための数学。よく読んだ。

于 2008-09-09T15:55:21.377 に答える
19

ブール代数は、制御構造とリファクタリングを理解するための基本です。たとえば、deMorgan の法則を知らなかった (または使用できなかった) プログラマーによって引き起こされた多くのバグを見てきました。別の例として、何人のプログラマーがすぐにそれを認識しますか?

if (condition-1) {
    if (condition-2) {
        action-1
    } else {
        action-2
} else {
    action-2
}

のように書き換えることができます

if (condition-1 and condition-2) {
    action-1
} else {
    action-2
}

離散数学と組み合わせ論は、さまざまなアルゴリズムとデータ構造のパフォーマンスを理解するのに非常に役立ちます。

Baltimark が述べたように、数学的帰納法はループと再帰についての推論に非常に役立ちます。

集合論は、リレーショナル データベースと SQL の基礎です。

類推として、大工は屋根や階段などを構築する際にさまざまな経験則のテクニックを日常的に使用していることを指摘しておきます. ただし、幾何学の知識があれば、「既定の」経験則がない問題を解決できます。それは、基本的な語彙の視覚認識と音声学による読み方の学習のようなものです。90% 以上の場合、大きな違いはありません。しかし、なじみのない状況に遭遇した場合、自分で解決策を見つけるためのツールがあると非常に便利です。

最後に、数学に必要な厳密さ/精度は、特定のテクニックに関係なく、プログラミングの準備として非常に役立ちます。繰り返しになりますが、私がこれまでのキャリアで見たプログラミング (または仕様) のバグの多くは、根本的な原因がずさんな考えに基づいています。

于 2008-09-09T16:57:00.820 に答える
12

ランドンが述べたフィールドを使用します。

離散数学、線形代数、組合せ論、確率と統計、グラフ理論

数学的論理を追加します。

これにより、CS のほとんどの分野を把握できます。特別な分野に進みたい場合は、特にいくつかの分野に飛び込む必要があります。

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory
于 2008-09-09T17:13:28.177 に答える
10

重要度順:

  • カウント (ループに必要)
  • 足し算、引き算、掛け算、割り算。
  • 代数 (変数の使用を理解するためにのみ必要です)。
  • ブール代数、ブール論理、バイナリ。
  • 指数と対数 (つまり、O(n) 表記を理解する)。

それよりも高度なものは、通常、アルゴリズム固有またはドメイン固有です。興味のある分野に応じて、以下も関連する可能性があります。

  • 線形代数と三角法 (3D 視覚化)
  • 離散数学と集合論 (データベース設計、アルゴリズム設計、コンパイラ設計)。
  • 統計 (まあ、統計および/または科学/経済アプリケーション用。アルゴリズム設計にも役立つ可能性があります)。
  • 物理学 (シミュレーション用)。

関数を理解することも役に立ちます (その分野の数学用語を覚えてはいけません) が、プログラミングの方法を知っていれば、おそらく既に行っていることでしょう。

私が言いたいのは、10 歳の子供はプログラミングを理解するのに十分な数の数学を知っているべきだということです。物事の基本的な理解に数学はあまり必要ありません。ロジックがすべてです。

于 2008-09-09T18:34:09.137 に答える
9

「帰納法による証明」は、プログラマーが知っておくべき重要な数学的概念です。

于 2008-09-09T15:42:11.017 に答える
9

一般的なアルゴリズム分析におけるBig O 表記、および標準コレクション (並べ替え、検索の挿入および削除) に関連する

于 2008-09-09T15:57:05.943 に答える
8

離散数学については、 Arsdigita大学からの 20 の講義の素晴らしいセットを次に示します。それぞれ約1時間20分の長さです。

于 2008-09-09T17:12:10.957 に答える
7

具体的な数学は、主要なトピックのほとんどをカバーしています。Rosen のDiscrete Mathematics and Its Applicationsのような離散数学に関する優れた本は、ギャップを埋めます。

于 2008-09-09T19:52:41.430 に答える
7

私たち CS 関係者が「離散数学」と呼んでいるものから始めます。微積分と線形代数も、多くのアプリケーション ドメインへの扉に足を踏み入れるので、非常に便利です。これら 3 つをマスターしたら、確率論に進みます。これらの 4 つにより、アプリケーション ドメインの 95% (私が作成したもの) でコンピテンシーを得ることができます。

于 2008-09-09T15:37:22.620 に答える
5

あなたの集中力次第だと思います。数年前、Donald Knuth の Art of Computer Programming のセットを購入しました。本を見た後、ほとんどすべてが微積分の証明であることに気付きました。独自の一般的なアルゴリズムとその証明を開発することに興味がある場合は、上記の本を理解できるようにすることをお勧めします。一方、さまざまなソート/検索/ツリー/などのルーチンのみを使用したい/使用する必要がある場合は、最小限の大きなO表記、ブール演算、および一般的な代数で問題ありません。3D を扱っている場合は、ジオメトリと三角も同様です。

私は証明を作成するよりも使用する側にいる傾向があり、何年にもわたっていくつかの賢いことをしたと思いたいのですが、座って新しいソートルーチンを開発したことはありません. 私ができる最善のアドバイスは、自分の分野に必要なものを学ぶことですが、それが存在し、学ぶべきことがどれだけあるかを知るために、より高いレベルに身をさらすことです。そうしなければ、大きな成長は得られません.

于 2008-09-09T16:26:43.267 に答える
4

ブール論理だと思います。AND、OR、XOR、NOT。プログラマーとして、これは他の数学概念よりも頻繁に使用することがわかりました。

于 2008-09-09T16:11:36.390 に答える
3

基本的な代数と統計学は良い出発点であり、他の多くの分野の基礎となります。

于 2008-09-09T15:40:50.817 に答える
2

「TheArtofComputer Programming」の第1章は、まさにこれを提供することを目的としています。

于 2008-09-18T15:39:46.470 に答える
2

以下は、理解していない開発者を見ると困惑する単純なものです

于 2008-09-09T17:13:47.880 に答える
1

数学をブラッシュアップするためのサイト: http://www.khanacademy.org/

于 2010-04-29T13:34:02.293 に答える
1

推薦された本がありました...タイトルは具体的な数学のようなものでした. いくつかの質問で推奨されました。

于 2008-09-09T15:38:21.277 に答える
1

学校に戻って、私のインストラクターの 1 人が、ビジネス アプリケーションについて、足し算、引き算、掛け算、割り算について知る必要があると言いました。リクエスタが知っている他のすべての式は、何が必要かを通知します。これは、報告とアプリケーションに焦点を当てた学校の資金調達のためであることを理解してください。今日まで、これは私に当てはまりました。それ以上のことを知る必要があったことは一度もありません。

于 2008-10-24T20:36:38.047 に答える
1

書籍Foundations of Computer Science を確認してください。
この書籍の著者は Al Aho と Jeff Ullman で、書籍全体はオンラインで入手できます。

本書の目的について、著者は序文で次のように述べています。

Foundations of Computer Science
は 、個別の数学コースと、データ構造におけるコンピューター サイエンスの 2 年生レベルのシーケンスとの間で分割されることが多い科目をカバーしています。 コンピューター ユーザーが本当に必要としているものに目を向けて
、数学的基礎を選択することが私たちの意図でした。 、 数学者が選択するもの
ではなく。」

于 2009-12-17T12:08:16.497 に答える
0

機械学習に似た何かをしなければならない場合、確率と統計は非常に役立ちます。

XboxLiveのTrueSkillランキングとマッチメイキングアルゴリズムがどのように機能するかについて説明する「 ComputingYourSkill 」ブログ投稿で基本をカバーしています。

于 2010-04-14T17:14:14.817 に答える
0
  • ブール代数
  • 集合論
于 2008-10-24T15:29:16.170 に答える
0

離散数学
線形代数
組み合わせ
論 確率と統計
グラフ理論

于 2008-09-09T17:03:47.967 に答える
0

微積分について言及せずに、なぜ誰もがゴールドリストに確率と統計を含めているのですか? 極限、導関数、積分、および級数に関する実用的な知識がなければ、確率と統計とは何かを理解することはできません。全体として、微積分は (線形代数と共に)すべての数学の主力です。

于 2008-10-24T15:58:05.377 に答える
0

まあ、それはあなたの目標が何であるかに依存します。誰かが言ったように、難しい問題を解決したいなら、線形代数、組み合わせ論、確率と統計学、グラフ理論が重要です。関数の漸近的成長 (bit-Oh 表記) は非常に重要です。より複雑なアルゴリズムの分析に取り組む必要がある場合は、合計と級数もマスターする必要があります (Cormen&others Intro to Algorithms の付録を参照してください)。

「エンタープライズ向け Java」や「サーバーサイド PHP」に興味がある場合でも、統計とアルゴリズムの複雑さ (つまり、組み合わせ論、帰納法、総和、級数など) が、上司からサーバーの取得を求められた場合に役立つことがあります。動作が速くなり、新しいハードウェアを追加しても効果がないようです。:-) 私はそれを一度経験しました。

于 2008-10-18T15:58:25.050 に答える
0

私の数学のバックグラウンドは本当に貧弱です (トレーニングによる地質学者) が、高校で個別の数学のクラスを取り、プログラマーとして毎日その概念を使用しています。それは私の現在の職業に関連しているので、おそらく私が受けたすべての教育の中で最も価値のあるクラスです.

于 2008-09-09T15:39:51.070 に答える
0
  • ブール代数
  • 集合論
  • 離散数学
于 2008-09-09T17:38:12.657 に答える
0

ええ、帰納法の基本的な理解は、アルゴリズムで n が何を表しているかを理解するのに役立ちます。また、いくつかのロジックと離散構造が役立ちます。

于 2010-04-14T17:08:42.933 に答える
0

アルゴリズムと理論は非常に重要だと思います。迅速かつ正確な解決策を思い付くことができることが、優れたプログラマーを他のプログラマーと区別するものです。また、(帰納法、矛盾法などの標準的な証明手法を使用して) アルゴリズムを証明できることも同様に重要です。

于 2008-11-13T07:25:14.847 に答える