web-dev-qa-db-ja.com

プログラマーがアルゴリズムを学ぶために知っておくべき重要な数学のトピックは何ですか?

私はエレクトロニクスエンジニアであるため、アルゴリズムに触れることはありませんでした。今、私は経験豊富なプログラマーであり、アルゴリズムを学びたいです。私はCLRSから始めました。しかし、私は本の数学に圧倒されました。それでは、アルゴリズムを開始する前に知っておくべき最小の数学トピックはどれですか?

これに関する良いチュートリアルや本はありますか?ドナルド・クヌースによる数学の本を1冊見つけましたが、初心者にとっては、その詳細が多すぎて難しいと思います。

5
ashishjmeshram

アプローチを絞り込むことをお勧めします。さまざまな数学的側面に大きく依存している非常に多くのアルゴリズムがあり、それらすべてを学習しようとすると、本質的に巨大な時間問題に遭遇します。

代わりに、アルゴリズムについて学びたいなぜについてもう少し考えてください。それらを何に使いたいのですか?あなたが取り組みたい問題領域は何ですか?

たとえば、ほぼ完全に異なる3つの数学分岐である、離散数学と非離散数学、および確率論について考えてみましょう。

離散数学は、その離散状態が異なるため、ほとんどの場合マシン上で自然に表現できるため、プログラマーにとって非常に優れています。関連アルゴリズムの領域の主な例は、グラフアルゴリズム、数論アルゴリズムなどです。

非離散数学では、マシン上で正確に追跡することができない値の非常に小さな違いが許容されます。したがって、関数を抽象化し、最大値、最小値、交差点などの特定の点を見つけることに関心があります。この領域のアルゴリズムは、オペレーションズリサーチの領域から、ほとんどが最適化アルゴリズムで、より幾何学的な性質のアルゴリズムまで、さまざまです。テッセレーションのように。

一方、確率論はランダム性を扱うため、まったく新しいアルゴリズムの世界がそれに基づいています。単純なショットガンアプローチから、多かれ少なかれ関与するランダムウォークアルゴリズムまで。しかし、ここでは区別が難しくなっています。たとえば、グラフ理論や数論でも多くのランダム化アルゴリズムを見つけることができるからです。

これらはほんの小さな例です。数学だけでなく、アルゴリズムにも、上記に当てはまらない興味深い領域がたくさんあります。

要するに、私の答えは、あなたの質問は誤解を招くものであるということです。自分の人生全体をアルゴリズムに捧げたいのでない限り、ほとんどの場合、あなたやあなたの仕事にとって最も重要な特定の領域のアルゴリズムに焦点を当てます。数学的背景がほとんど不要なもの(動的プログラミングアルゴリズムなど)もあれば、多くの数学を最初に学習する必要があるものもあります(コンピューターグラフィックアルゴリズムで簡単に確認できます)。ですから、最初に行きたい方向を決めてから、その部分(通常は十分難しい)を学び、興味をそそる主題が見つかった場合でも、後で他の方向に拡張することをお勧めします。ただし、後で最終的にアルゴリズムを学習できるように、すべての数学を学習しようとしないでください。あなたはそこに着くことは決してないでしょう。

最後のアドバイス:これらの決定を行うためのアルゴリズムの分野を十分に明確に理解していない場合、いずれかが提供する「アルゴリズムの概要」(または同様の)講義の1つを訪問することは報われるかもしれません大学、本、オンラインコースなどの数。すべてを理解してもかまいません。必要な数学を逃した場合でも、アルゴリズムがどのような問題に役立つかについての要点を理解することができます。

9
Frank