Teorik CS ve Matematik - bireysel çalışma önerileri


14

Ben CS olmayan bir mezunum ve çalışma alanım CS ile ilgisi yok. Bununla birlikte, bir bilgisayar bilimcisi olmak için daha büyük bir planın parçası olarak, CS ile ilgili olduğu için teorik bilgisayar bilimi ve matematikte sağlam bir arka plan elde etmek istiyorum. Çok fazla araştırma yaptım ve CS ve matematik konusunda aşağıdaki en iyi / gerçekten iyi kitapları seçtim ve hakkında görüşlerinizi sormak istiyorum:

  • Ele alınan konuların tamlığı (lütfen kaçırdığım her şeyi önerin)
  • Malzeme kaplı / taşan alanın üst üste binmesi (lütfen listeden çıkarılması gereken kitapları önerin)
  • Kitapları inceleme sırası (çalışılması gerektiğini düşündüğüm sıraya göre listeledim)

Liste aşırı uzun hissettiriyor, bu yüzden CS için gereken temel bilginin kaybı olmadan bazı kitapları kaldırmak için önerileri takdir ediyorum.

Yani, kitaplar:

  1. Matematikçinin Lokumu WW Sawyer
  2. Nasıl Kanıtlanır: Daniel J. Velleman'dan Yapısal Bir Yaklaşım
  3. Nasıl Çözülür: Matematiksel Yöntemin Yeni Bir Yönü G. Polya
  4. Lambda Analiz Aracılığıyla Fonksiyonel Programlamaya Giriş, Greg Michaelson
  5. Al Aho ve Jeff Ullman'ın Bilgisayar Biliminin Temelleri (http://i.stanford.edu/~ullman/focs.html)
  6. Somut Matematik: Graham, Knuth ve Patashnik tarafından Bilgisayar Bilimleri Vakfı
  7. Hesaplama Teorisine Giriş Michael Sipser
  8. Otomata Teorisine Giriş, Diller ve Hesaplama John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. Hesaplamalı Karmaşıklık: Oded Goldreich'ten Kavramsal Bir Bakış
  10. Hesaplamalı Karmaşıklık: Sanjeev Arora, Boaz Barak'dan Modern Bir Yaklaşım
  11. Kombinasyon Kursu JH van Lint, RM Wilson
  12. Hesaplanabilirlik: Nigel Cutland'ın Özyinelemeli İşlev Teorisine Giriş
  13. Bilgisayarlar ve Süreksizlik: MR Garey, DS Johnson'dan NP Tamamlama Teorisi Kılavuzu
  14. Özyinelemeli Fonksiyonlar Teorisi ve Etkili Hesaplanabilirlik Hartley Rogers
  15. GH Hardy, JE Littlewood, G. Polya'dan Eşitsizlikler
  16. Matematiksel Mantık: Alıştırmalarla Bir Ders (Bölüm I): Önerme Analizi, Kitapçık Cebirleri, Predicate Calculus by René Cori, Daniel Lascar
  17. Matematiksel Mantık: Alıştırmalarla Bir Ders (Bölüm II): Özyineleme Teorisi, Godel'in Teoremleri, Kümeler Teorisi, René Cori'nin Model Teorisi, Daniel Lascar


Bu konuda henüz deneyiminiz yoksa bilinen bir Algoritma kitabı ile başlayın.
AJ

@Bartek: Teşekkür ederim, ama bu listeyi ilk etapta derlemek için daha önce baktığım sorulardan biriydi. Benim sorum, orada tüm harika malzemeleri pratik olarak nasıl okuyacağımız hakkında daha fazla. Zaman her zaman bir kısıtlamadır, bu yüzden tekrardan kaçınmak için hangi kitapları "
okumamam

@AJed: Bazı matematik kitapları # 1-4 yerine listede # 5 kitabı ile başlamayı mı öneriyorsunuz? # 5'in algoritmalara ve veri yapılarına yumuşak bir giriş yaptığını düşünüyorum.
CSLover

Burada çok fazla. Sadece bir tane seçip oraya giderken bir sonraki adımın ne olacağından endişe ediyorum. Sipser'in CS'nin temellerinde sağlam bir arka plan isteyen bir acemi için başlamasını tavsiye edebilirim.
usul

Yanıtlar:


10

Listeniz son derece sorunlu.

Başlangıç ​​olarak, 6,11,12,14,15,16,17 kitapları düz bir şekilde atlardım: Kitap 6, 11 ve 15, teorik bir araştırmacı olmadıkça gerçekten gerekli olmayan genel matematiktir . Kitap 12 ve 14, bilgisayar bilimi olmayan özyineleme teorisini kapsar (hesaplanabilirlik ile uğraşmasına rağmen!). Kitap 16 ve 17, mantıktaki ileri konuları kapsarken, sadece çok temel mantığı bilmeniz gerekir.

1,2,3 kitaplarından, matematik ve ispatlara genel bir giriş yapmak için sadece birini seçerdim.

5,7,8,9,10,13 kitapları birkaç konuyu kapsar: otomata teorisi, algoritmalar ve karmaşıklık teorisi. Otomata teorisi ve karmaşıklık teorisi için Sipser'i (Kitap 7) ve algoritmalar için Cormen, Leiserson, Rivest ve Stein ("CLRS") tarafından Algoritmalara Giriş'i izlemenizi öneriyorum.

Kitap 4 fonksiyonel programlama ile ilgilidir. Bilgisayar bilimleri eğitimim bu konuda hiçbir dersi kapsamamış olsa da, teorik bilgisayar bilimindeki birçok araştırmacının temel programların bir parçası olarak fonksiyonel programlamayı saydığını söylemek doğrudur.

Özetlemek gerekirse:

  • Kitaplardan biri 1-3 (veya karşılaştırılabilir herhangi bir "ispat giriş" metni)
  • CLRS
  • Kitap 4 (fonksiyonel programlama)
  • Kitap 7 (otomata teorisi ve karmaşıklık teorisi)

Böyle kapsamlı bir yanıt için çok teşekkür ederim. Listenin aşırı olduğunu biliyordum, ancak bilgisayar bilimcileri için her türlü kitap önerisini okuduğunuzda, uzun bir liste ile sonuçlanıyorsunuz. Tavsiyen çok pratik ve ben de bundan sonra geliyorum. Büyük teşekkür ederim !!
CSLover

1
"Matematik gerekli değildir" tavsiyesine katılmıyorum. Bilgisayar biliminin herhangi bir yönünü seçin ve size matematiğin nasıl gerekli olduğunu göstereceğim. Ne kadar çok matematik öğrenirsen o kadar iyi durumda değilsin. Öte yandan, gerçek matematiği okula gitmeden kendi başına öğrenmek neredeyse imkansızdır. Yani muhtemelen bilgisayar bilimlerine yoğunlaşmak daha iyidir, bu daha kolay öğrenilir.
Andrej Bauer

5

Ayrıca, birçok çevrimiçi kurstan faydalanmayı düşünebilirsiniz. Örneğin, her iki Stanford ve MIT teklif bilgisayar bilimi (ücretsiz) online kurslar ve birçok mevcut diğerleri de olduğunu düşünüyorum.

Kitaplarla ilgili olarak, Yuval'ın önerilerinin çoğunu ikinci olarak görüyorum, ancak CLRS büyük bir referans, ancak sadece oturup okumak için bir tanıtım kitabı olarak biraz ezici. Algoritmalar kısmında ilk geçiş için Dasgupta ve ark. Tarafından Algoritmalar önerebilirim . . Önceki bağlantı, ücretsiz çevrimiçi ön baskıdır, ancak kağıt kapaklı kitaptan satın almak da oldukça ucuzdur.


Tamam. Yanıtınız için teşekkür ederim. Çok teşekkür ederim.
CSLover

2

Önerdiğiniz referanslar "çok" teorik bir bilgisayar bilimcisi yapar. ama dürüstçe eğer CS olmayan bir dereceden iseniz, tüm bu kitapları okumak için herhangi bir fayda bulamıyorum. Bu elbette neye ihtiyacınız olduğuna bağlıdır.

Kitap 14, 15, 16, 17 gibi bazı kitapların bilgisayar bilimcilerine yönelik olmadığını düşünüyorum. Kitap 3 ayrıntılıdır. Herhangi bir öğrenci için geneldir. Bu nedenle 1. ve 2. kitapların aynı olduğunu varsayıyorum.

Benim için - başlangıçta bir bilgisayar bilimcisi değil (aynı zamanda bir elektrik / bilgisayar mühendisi) ile aynı durumda olmak - İlk iki yönü öneriyorum:

  • algoritma tasarımı ve analizi, (birçok kişi CLRS Algoritmalara Giriş önerir . Harika bir referanstır, ama gerçekten bir hayranı değilim ve başlangıçta bunu anlamak daha zor ve bazen çok ayrıntılı. içindekileri takip edin ve daha net referanslar için çevrimiçi kursları kontrol edin).

--- öğrendiğiniz algoritmaları ve veri yapılarını UYGULAMAK için bir programlama diline hakim olduğunuzdan emin olun - bu nedenle, Sedgewick'in (şaşırtıcı!) Algoritmalar serisini öneririm

--- EKLENDİ: Bu kitabı da öneriyorum: Kombinatoryal Algoritmalar: Nesil, Sayım ve D. Kreher tarafından Arama. Bu çok güzel bir kitap. Algoritmalardaki birçok konuya farklı bir bakış açısı kazandıracaktır.

  • kombinatorik (özellikle grafik teorisi), JH van Lint, RM Wilson'ın Kombinatorik Kursu iyidir. Başka birçok referans var. Genellikle iyi bilinen kombinatorik kitaplar yeterlidir - internetten ek referanslardan alacağınız her şey. Şahsen beğendim: peter j cameron kombinatorik ve Bondy ve Murty Graph Theory.

  • bir olasılık bahsi (her zaman gerekli). Bilimdeki birçok alanın olasılık kullanmaması dikkat çekicidir. Ama inan bana, bilmen gereken temel şeyler.

Sonra: Kendilerine teorik bilgisayar bilimcisi adını veren birçok araştırmacı, hesaplama teorisine (otomobil ve diğerleri) çok fazla odaklanıyor. Bunun için bazı iyi kitaplar var (Bkz. Yuvul Filmus yazısı),

Aho ve Ullman iyidir (aslında tüm Ullman kitapları iyidir). Derleyici tasarımı ile kendinizi rahat ettirin (bkz. Http://infolab.stanford.edu/~ullman/ullman-books.html ).

Bundan sonra: her şey ne yapmak istediğinize bağlı. Alabileceğiniz farklı yönler: 1) veritabanları, 2) örüntü tanıma ve veri madenciliği, 3) dağıtılmış algoritmalar, 4) programlama dillerinin temeli, 4) algoritmaları rasgele ve diğerleri. [her biri başka bir yazı gerektirir] ancak herkes hakkında bir fikir sahibi olmaya çalışın!

* Genel fikir: CS'de yeniyseniz, mümkün olduğunca çok sayıda CS alt alanıyla kendinizi rahat ettirin. Kendinizi "teori" ile sınırlamak CS yaratıcılığının çoğunu kaybetmenizi sağlayacaktır! * (benim görüşüm)


Benim için fonksiyonel programlama. Alıntı yaptığınız gibi eski bir kitap kullanmayın. Şu anda sektörde fonksiyonel diller gereklidir. İnternette Scheme, Haskel ve Erlang gibi diller hakkında bazı eğitimler bulunmaktadır. Çok teorik olma, bu benim tavsiyem.
AJ

Tüm iyi yorumlar. Amacım eksiksiz bir kendi kendine çalışma programı tasarlamak ve bu soru sadece programın organize edilmesi en zor olduğunu düşündüğüm bir bölümünü ele alıyor. Diğer alanlar: Veri yapıları ve algoritmalar, Bilgisayar Mimarisi, İşletim Sistemleri, Ağ, Güvenlik ve Şifreleme, Paralellik, Biçimsel Yöntemler, Yapay Zeka, Grafik ve Simülasyon, Veritabanları, Programlama Dilleri, Derleyiciler, yazılım mühendisliği ve son olarak Unix felsefesi ve yönetimi. Bunların çoğu CS için oldukça temel, ancak ayrı bir soru gerektiriyor
CSLover

En iyi hileniz algoritma tasarımı ve analizinde güçlü bir temeldir. - diğer tüm alanlar algoritma tasarımı ve analizinin bir alt alanıdır.
AJ

Hangi Sedgewick algoritmalarını önerdiğiniz kitabı nazik ve açıklığa kavuşturabilir misiniz? "Algoritmalar" adlı bir tane var ama bu bir seri değil. Ayrıca toplamda 5 parça olduğuna inandığım 2 kitap olan "C ++ 'da Algoritma" (ya da diğer dillerde) vardır.
CSLover

Kullandığım C ++ idi. Yine de onları referans olarak kullandım. Bu onun web sitesi cs.princeton.edu/~rs
AJed
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.