理論的なCSおよび数学-自習の推奨事項


14

私は非CSの卒業生であり、私の研究分野はCSとは無関係です。しかし、コンピューター科学者になるという大規模な計画の一環として、CSに関連する理論的なコンピューターサイエンスと数学の強固な背景を得たいと思います。私はたくさんの研究を行い、CSと数学のトピックに関する以下の最高/本当に良い本を選びました。あなたの意見を聞きたいです:

  • カバーされているトピックの完全性(私が見逃したものをお勧めします)
  • 重なった素材のカバー/オーバーキルエリア(リストから削除する必要がある本を推奨してください)
  • 本を勉強する順序

リストは長すぎると感じているので、CSに必要なコア知識を失うことなく、いくつかの本を削除することをお勧めします。

したがって、本は次のとおりです。

  1. WWソーヤーによる数学者の喜び
  2. 証明方法:ダニエルJ.ヴェレマンによる構造化アプローチ
  3. 解決方法:G. Polyaによる数学手法の新しい側面
  4. グレッグ・マイケルソンによるラムダ計算による関数型プログラミングの紹介
  5. Al AhoとJeff Ullmanによるコンピューターサイエンスの基礎(http://i.stanford.edu/~ullman/focs.html)
  6. 具体的な数学:グラハム、クヌース、パタシュニックによるコンピューターサイエンスの基礎
  7. Michael Sipserによる計算理論の紹介
  8. オートマタ理論、言語、および計算入門:John E. Hopcroft、Rajeev Motwani、Jeffrey D. Ullman
  9. 計算の複雑さ:Oded Goldreichによる概念的展望
  10. 計算の複雑さ:ボアズ・バラクのサンジーエフ・アローラによる現代的アプローチ
  11. JH van Lint、RM Wilsonによる組み合わせ論コース
  12. 計算可能性:Nigel Cutlandによる再帰関数理論の紹介
  13. コンピューターと難治性:NP完全性理論のガイド(MR Garey、DS Johnson)
  14. Hartley Rogersによる再帰関数の理論と効果的な計算可能性
  15. GHハーディ、JEリトルウッド、G。ポリアによる不平等
  16. 数理論理学:演習を含むコース(パートI):命題微積分、ブッケ代数、述語微積分byRenéCori、Daniel Lascar
  17. 数理論理学:演習を含むコース(パートII):再帰理論、ゲーデルの定理、集合論、モデル理論、ルネコリ、ダニエルラスカー


このトピックの経験がまだない場合は、既知のアルゴリズムの本から始めてください。
AJed

@Bartek:ありがとう、しかしこれはリストをそもそも編集するために私が前に見た質問の一つでした。私の質問は、そこにあるすべての素晴らしい資料を実際に読む方法についてです。私は繰り返しなどを避けるために読んで、「ない」すべきかの本を知りたいので、時間は、常に制約である
CSLover

@AJed:数学の本#1-4の代わりに、リストの本#5から始めることを提案していますか?#5は、アルゴリズムとデータ構造の穏やかな紹介になると思います。
CSLover

ここが多すぎます。私はただ一つを選んで行き、そこに着いたら次に何が来るか心配します。Sipserを、CSの基礎の強固な背景を望む初心者向けに始めることをお勧めします。
usul

回答:


10

リストには非常に問題があります。

はじめに、6,11,12,14,15,16,17本を完全にスキップします。6、11、15本は一般的な数学であり、理論研究者にならない限り実際には必要ありません。本12と14は、計算科学ではない再帰理論を扱っています(計算可能性を扱っています!)。ブック16および17は、ロジックの高度なトピックを扱っていますが、必要なのは非常に基本的なロジックだけです。

本1、2、3から、数学と証明の一般的な紹介として役立つものを1つだけ選択します。

書籍5、7、8、9、10、13は、オートマトン理論、アルゴリズム、複雑性理論などのいくつかのテーマを扱っています。オートマトン理論と複雑性理論についてはSipser(Book 7)を、アルゴリズムについてはCormen、Leiserson、Rivest、Steinによるアルゴリズム入門( "CLRS")に従うことをお勧めします。

Book 4は関数型プログラミングを扱っています。私のコンピューターサイエンス教育にはこのテーマに関するコースは含まれていませんが、理論的なコンピューターサイエンスの多くの研究者は、機能プログラミングを重要な基盤の一部と見なしています。

要約:残っているのは

  • 書籍1〜3のいずれか(または同等の「証明の紹介」テキスト)
  • CLRS
  • ブック4(関数型プログラミング)
  • ブック7(オートマトン理論と複雑性理論)

このような徹底的な対応に感謝します。リストが過剰であることは知っていましたが、コンピューターサイエンティスト向けのあらゆる種類の本の推奨事項を読むと、長いリストになってしまいます。あなたの推薦は非常に実用的であり、それが私が求めていることです。ありがとうございます!!
CSLover

1
「数学は不要」というアドバイスには同意しません。コンピューターサイエンスのあらゆる側面を選択すると、数学がどのように必要かがわかります。より多くの数学を学べば、より良い結果が得られます。一方、学校に行かずに自分で本当の数学を学ぶことはほとんど不可能です。ですから、おそらくコンピュータサイエンスに集中するほうがよいでしょう。
アンドレイバウアー

5

また、利用可能な多くのオンラインコースの一部を利用することを検討することもできます。たとえば、スタンフォード大学マサチューセッツ工科大学はどちらもコンピューターサイエンスの(無料の)オンラインコースを提供していますが、他にも多くのコースがあると思います。

本に関しては、CLRSは非常に参考になりますが、座って読み通すだけの入門書としては圧倒的ですが、Yuvalの推奨事項の2番目です。アルゴリズム部分での最初のパスについては、Dasgupta et al。によるアルゴリズムをお勧めします。。以前のリンクは無料のオンラインプレプリントへのリンクでしたが、ペーパーバックで購入するのもかなり安価です。


OK。お返事ありがとうございます。どうもありがとうございました。
CSLover

2

あなたが提案している参考文献は、「非常に」理論的なコンピューター科学者になります。しかし、正直に言って、もしあなたが非CS学位から来たのであれば、これらの本をすべて読むことには何の利点もありません。もちろん、これはすべて必要なものに依存します。

Book 14、15、16、17などの一部の本は、コンピューター科学者向けではありません。ブック3は冗長です。それはどの学生にとっても一般的なことです。したがって、本1と2は同じだと思います。

私にとって-元々はコンピューター科学者ではなかったが(代わりに電気/コンピューターエンジニアである)あなたと同じ状況にいる-私は2つの最初の方向を提案します。

  • アルゴリズムの設計と分析(多くの人が提案するCLRSアルゴリズム入門をお勧めします。これは素晴らしいリファレンスですが、私はそれが大好きではありません。その目次に従い、そこからオンラインコースでより明確な参照を確認してください)。

---プログラミング言語を習得して、学習するアルゴリズムとデータ構造を実装するようにしてください-したがって、Sedgewickの一連のアルゴリズム(素晴らしい!)をお勧めします

---追加:この本もお勧めします:Combinatorial Algorithms:Generation、Enumeration、and Search by D.Kreher。これはとてもいい本です。アルゴリズムの多くの問題に対する異なる視点を提供します。

  • コンビナトリクス(特にグラフ理論)、JH van LintによるA Course in Combinatorics、RM Wilsonは良いです。他にも多くの参照が存在します。通常、よく知られているコンビナトリクスの本ならどれでも十分です。他のすべては、インターネットからの追加の参照から入手できます。個人的には、ピーターjキャメロンの組み合わせ論、ボンディとマーティのグラフ理論が好きでした。

  • 確率の賭け(常に必要)。科学の多くの分野が確率を使用していないことは驚くべきことです。しかし、私を信じてください、あなたが知っている必要があるのは基本だけです。

それから:理論的なコンピューター科学者と呼ばれる多くの研究者は、計算理論(オートモータなど)に非常に焦点を当てています。このための良い本がいくつかあります(Yuvul Filmusの投稿を参照)。

アホとウルマンは良いです(実際、ウルマンの本はすべて良いです)。コンパイラの設計に慣れてください(http://infolab.stanford.edu/~ullman/ullman-books.htmlを参照)。

その後:あなたが何をしたいかに依存します。1)データベース、2)パターン認識とデータマイニング、3)分散アルゴリズム、4)プログラミング言語の基礎、4)アルゴリズムのランダム化、その他多数。[それぞれに別の投稿が必要] が、すべてについて考えてみてください!

* 一般的な考え方:CSを初めて使用する場合は、できるだけ多くのCSサブドメインに慣れてください。自分を「理論」に制限すると、CSの創造性の多くが失われます。*(私の意見)


私にとって関数型プログラミング。あなたが引用したような古い本を使用しないでください。現在、業界では関数型言語が必要です。インターネットには、Scheme、Haskel、Erlangなどの言語に関するチュートリアルがいくつかあります。非常に理論的にはいけない、これは私のアドバイスです。
AJed

すべての良いコメント。私の目標は、完全な自習プログラムを設計することであり、この質問はプログラムのセクションのみを扱っています。その他の領域には、データ構造とアルゴリズム、コンピューターアーキテクチャ、オペレーティングシステム、ネットワーク、セキュリティと暗号化、並列処理、形式的手法、人工知能、グラフィックスとシミュレーション、データベース、プログラミング言語、コンパイラー、ソフトウェアエンジニアリング、そして最後にUnixの哲学と管理が含まれます。私が考えるこれらのほとんどは、CSにかなり基本的ですが、別の質問を保証します
CSLover

最適なトリックは、アルゴリズムの設計と分析の強力な基盤です。-他のすべてのフィールドは、アルゴリズムの設計と分析のサブフィールドです。
AJed

親切で、どのSedgewickアルゴリズムの本を推薦したかを明確にしてください。彼は「アルゴリズム」と呼ばれるものを持っていますが、それはシリーズではありません。彼は「C ++のアルゴリズム」(または他の言語)も持っています。
CSLover

私が使用したものはC ++のものでした。しかし、それらを参照として使用しました。これは彼のウェブサイトcs.princeton.edu/~rs
AJed
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.