web-dev-qa-db-ja.com

私はCSの学生です。正直なところ、Knuthの本は理解できません。

私はビルゲイツ氏からのこの引用に出くわしました。彼はプログラミングの芸術本について話していました。だから私はかなり好奇心が強く、それをすべて読みたいと思いました。でも正直なところ、わかりません。

私はそんなに知的ではありません。だからこれが分からないのですが、学びたいです。私は現在、基本的なアルゴリズムについて第1巻を読んでいます。私のような初心者/遅い人にとって親しみやすい本はありますか。これは、将来Knuthの本を簡単に読むことができるように私の知識を蓄積するのに役立ちますか?

52
Rho

Knuthの本は少し進んでいて理解しにくいと思います。これらの本は間違いなく研究レベルのアルゴリズム論者IMHO向けです。

それで、私のような初心者/遅い人に優しい本はありますか?

CLRSによるアルゴリズムの概要 の方がはるかに単純です。

[〜#〜]編集[〜#〜]

それでも、あなたがKnuthの本を読みたいなら、まず コンクリート数学 を通過する必要があります。 Knuthは、生徒がアルゴリズム分析の基本的な数学の部分に気付くことを望んでいます。

39
Prasoon Saurav

これを含むGatesの引用のすべてを必ず読んでください:

「私がそれを読むのに信じられないほどの規律と数ヶ月がかかりました。20ページを研究し、1週間置いて、さらに20ページに戻ってきました。誰かがすべてを知っていると思うほどに勇気がある場合、Knuthは世界が深くて複雑であることを彼らに理解してもらいましょう。」

彼らは簡単な本ではなく、そうすることを意図していません。 Knuthの目標の1つは 数学的厳密さをコンピューターサイエンスにもたらす であったことを思い出してください。アルゴリズムについて何かを証明したい場合は素晴らしいですが、アルゴリズムの動作を知りたいだけの場合はそれほど大きくありません。

マイケルドーフマンにはいくつかの Stackoverflowの(現在は削除されています)たくさん読んで何が得られるかという質問に対する彼の回答で、本を読むための良いヒントがあります 。 10k担当者がいない場合でも、質問とその回答を ウェイバックマシン で表示できます。

たくさん読んで何を手に入れますか?コンピュータサイエンスの優れた基盤。ロジックゲートからコンパイラまで、コンピュータの動作を理解します。あなたは実際に問題であるとは決して知らなかった問題(つまり、乗算する最速の方法は何ですか?)について考え、関係がないと思っていたもの(川床、RNA、ネストされた括弧など)の間のアルゴリズム接続を確認します。

「ソフトウェアの構築について読むのではなく、ソフトウェアを構築する」と言う人にはまったく同意しません。ソフトウェアエンジニアリングとコンピュータサイエンスの分野には違いがあります。 TAOCPは後者についてです。

あなたがまだ始めていないなら、私はいくつかの推奨事項を持っています。

まず、第4巻から始めたいと思うかもしれません。これは非常に最新のエキサイティングな資料であり、Knuthのユーモアのセンスが輝いています。さらに、Knuthがさまざまなセクションについて説明しているビデオが(Stanford SPCDサイトまたはStanford iTunesで)入手可能です。これらのビデオを強くお勧めします。第4巻の束0、1、2、3、および4は、個別のペーパーバックとして入手できます。まとめると、公開されたV4の素材は最初の3巻のどれよりも大きいですが、一口サイズのおやつにスライスされています。 (各ボリュームが1チャプターのペーパーバック形式で公開されていれば、ボリューム1から3は人々にとってそれほど恐ろしくないように思えます...

数学の背景にもよりますが、最初に第1章を読み飛ばし、必要に応じてそれに戻ることをお勧めします。実際、おそらく各セクションを(少なくとも)2回読んだほうがいいでしょう-最初はすぐに、直感と議論の要点を理解するために、そしてゆっくりと慎重に、各ステップを理解してください。

MIXの古いセクションではなく、MMIXのボリューム1、ファシクル1を必ずお読みください。 MMIXは多くの点で優れており、両方の世界にまたがるよりも、テキストのMIXをMMIXに変換した方がよいでしょう。

一般的なルール:演習をスキップしないでください。質問(および回答)には多くの優れた資料があります。できるだけ多くの練習をしてください。しかし、それらをすべて読んでください(そして、問題を一撃したり、問題を解決したりしたら、答えを読んでください)。

最後に、本当にバグを見つけたら、インデックスを読んでください。そこに隠されたたくさんの素晴らしいジョーク。

当然、StackOverflowは、テキストに特定の質問を投稿するのに適した場所です。

他のリソースについては、定評のあるコンピュータサイエンススクールのシラバスを閲覧すると役立つことがわかりました。たとえば、アルゴリズムクラスを始めるための教科書:

57
Corbin March

Knuthは、歴史上最も尊敬され、引用され、話題にされ、非常に尊敬されているコンピューターサイエンスの作者です。彼の本はすべての真面目なソフトウェア開発者の本棚を飾っていて、人々が聖書と戦争の芸術に与えるのと同じレベルの敬意をもって言及されています。

some人は実際にread Knuthの本の一部を持っていると聞いたことがあります。

ほとんどの人はintend toだけです。

個人的に、私は引退のためにそれらを保存しています

29
Steven A. Lowe

クヌースの本はアルゴリズムの分野を永遠に変えました。彼自身は、「私の本の2ページは誰かのキャリアワーク全体である」と彼の本は読むのが難しかったと言っています。この本には、コンピュータサイエンスでの長年の仕事からの凝縮された資料が含まれています。

理解できなくても気分は悪くないはずです。

Prasoonが言ったように、CLRSは読みやすい本です。

Rajasekaran、Sahniらによるアルゴリズムもあり、簡単に理解できます。

20
Arjun J Rao

私が最初に卒業したとき、私はTAOCPの最初の3巻を自分への卒業式の贈り物として手に取り、それらをまっすぐに読もうとしました。それを管理することはありません。最近、私は最初の3巻の3分の1を通過しました(順不同で考えました)。素材は間違いなく密度が高いですが、私が学んだ3つのヒントがとても役に立ちました。

まず、最初から最後まで読んでみないでください。 TAOCPは実際のところ参考資料であり、解決しようとしている問題に関連するセクションを読むのが最善の方法です。世界中の多くのことと同様に、解決しようとしている問題に遭遇すると、解決策を理解するのがはるかに簡単になります。

次に、本の表紙にあるフローチャートは、ちょっとしたユーモアだけでなく、実際には非常に役立つヒントです。繰り返し取り組んでいるセクションを読んでください。最初は包括的な概念から始め、次にゆっくりと数学を深めていきます。

最後に、古き良き古紙と鉛筆を手元に置いて、説明されているアルゴリズムを実行し、簡単な問題のいくつかを実行します。それはあなたが読んでいるものを強化するのに役立つ長い道のりです。

12
Cercerilla

心配しないでくださいほとんどの人はThe Art of Computer Programming(TAOCP)を理解していません]だから、理解していなくても自分が遅いとか初心者だと思ってはいけません。あなたは他の人と同じです受け取れない人の99.99%。

あなたはTAOCP 簡単にを読むことができるレベルに到達したいのであればかなり意欲的です。私自身、本を片付ける前にページをめくっただけです。この地球上でTAOCPを理解している人はおそらくほんの一握りでしょう。

ポストをチェックしてください: 本のプログラマは本当に読みません ビル・ザ・トカゲ。

他のたくさんの本がリストされており、それらはかなり読みやすい理解できる、そして次のことができますすぐにメリット

私は個人的に好きです:

10
spong

私はビルゲイツ氏からのこの引用につまずきました。「すべてを読むことができたら、必ず履歴書を送ってください」彼はThe Art of Programmingの本について話していました。それで私はかなり好奇心が強く、それをすべて読みたいと思っていましたが、正直に言って、まったく理解できません。I'm really not that highly intellectual being ..これが私が理解できない理由であるべきですが、私は学びたいと思っています..私は現在、基本的なアルゴについて第1巻を読んでいます。したがって、初心者に優しい本があります。 /私のような遅い人?ですから、自分自身を築くことができ、将来的には、クヌースの本を安心して読むことができれば幸いです。

not a highly intellectual beingその後、期待を低く設定しています。トラブルに見合う価値のあることをしたいなら、その考え方を破らなければなりません。あなたが何かを成し遂げることができることはあなたの心に疑いがないはずです。また、それを達成しても、簡単に達成できるわけではありません。

追求する価値のあるものは難しいものです...そしてそれは決まり文句ではありません。ソフトウェア、エンジニアリング、生活全般において、何かを達成したい場合、難しいこと、人々が避けていること、そして最も一般的なものの分母に妥協しないことを求めなければなりません。

まず、CSの背景が明確ではありません。クヌースの本にはある程度の成熟が必要です。 CSの学位を持つ人は、簡単にそれを通過することはできません。アルゴリズムの最初のコースを終了したばかりのCSの学生が、実際にKnuthの本を1冊も読むことができるとは思いません。それを達成するために必要な成熟度はそこにはありません、そしてそれは学生の精神的能力とは何の関係もありません。

アルゴリズムの基本を冷たく明確にしておく必要があり、かなりの量のプログラミング(仕事や学業)を身につけておく必要があります。少なくとも40単位はプログラミングに必要だと思います。また、CS数学をしっかり基礎に置く必要があります。

離散数学(およびおそらく計算理論)を十分に理解していないと、先に進むことはできません。

Knuthの問題に取り組むためにその知識が必要になるわけではありませんが、その種の資料を通過できるようになるには成熟度が必要です。

最初に1冊と1冊のみ(以前に提案したCLRSの本)を選び、最初から最後まで作業します。可能な場合は、アルゴリズムを実装するプログラムを実行してください。 JavaまたはC#を使用しないでください。C++も使用しないでください。ベアボーンCに移動して、ベアボーンメタルスクラップから物を構築する感覚を味わってください。

また、離散数学と計算理論のコースを修了していない場合は、「コンクリート数学」に関するKnuthの本も入手してください。あなたもその本を読むのは良いことでしょう。

次に、Knuthの百科事典に取り組みます。最初の章をよく理解せずに別の章に移動しないでください。

まずボリュームI(基本的なアルゴリズム)、次にボリュームIII(検索と並べ替え)を実行することをお勧めします。それらはあなたの当面の目標であるべきです。次に、後で(かなり後で)ボリュームIV(組み合わせアルゴリズム)に取り組み、次にボリュームII(半数値アルゴリズム)に取り組みます。

最初にそれを取得しなくても、気分を害しないでください。私は何年にもわたってボリュームIとIIIを通過しようと試みてきました(今から10年)。

そして、あなたはそれにあまり重きを置くべきではありません。誰かまたはあなた自身に何かを証明するためにそれをしないでください。 知的に興味があるのでそうしてください。 CLRSの本(またはそこに出回っている大学院レベルの本)を使用するだけで、アルゴリズムに習熟することができます。

実用的で、休憩してください。 Knuthの本を読むことは、長期的な個人的な野心として扱うものであり、CSの資料であることをすぐに証明するものではありません;)

自分自身を殺すために(キャリアに関して)他にも重要なことがある;)

8
luis.espinal

Knuthを始める前に、私は4冊の異なる本を読む必要がありました。最初の2つは、アルゴリズムの Sedgewickの本 です。これらの概要には、実際に実装された形式のほとんどのアルゴリズムとデータ構造が含まれているため、それらが何であり、どのように機能するかを確認できます。これらの本にはさまざまな言語バージョンがあります-私はCで本を読んでいますが、iircはもともとPascalで書かれており、C++とJava=バージョンがあります。

その後、私はアルゴリズムに関するコーメンの本のかなりの部分に取り組み、SedgewickとFlajoletの アルゴリズムの分析の概要 を補足テキストとして使用しました。コーメンの本。私はまだこれらのいずれかを仕上げる必要があり、主に必要だと思う部品をチェリーピッキングします。

それらを読み、数学の学位を取得した後、TAOCPのsomeを読むことができますが、それは難しい読みです。それが役に立たないと言っているのではありません。 TAOCPは、最も優れたアルゴリズムリファレンスマニュアルの一部ですが、それらを使用して何かを「完全に」理解できると考えると、やや問題があります。

4
Justin Hamilton