Ben CS öğrencisiyim ve dürüst olmak gerekirse, Knuth'un kitaplarını anlamıyorum [kapalı]


52

Bill Gates'in bu teklifine rastladım: "Eğer her şeyi okuyabiliyorsanız, kesinlikle bana bir özgeçmiş göndermelisiniz." Programlama Sanatı kitapları hakkında konuşuyordu . Bu yüzden oldukça meraklıydım ve hepsini okumak istiyorum. Ama dürüst olmak gerekirse, anlamıyorum.

Ben gerçekten o kadar entelektüel değilim. Öyleyse neden anlayamadığımın nedeni bu olmalı, ama öğrenmeye istekliyim. Şu anda temel algoritmalar hakkında Cilt 1'i okuyorum. Dışarıda benim için acemiler / yavaş insanlar için kolay olan ve gelecekte Knuth'un kitabını kolaylıkla okuyabilmem için bilgimi geliştirmeye yardımcı olacak kitaplar var mı?


Hımm diyelim ki anladım (ve sen de sanırım), ama çok zaman alacaktı ve bugünlerde daha kolay kitaplar var ..
Nils

22
Okumak zor olabilir ve daha kolay kitaplar olabilir, ancak yine de okumalısınız. Şimdiye kadar sadece ilk kitabı okudum ve bu konudaki her şeyi anlamıyorum! ama buna değer. Bilgisayar Bilimi zor . Ne kadar erken anlarsan, onu anlayacak kadar akıllı olmadığını anlarsın, o kadar çabuk öğrenmeyi öğrenmeye başlarsın.
Michael K,

2
Onlar matematik-y programcıları için matematik eğilimindedir. CS son yıllarda evrim geçirmiştir ve matematik-y olmayan birçok faydalı alan vardır. Hangi yöne daha fazla geliştirmek istersiniz? Algoritmaları ve benzeri ise, muhtemelen iyi okunurlar, eğer başka alanlar ise, ufkunuzu genişleteceklerdir, ancak tıpkı bazı biyoloji konularında kitap okumak kadar. Böylece, bulunduğunuz bölgeye bağlı olarak, kritik görevden neredeyse işe yaramaz olana kadar her yerde olabilirler.
Coder

1
Programcılar ne zamandan beri Bill Gates'in yetkili olduğunu düşünüyor?
Giorgio,

2
Elbette Algoritmalar (Algoritmalar Bölüm 1 ve 2, Algoritma Tasarım ve Analiz Bölüm 1 ve 2 ve Analitik Kombinatorik Bölüm 1 ve 2) üzerine 6 ücretsiz kurs vardır.
Anthony,

Yanıtlar:


39

Ben bile Knuth'un kitabının biraz gelişmiş ve anlaşılması zor olduğunu düşünüyorum. Bu kitaplar kesinlikle araştırma düzeyi algoritmaları IMHO içindir.

Peki, benim gibi acemiler / yavaş insanlar için arkadaşça kitaplar var mı?

CLRS ile algoritmalara giriş çok daha kolaydır.

EDIT :

Eğer Yine de istediğiniz Knuth'un kitap okumak için öncelikle geçmesi gerektiğini Beton Matematik . Knuth, öğrencilerinden algoritma analizinin temel matematik bölümünün farkında olmalarını ister .


5
Algoritma tasarım kılavuzu daha kolay / daha erişilebilir - okumak eğlenceli olmaya yakın geliyor
Martin Beckett

Algoritmalara giriş harika bir kitaptır. Bunu ilk CSE algoritma kursumuz için kullandık ve çok sevdim. Gerçi şunu söylemeliyim ki, birçok örneği tekrarlayarak, onları gerçekten anladığımı söylemek için aynı örnekler üzerinden geçirdim.
Chris

4
@SidCool: Bir düzine yeni bölümden oluşan bir CLRS 3. basım var.
Kertenkele Bill

10
Knuth'un kitapları, Savaş ve Programlama Huzuru. Onlar iyi, ancak çoğunlukla raflardan etkileyici görünmesini sağlamak için kullanılır.
Gaurav,

6
“Ben bile Knuth'un kitabının biraz gelişmiş olduğunu düşünüyorum”? alçakgönüllülük eh :)
oculus

57

Gates'in bu teklifini içeren tüm alıntılarını mutlaka okuyun:

“Okumam inanılmaz bir disiplin aldı ve birkaç ay sürdü, okudum. 20 sayfa çalıştım, bir haftalığına bıraktım, ve başka bir 20 sayfa daha geri geldim. Dünyanın derin ve karmaşık olduğunu anlamalarına yardımcı olun. ”

Kolay kitaplar değiller ve olmaları amaçlanmıyor. Unutmayın, Knuth'un amaçlarından biri bilgisayar bilimlerine matematiksel titizlik kazandırmaktı . Algoritma hakkında bir şeyler ispatlamak istiyorsanız bu harika , ancak nasıl çalıştığını bilmek istiyorsanız çok iyi değil.

Michael Dorfman'ın Stackoverflow konusundaki (şimdi silinmiş) sorusuna cevabındaki kitapları okumak için çok iyi ipuçları var. . Eğer 10k temsilciniz yoksa, soruyu ve cevaplarını geri dönüş makinesinde görüntüleyebilirsiniz .

Partiyi okumaktan ne alacaksınız? Bilgisayar Biliminde mükemmel bir temel. Mantık kapılarından derleyicilere kadar bilgisayarların nasıl çalıştığını anlayacaksınız. Gerçekten hiç bilmediğiniz problemleri düşünürsünüz (yani, çarpmanın en hızlı yolu nedir?) Ve asla ilişkili olmadığını düşündüğünüz şeyler arasında algoritmik bağlantılar görürsünüz (örneğin, nehir yatakları, RNA ve iç içe parantezler.)

"Yazılım oluşturmak hakkında okumak yerine yazılım kurmak" diyen insanlara tamamen katılmıyorum - Yazılım Mühendisliği ve Bilgisayar Bilimleri disiplinleri arasında bir fark var. TAOCP ikincisi hakkında.

Henüz başlamadıysanız, birkaç tavsiyem var.

İlk olarak, Cilt 4 ile başlamak isteyebilirsiniz. Çok heyecan verici bir materyal, çok güncel ve Knuth'un mizah anlayışı parlıyor. Ayrıca, Knuth'un çeşitli bölümleri tartıştığı videolar mevcuttur (Stanford SPCD sitesinde veya Stanford iTunes'da). Bu videolar şiddetle tavsiye edilir. Cilt 4'ün 0, 1, 2, 3 ve 4 numaralı fantazileri ayrı kağıt kapaklar halinde temin edilebilir. Birlikte, yayınlanan V4 materyali, ilk 3 cildin herhangi birinden daha büyüktür, ancak ısırık büyüklüğündeki işlemlere dilimlenmiş. (Her cilt tek bölümlü ciltsiz formda yayınlanmış olsaydı, Cilt 1-3'ün insanlara daha az korkutucu gelip gelmeyeceğini merak ediyorum ...)

Matematik arkaplanınıza bağlı olarak, ilk kez Bölüm 1'e göz atmanızı ve gerektiğinde geri dönmenizi öneririm. Aslında, muhtemelen her bir bölümü (en azından) iki kez okumak isteyeceksiniz - ilk seferinde, sadece argümanların sezgisini ve özlemini elde etmek ve ardından her adımı yavaşça, dikkatlice anlamak için.

MIX'deki eski bölümler yerine, MMIX'deki Cilt 1, Fascicle 1'i okuduğunuzdan emin olun. MMIX birçok yönden daha iyidir ve metnin içindeki MIX'i MMIX'e dönüştürürken her iki dünyaya da sarılmaya çalışmaktan daha iyidir.

Genel bir kural: alıştırmaları atlamayın. Sorularda (ve cevaplarda) birçok iyi malzeme var. Mümkün olduğu kadar çok egzersiz yapın; ancak hepsini okuyunuz (ve cevapları okuyunuz, bir kere soruna karar verdiniz ya da pas geçmeye karar verdikten sonra).

Son olarak, hatayı gerçekten yakalarsanız: dizini okuyun. Orada çok sayıda harika şaka saklandı.

Doğal olarak, StackOverflow, ortaya çıkmaları durumunda, metne özel sorular göndermek için iyi bir yer olacaktır.

Diğer kaynaklar için, saygın bilgisayar bilimi okullarının hecelerine göz atmanın faydalı olduğunu gördüm. Örneğin, başlangıç ​​algoritması sınıfları için ders kitapları:


SO bağlantısı kesildi, ancak hayal ettiğim bir gönderi buldum: stackoverflow.com/questions/1022167/…
asjohnson

Geri Dönüş Makinesi'ndeki orijinal yazı ve bu üniversitelerden gelen kitap listesi için +1
Anthony

Cilt 4, Fascicles 0, 1, 2, 3 ve 4 ile başlamak ve MIX yerine MMIX hakkında okumak için + 1 önermek için. Sonuç olarak Volumn 1, Fascicle 1 ile başlayacağım çünkü MMIX'i kapsıyor.
Shaun Luttin,

Bir Java / c programcısı olarak, <Java'da Veri Yapıları ve Algoritma Analizi> anlaşılması çok kolay ve pratik hissediyorum.
Eric Wang,

29

Knuth, tarihteki en saygın, alıntı yapılan, konuşulan ve en saygın bilgisayar bilimi yazarıdır. Kitapları, tüm ciddi yazılım geliştiricilerin raflarını süslüyor ve insanların İncil ve Savaş Sanatı'nı verdikleri saygı ile aynı seviyeye geliyor.

Hatta bazı insanların Knuth'un kitaplarının bölümlerini okuduğunu bile duydum .

Çoğu insan sadece niyetlener .

Şahsen ben emeklilik için onları biriktiriyorum


22
Bu yüzden iyi kullanılmış kullanılmış kopyalar yenilerden daha değerlidir!
Martin Beckett

13
Savaş Sanatı’nı anlarsanız, insanların yalnızca bilmediğiniz zamanlarda Knuth’u anladığınızı düşünmesini sağlamanız gerektiğini ve tersine de Knud’u anlamadığınızda anlamadığınızı fark edersiniz. Olmazsa, yapmazsın. Beş Yüzük Kitabı'nın 5. kitabını anlarsanız, Knuth'dan bahsetmenize bile gerek kalmaz. Ve eğer ESR'nin Unix Programlama Sanatı'nı okuyup koanları anlarsan, Knuth'a bile ihtiyacın olmayacak, çünkü karmaşıklığın bariyerini aşacaksın.
Christopher Mahan

20

Knuth'un kitapları algoritma alanını sonsuza dek değiştirdi. Kendisi, 'kitabımdaki 2 sayfanın birinin kariyerinin tamamı olduğunu' ve kitaplarının okunmasının zor olduğunu söyledi. Kitap, Bilgisayar Bilimleri alanındaki uzun yıllara dayanan yoğun malzeme içeriyor.

Eğer anlayamıyorsan, kendini kötü hissetmemelisin.

Prasoon'un dediği gibi, CLRS okumak için daha basit bir kitaptır.

Ayrıca Rajasekaran, Sahni ve ark.nın anlaşması kolay algoritmaları da var.


bu duymak çok şaşırtıcı .. bu kitabı okumakta zorluk çeken tek kişi olduğumu düşündüm .. çok teşekkür ederim
Rho

7
@Raymond Ho: Knuth'un kitaplarını okumaktan kimsenin gerçekten hoşlandığını sanmıyorum. Rafın etkileyici görünmesi için onları kitaplıkta tutan en az bir kişi tanıyorum.
SinirliFormsDesigner'la

12

İlk mezun olduğumda TAOCP'nin ilk üç cildini kendime mezuniyet hediyesi olarak aldım ve onları doğrudan okumaya çalıştım. Asla başaramadım. Bugünlerde ilk üç cildin 1 / 3'ünü geçtim (belirli bir sıra ile düşünülmedi). Materyal kesinlikle yoğundur, ancak çok yardımcı olduğunu öğrendiğim üç ipucu var.

İlk önce kapaktan kapak okumaya çalışmayın. TAOCP, her şey kadar bir referans çalışmasından ibarettir ve çözmeye çalıştığınız bir problemle ilgili olduğunda bir bölümü okumayı en iyi buldum. Dünyadaki pek çok şey gibi, çözmek için uğraştıkları sorunlarla karşılaştığınızda çözümleri anlamak çok daha kolaydır.

Sonra, kitabın önündeki bu akış şeması, biraz mizah değil, aslında oldukça faydalı bir ipucu. Üzerinde çalıştığınız bölümleri yinelemeli olarak okuyun, önce sadece genel kavramlarla başlayın ve sonra yavaşça matematiğe daha derinden dalın.

Son olarak, bazı eski moda kağıtları ve kalemleri, tanımlandıkları gibi algoritmalar üzerinde çalışmak için el altında bulundurun ve birkaç kolay problemle çalışın. Okuduğunuz şeyi yeniden uygulamak için uzun bir yol gidiyor.


10

Endişelenmeyin, çoğu insan anlamıyor Bilgisayar Programlama Sanatı (TAOCP). Bu yüzden kendinizi anlamadığınız için yavaş ya da acemi olarak düşünmeyin - tıpkı bunu anlamayanların% 99.99'u gibisiniz.

Sen oldukça iddialı size TAOCP okuyabilir seviyeye ulaşmak istiyorsanız kolaylıkla . Ben kendim sadece kitaplarını ayırmadan önce aradım. Muhtemelen bu gezegende TAOCP'ı anlayan bir avuç insan vardır.

Gönderiyi inceleyin: Kitaplar Programcılar Kertenkele Bill tarafından gerçekten okunmuyor.

Orada listelenen , okunabilir , anlaşılır ve hemen faydalanabileceğiniz birçok kitap var .

Ben şahsen:


8

Bill Gates'den bu alıntıyı tökezledim: "Her şeyi okuyabiliyorsanız kesinlikle bana bir özgeçmiş göndermelisiniz." Programlama Sanatı'ndan bahsediyordu. Bu yüzden oldukça meraklıydım ve hepsini okumak istiyorum ama dürüstçe, hiç anlamıyorum .. I'm really not that highly intellectual being.. Bu yüzden anlayamamamın nedeni bu olmalı. , ama öğrenmeye istekliyim .. Şu anda temel algo hakkında 1. cildi okuyorum .. Peki, benim gibi acemi / yavaş insanlarla dost olan herhangi bir kitap var mı? Böylece kendimi kurabilirim ve gelecekte umarım Knuth'un kitabını rahatlıkla okuyabilirim.

Kendinizi olarak tanımlarsanız, kendinizi not a highly intellectual beingdüşük beklentilere ayarlıyorsunuzdur. Belada değecek bir şey yapmak istersen bu zihniyeti kırmalısın. Aklınızda bir şeyi başarabileceğiniz konusunda hiçbir şüphe olmamalıdır. Ayrıca, bunu başarmak, onu kolayca başaracağınız anlamına gelmez.

İzlenmeye değer şeyler zor olanlardır ... ve bu bir klişe değil. Yazılımda, mühendislikte, genel olarak yaşamda, bir şey elde etmek istiyorsanız, zor olan şeylere, insanların kaçındığı şeylere gitmeniz ve en düşük ortak paydalara razı olmamanız gerekir.

İlk olarak, CS arka planınızın ne olduğu açık değildir. Knuth'un kitabı bir miktar olgunluk gerektiriyor. CS derecesine sahip birkaç kişi kolaylıkla geçebilir. Algoritmalardaki ilk dersini henüz bitirmiş bir CS öğrencisinin Knuth'un kitabından bir tanesini bile geçmesini beklemem. Bunu elde etmek için gereken vade sadece orada değil ve bunun öğrencinin zihinsel kapasitesiyle ilgisi yok.

Temel algoritmalarınızı soğuk ve temiz bir şekilde ele almanız ve kemerinizin altında makul miktarda bir programlamanın (iş ve / veya skolastik) olması gerekir - derim ki, en azından programlama konusunda 40 kredi. Ayrıca CS matematiğinizi sağlam bir zeminde tutmanız gerekir.

Ayrık matematiği (ve muhtemelen hesaplama teorisini) iyi bir şekilde kavramadan ileriye gidemezsiniz.

Knuth'un problemleri üzerinde çalışmak için bu bilgiye ihtiyaç duymayacaksınız, ancak bu tür bir materyalin içinden geçebilmek için olgunluğa ihtiyacınız var.

İlk önce bir kitap ve bir kitap seçin (daha önce önerildiği gibi CLRS kitabı) ve baştan sona çalışın. Mümkün olduğunda algoritmaları uygulayan programlar yapın. Java veya C # kullanmayın, C ++ kullanmayın. Çıplak kemikler C'ye gidin ve çıplak kemikli metal artıklarından şeyler inşa etme hissini alın.

Ayrık matematik ve hesaplama teorisi derslerini almadıysanız, Knuth'un "Beton Matematiği" kitabını da alın. O kitabı da okuman iyi olur.

Ardından Knuth'un ansiklopedisine, her seferinde bir bölüm olmak üzere bir araya geldi. Birincisini iyi anlamadan başka bir bölüme geçmeyin.

Önce cilt I (temel algoritmalar), sonra cilt III (arama ve sıralama) işlemlerini öneririm. Bunlar senin acil hedeflerin olmalı. Sonra, daha sonra (çok sonra), cilt IV (Kombinatoryal Algoritmalar) ve sonra Cilt II (Yarı Sayısal Algoritmalar) ile mücadele edin.

İlk başta alamazsan, kendini kötü hissetme. Yıllar boyunca I ve III ciltlerini geçmeye çalışıyorum (şimdi 10 yıl).

Ve buna da fazla ağırlık vermemelisin. Birine veya kendinize bir şey kanıtlamak için yapmayın. Yap, çünkü bunu entelektüel olarak merak ediyorsun . CLRS'nin kitabını (ya da oradaki iyi dereceli kitaplardan herhangi birini kullanarak) algoritmalar konusunda uzmanlaşabilirsiniz.

Pragmatik olun ve kendinize bir mola verin. Knuth'un kitabından geçerken, CS'nin önemli olduğunun bir kanıtı olarak değil, uzun vadeli kişisel bir hırs olarak kabul edin;)

Kendinizi öldürmek için (kariyer açısından) daha önemli başka şeyler var;)


2
Not: Cilt III'e iki kez ve asla Cilt II'ye, yani Cilt III'e iki farklı isim söyleyin.
alternatif

Bana bildirdiğin için teşekkür ederim (+1). Demek istediğim sıralar şuydu: önce cilt I (temel algoritmalar), sonra cilt III (arama ve sıralama), sonra cilt IV (kombinasyon algoritmaları) ve sonra cilt II (yarı sayısal algoritmalar.)
luis.espinal

6
+1 İşe cüret etmememiz zor olduğu için değil; çünkü zor olmalarına cesaret edemiyoruz. - Seneca
mouviciel

4

Knuth'a başlamadan önce dört farklı kitapta ilerlemek zorunda kaldım. İlk ikisi, Algoritmalardaki Sedgewick kitapları . Bunlar genel olarak uygulanmış bir formdaki çoğu algoritma ve veri yapısına genel bakış, böylece ne olduklarını ve nasıl çalıştıklarını görebilirsiniz. Bu kitaplar farklı dil versiyonlarında geliyor - ben C harflerini okudum, ama iirc asıl Pascal'da yazılmışlar ve orada C ++ ve Java versiyonları var.

Ondan sonra Cormen'in Algoritmalar kitabının iyi bir bölümünde çalıştım ve Sedgewick ve Flajolet'in Algoritma Analizine Giriş'i ücretsiz bir metin olarak kullandım. Hala bunlardan herhangi birini henüz bitiremedim, çoğunlukla ihtiyaç duyduğum parçaları kirazla topladım.

Bunları okuduktan ve Matematik diplomasına sahip olduktan sonra bazı TAOCP'ları okuyabilirim ama zor bir okuma. Bu yararlı olmadığını söylemek değildir. TAOCP, etrafındaki en büyük algoritma referans kılavuzlarından bazılarıdır, ancak bunları bir şeyi tamamen problemli bir şekilde "tamamen" anlamak için kullanabileceğinizi düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.