私はCSの学生であり、正直なところ、Knuthの本を理解していません[非公開]


52

私はビル・ゲイツからのこの引用に出くわしました:「もしあなたがすべてを読むことができるならば、あなたは私に履歴書を必ず送るべきです。」彼はThe Art of Programmingの本について話していました。だから私はかなり興味があり、それをすべて読みたいです。しかし、正直なところ、私はそれを理解していません。

私は本当に知的ではありません。だから、これが私がそれを理解できない理由であるに違いないが、私は学ぶことを切望している。現在、基本的なアルゴリズムに関する第1巻を読んでいます。私のような初心者/遅い人に優しい本がありますか?これは知識を深めるのに役立ち、将来Knuthの本を簡単に読むことができますか?


私はそれを理解すると言います(そしてあなたも私も推測します)が、それは多くの時間を要し、最近ではもっと簡単な本があります。
Nils

22
読むのが難しく、簡単な本があるかもしれませんが、とにかく読むべきです。私はこれまでに最初の本を読んだだけで、その中のすべてを理解していません!しかし、それだけの価値があります。コンピュータサイエンスは難しいです。理解するほど頭が良くないと気づくほど、学習方法を早く学ぶことができます。
マイケルK

2
それらは、math-yプログラマー向けの数学指向です。CSは最近進化しており、数学ではない有益な分野がたくさんあります。どの方向をさらに発展させたいですか?それがアルゴリズムなどである場合、それらはおそらくよく読まれます、それが他の領域である場合、彼らはあなたの地平線を広げますが、ちょうどいくつかの生物学のトピックに関する本を読むのと同じくらいです。そのため、地域によっては、ミッションクリティカルなものからほとんど役に立たないものまで、どこにでも配置できます。
コーダー

1
いつからプログラマーはビル・ゲイツを権威あると見なしますか
ジョルジオ

2
Courseraには、アルゴリズムに関する6つの無料コースがあります(アルゴリズムパート1および2、アルゴリズム設計および分析パート1および2、および分析的組み合わせ論1および2)。
アンソニー

回答:


39

クヌースの本は少し進歩的で理解しにくいと思います。それらの本は間違いなく研究レベルのアルゴリズム主義者向けです。

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

CLRSによるアルゴリズムの紹介ははるかに簡単です。

編集

それでも、Knuthの本を読みたい場合は、まず具象数学を実行する必要があります。Knuthは、生徒にアルゴリズム分析の基本的な数学的部分を認識してもらいたいと考えています。


5
アルゴリズム設計マニュアルには、よりアクセス/さらに簡単です-それは読んで楽しいものに近づく
マーティンベケット

アルゴリズムの紹介は素晴らしい本です。これを最初のCSEアルゴリズムコースで使用し、とても気に入りました。私は多くのイテレーションを同じ例を通して行ったと言わなければなりませんが、本当に理解していると言います。
クリス

4
@SidCool:ダースの新しいセクションを含むCLRS 3rdエディションがあります。
トカゲのビル

10
Knuthの本は、戦争と平和のプログラミングです。彼らは良いですが、主に本棚を印象的に見せるために使用されます。
ガウラフ

6
「クヌースの本は少し進歩していると思いますか」謙虚
なええ

57

これを含むゲイツの引用をすべて読んでください:

「読むには信じられないほどの規律と数ヶ月を要しました。20ページを勉強し、1週間それを片付けて、さらに20ページに戻ってきました。世界が深く複雑であることを彼らに理解させてください。」

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

Michael Dorfmanが、Stackoverflowで(今は削除された)たくさんの読書から得られるものについての質問(現在削除されています)の質問への答えの中で本を読むためのいくつかの良いヒントを持っています。。10kの担当者がいない場合でも、ウェイバックマシンで質問とその回答を表示できます。

たくさん読むことで何が得られますか?コンピュータサイエンスの優れた基盤。論理ゲートからコンパイラーまで、コンピューターの動作を理解できます。本当に知らなかった問題が問題であると考えます(つまり、乗算する最速の方法は何ですか?)、関連するとは思わなかったもの(川床、RNA、入れ子になった括弧など)間のアルゴリズム接続を確認します。

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

まだ開始していない場合は、いくつかの推奨事項があります。

まず、ボリューム4から始めてください。非常に最新のエキサイティングな素材であり、Knuthのユーモアのセンスが輝いています。さらに、Knuthがさまざまなセクションについて説明しているビデオがあります(スタンフォードSPCDサイトまたはスタンフォードiTunesで)。これらのビデオを強くお勧めします。Volume 4のFascicles 0、1、2、3、および4は、別々のペーパーバックとして入手できます。一緒に、公開されたV4素材は、最初の3巻のいずれよりも大きいですが、一口サイズのおやつに切り分けられます。(各巻が1章のペーパーバック形式で発行されていた場合、1〜3巻は人々にとってそれほど恐ろしくないように思えますか...)

数学の背景に応じて、最初に第1章をざっと読み、必要に応じてそれに戻ることをお勧めします。実際、おそらく各セクションを(少なくとも)2回読むことをお勧めします。最初はすばやく、引数の直感と要点を把握し、その後はゆっくりと慎重に各ステップを理解します。

MIXの古いセクションではなく、MMIXのVolume 1、Fascicle 1を必ず読んでください。MMIXは多くの点で優れており、両方の世界にまたがるよりも、テキスト内のMIXをMMIXに変換する方が良いでしょう。

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

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

当然ながら、StackOverflowは、テキストに特定の質問を投稿するのに適した場所です(もし発生した場合)。

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


SOへのリンクは壊れていましたが、私が似ていると思う投稿を見つけました:stackoverflow.com/questions/1022167/…–
asjohnson

Way Back Machineの元の投稿とそれらの大学の書籍リストに+1
アンソニー

+ 1、Volume 4、Fascicles 0、1、2、3、および4から開始することをお勧めします。また、MIXではなくMMIXについて読みます。その結果、MMIXをカバーしているため、Volumn 1、Fascicle 1から始めます。
ショーンルッティン14年

Java / cプログラマーとして、<Javaのデータ構造とアルゴリズム分析>は非常に理解しやすく、非常に実践的だと感じています。
エリックワン

29

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

クヌースの本の一部を実際に読んだ人もいると聞いたことがあります。

ほとんどの人はただするつもりです。

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


22
だからこそ、使い古した使い古したコピーは新しいものより価値があるのです!
マーティンベケット

13
The Art of Warを理解すれば、知らない人はKnuthを理解していると人々に思わせる必要があるだけであり、逆に、知っているときはKnuthを理解できないと気付くでしょう。そうでない場合、あなたはしません。そして、5つの指輪の本の5本を理解していれば、クヌースについて話す必要すらありません。そして、ESRのThe Art of Unix Programmingを読み、koansを理解していれば、複雑さの障壁を超越したKnuthさえ必要ないでしょう。
クリストファーマハン

20

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

理解できないなら、気分が悪くなるべきではありません。

プラスーンが言ったように、CLRSは読むのがより簡単な本です。

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


この本を読むのに苦労しているのは私だけだと思いました。ありがとうございます。
ロー

7
@Raymond Ho:Knuthの本を読むのが本当に好きな人はいないと思います。棚を印象的に見せるためだけに、本棚に置いてある人を少なくとも一人知っています。
FrustratedWithFormsDesigner

12

私が最初に卒業したとき、私はTAOCPの最初の3巻を自分への卒業プレゼントとして手に入れ、それらを直読しようとしました。それを管理することはありません。最近、最初の3巻の3分の1をたどりました(順不同です)。素材は間違いなく高密度ですが、私が学んだ3つのヒントが非常に役立ちました。

最初に、カバーからカバーまで読んでみてはいけません。TAOCPは、実際には何よりも参照作業であり、解決しようとしている問題に関連するセクションを読むのが最善であることがわかりました。世界の多くのものと同様に、解決しようとしている問題に遭遇すると、ソリューションを理解するのがはるかに簡単になります。

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

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


10

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

あなたがTAOCP を簡単に読むことができるレベルに達したいなら、あなたはかなり野心的です。私自身は、本を片付ける前にページをめくるだけです。たぶん、この惑星にはTAOCPを理解している人はほんの一握りしかいないでしょう。

投稿をチェックしてください:書籍プログラマーはビル・ザ・リザードによって本当に読まません

あります他の書籍の多くはかなりあることが記載されている読み理解し、あなたがすることができますすぐに恩恵を受ける

私は個人的に好きです:


8

私はビル・ゲイツからのこの引用をつまずきました:「もしあなたがすべてを読むことができるならば、あなたは私に履歴書を必ず送るべきです。」彼はThe Art of Programmingの本について話していました。ですから、私はかなり興味があり、正直に読んでみたいと思いますI'm really not that highly intellectual being。それはまったくわかりません。、しかし、私は学びたいと思っています。私は現在、基本的なアルゴリズムについての第1巻を読んでいます。だから、私のような初心者/遅い人に優しい本はありますか?だから私は自分自身を構築することができ、将来的にはKnuthの本を安心して読むことができることを願っています。

自分自身をnot a highly intellectual being次のように定義すると、期待を低く設定することになります。トラブルに見合う価値のある何かをしたいのなら、あなたはその考え方を壊さなければなりません。何かを成し遂げることができることは、あなたの心に間違いないはずです。また、それを達成することは、あなたがそれを簡単に達成することを意味しません。

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

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

アルゴリズムの基本を冷静かつ明確にし、かなりの量のプログラミング(仕事および/または学力)をベルトの下に置く必要があります-少なくともプログラミングには40クレジットが必要です。また、CS数学を確固たるものにする必要があります。

離散数学(および場合によっては計算理論)を十分に理解していなければ、先に進むことはできません。

Knuthの問題に取り組むためにその知識が必要になるわけではありませんが、そのタイプの資料を理解するには成熟度が必要です。

まず、1冊の本と1冊の本(前述のCLRSの本)を選び、最初から最後まで作業します。可能な場合、アルゴリズムを実装するプログラムを実行します。JavaやC#を使用しないでください。C++も使用しないでください。ベアボーンCに移動し、ベアボーンの金属スクラップから物を構築する感覚を得ます。

また、離散数学と計算理論のコースをまだ受講していない場合は、Knuthの「Concrete Mathematics」に関する本を入手してください。あなたもその本を読むのが良いでしょう。

その後、クヌースの百科事典、1冊の本、一度に1つの章に取り組みます。最初の章をよく理解せずに別の章に移動しないでください。

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

最初に取得しなくても気にしないでください。私は長年(10年後)ボリュームIとIIIを乗り越えようとしてきました。

そして、あなたもそれにあまり重きを置かないでください。誰かまたはあなた自身に何かを証明するためにそれをしないでください。あなたがそうすることに知的に興味があるので、それをしてください。CLRSの本(またはそこにあるすばらしい卒業生レベルの本)を使用するだけで、アルゴリズムに習熟することができます。

実用的になり、休憩を取りましょう。クヌースの本を読むことは、あなたがCS素材であることを即座に証明することではなく、長期的な個人的な野心として扱ってください;)

他にもっと重要なことがあります(キャリア的に)、自分を殺すために;)


2
注:ボリュームIIIを2回参照しますが、ボリュームIIではなく、ボリュームIIIに2つの異なる名前を付けます。
代替

お知らせいただきありがとうございます(+1)。順序は次のとおりです。最初のボリュームI(基本アルゴリズム)、次にボリュームIII(検索と並べ替え)、ボリュームIV(組み合わせアルゴリズム)、次にボリュームII(半数値アルゴリズム)
luis.espinal

6
+1 私たちが敢えてしないのは、物事が難しいからではありません。それは彼らが難しいことを敢えてしないからです。-セネカ
-mouviciel

4

Knuthを始める前に、4種類の本を読み進めなければなりませんでした。最初の2つは、アルゴリズムに関するSedgewickの本です。これらはほとんどのアルゴリズムとデータ構造を実際に実装された形式で概観しているので、それらが何であり、どのように機能するかを見ることができます。これらの本は異なる言語バージョンで提供されています-私はCで読みましたが、iircはもともとPascalで書かれており、C ++およびJavaバージョンがあります。

その後、アルゴリズムに関するコーメンの本のかなりの部分を読んで、Smenwick and Flajolet's Introduction to the Analysis of Algorithmsを補完的なテキストとして使用しました。これは、コーメンの本よりもクヌースの数学的厳密さのほうに近いからです。私はまだこれらのいずれかを終えていません。私が必要だと思う部分を主に選んでいます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.