CS teoritis dan Matematika - rekomendasi belajar mandiri

14

Saya lulusan non-CS dan bidang studi saya tidak terkait dengan CS. Namun, sebagai bagian dari rencana yang lebih besar untuk menjadi ilmuwan komputer, saya ingin mendapatkan latar belakang yang kuat dalam ilmu komputer teoretis dan matematika yang berkaitan dengan CS. Saya melakukan banyak penelitian dan memilih buku-buku terbaik / sangat baik berikut tentang topik CS dan matematika dan ingin meminta pendapat Anda tentang:

  • Kelengkapan topik yang dibahas (harap rekomendasikan apa pun yang saya lewatkan)
  • Tumpang tindih bidang material yang tertutupi / berlebihan
  • Memesan untuk mempelajari buku-buku (saya cantumkan dalam urutan yang menurut saya harus dipelajari)

Daftar ini terasa sangat panjang, jadi saya sangat menghargai rekomendasi untuk menghapus beberapa buku, tanpa kehilangan pengetahuan inti yang diperlukan untuk CS.

Jadi, buku-bukunya adalah:

  1. Delight matematikawan oleh WW Sawyer
  2. Cara Membuktikannya: Pendekatan Terstruktur oleh Daniel J. Velleman
  3. Cara Mengatasinya: Suatu Aspek Baru Metode Matematika oleh G. Polya
  4. Pengantar Pemrograman Fungsional Melalui Lambda Calculus oleh Greg Michaelson
  5. Yayasan Ilmu Komputer oleh Al Aho dan Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
  6. Matematika Beton: Yayasan Ilmu Komputer oleh Graham, Knuth, dan Patashnik
  7. Pengantar Teori Komputasi oleh Michael Sipser
  8. Pengantar Teori, Bahasa, dan Perhitungan Automata oleh John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. Kompleksitas Komputasi: Perspektif Konseptual oleh Oded Goldreich
  10. Kompleksitas Komputasi: Suatu Pendekatan Modern oleh Sanjeev Arora, Boaz Barak
  11. A Course in Combinatorics oleh JH van Lint, RM Wilson
  12. Komputasi: Pengantar Teori Fungsi Rekursif oleh Nigel Cutland
  13. Komputer dan Daya Tarik: Panduan untuk Teori Kelengkapan NP oleh MR Garey, DS Johnson
  14. Teori Fungsi Rekursif dan Kompabilitas yang Efektif oleh Hartley Rogers
  15. Ketimpangan oleh GH Hardy, JE Littlewood, G. Polya
  16. Logika Matematika: Kursus Dengan Latihan (Bagian I): Propusitional Calculus, Bookean Algebras, Predicate Calculus oleh René Cori, Daniel Lascar
  17. Logika Matematika: Kursus Dengan Latihan (Bagian II): Teori Rekursi, Teorema Godel, Teori Set, Teori Model oleh René Cori, Daniel Lascar
CSLover
sumber
Silakan merujuk ke pertanyaan ini cstheory.stackexchange.com/questions/3253/...
Bartosz Przybylski
Mulailah dengan buku Algoritma yang dikenal jika Anda belum memiliki pengalaman dalam topik ini.
AJed
@ Bartek: Terima kasih, tapi ini adalah salah satu pertanyaan yang saya lihat sebelumnya untuk menyusun daftar di tempat pertama. Pertanyaan saya adalah lebih lanjut tentang bagaimana membaca semua materi hebat di sana. Waktu selalu menjadi kendala, jadi saya ingin tahu buku apa yang harus saya "tidak" baca untuk menghindari pengulangan dll.
CSLover
@ AJed: Apakah Anda menyarankan untuk memulai dengan buku # 5 pada daftar alih-alih beberapa buku matematika # 1-4? Saya percaya # 5 memberikan intro yang lembut untuk algoritma dan struktur data.
CSLover
Terlalu banyak di sini. Saya hanya memilih satu dan pergi, lalu khawatir tentang apa yang terjadi selanjutnya ketika Anda sampai di sana. Saya mungkin merekomendasikan Sipser untuk memulai bagi pemula yang ingin latar belakang yang kuat dalam yayasan CS.
usul

Jawaban:

10

Daftar Anda sangat bermasalah.

Sebagai permulaan, saya akan langsung melewatkan buku 6,11,12,14,15,16,17: Buku 6, 11 dan 15 adalah matematika umum yang tidak benar-benar diperlukan kecuali jika Anda menjadi peneliti teoretis . Buku 12 dan 14 membahas teori rekursi yang bukan ilmu komputer (meskipun berkaitan dengan kemampuan komputasi!). Buku 16 dan 17 membahas topik-topik lanjutan dalam logika, sedangkan Anda hanya perlu tahu logika yang sangat mendasar.

Dari buku 1,2,3, saya akan memilih hanya satu yang berfungsi sebagai pengantar umum untuk matematika dan bukti.

Buku 5,7,8,9,10,13 mencakup beberapa mata pelajaran: teori automata, algoritma, dan teori kompleksitas. Izinkan saya menyarankan Anda mengikuti Sipser (Buku 7) untuk teori automata dan teori kompleksitas, dan Pengantar Algoritma oleh Cormen, Leiserson, Rivest dan Stein ("CLRS") untuk algoritma.

Buku 4 berkaitan dengan pemrograman fungsional. Walaupun pendidikan ilmu komputer saya tidak pernah memasukkan kursus tentang hal ini, wajar untuk mengatakan bahwa banyak peneliti dalam ilmu komputer teoritis menghitung pemrograman fungsional sebagai bagian dari fondasi penting.

Meringkas: apa yang tersisa dengan Anda

  • Salah satu buku 1-3 (atau teks "pengantar bukti" yang sebanding)
  • CLRS
  • Buku 4 (pemrograman fungsional)
  • Buku 7 (teori automata dan teori kompleksitas)
Yuval Filmus
sumber
Terima kasih banyak atas tanggapan yang saksama. Saya tahu daftar itu berlebihan, tetapi membaca semua jenis rekomendasi buku untuk ilmuwan komputer, Anda berakhir dengan daftar panjang. Rekomendasi Anda sangat praktis, dan itulah yang saya cari. Terima kasih banyak !!
CSLover
1
Saya tidak setuju dengan saran bahwa "matematika tidak diperlukan". Pilih aspek apa pun dari ilmu komputer dan saya akan menunjukkan kepada Anda bagaimana matematika dibutuhkan. Semakin banyak matematika yang Anda pelajari, semakin baik keadaan Anda. Di sisi lain, hampir mustahil untuk belajar matematika sendiri tanpa harus bersekolah. Jadi Anda mungkin lebih baik berkonsentrasi pada ilmu komputer, yang lebih mudah dipelajari.
Andrej Bauer
5

Anda juga dapat mempertimbangkan untuk mengambil keuntungan dari beberapa kursus online yang tersedia. Sebagai contoh, baik Stanford dan MIT menawarkan kursus online (gratis) dalam ilmu komputer, dan saya pikir ada banyak lainnya juga tersedia.

Sejauh buku, saya kedua rekomendasi Yuval, kecuali bahwa CLRS adalah referensi yang bagus, tetapi sedikit berlebihan sebagai buku pengantar untuk duduk dan membaca. Untuk lulus pertama di bagian algoritma, saya mungkin merekomendasikan Algoritma oleh Dasgupta et al. . Tautan sebelumnya adalah untuk pra-cetak online gratis, tetapi juga cukup murah untuk membeli di paperback.

Joe
sumber
Baik. Saya menghargai tanggapan Anda. Terima kasih banyak.
CSLover
2

Referensi yang Anda sarankan akan menjadi ilmuwan komputer teoretis "sangat". tapi saya jujur ​​tidak menemukan keuntungan membaca semua buku-buku ini jika Anda dari gelar non-CS. Ini tentu saja semua tergantung pada apa yang Anda butuhkan.

Saya menemukan beberapa buku seperti Buku 14, 15, 16, 17 tidak ditujukan untuk para ilmuwan komputer. Buku 3 adalah verbose. Itu hanya umum untuk setiap siswa. Karena itu saya menganggap buku 1 dan 2 adalah sama.

Bagi saya - berada dalam situasi yang sama dengan Anda bukan awalnya seorang ilmuwan komputer (tetapi seorang insinyur listrik / komputer) - Saya mengusulkan dua arahan awal:

  • desain dan analisis algoritma, (banyak orang menyarankan CLRS Pengantar Algoritma . Ini adalah referensi yang bagus, tapi saya benar-benar bukan penggemar itu dan pada awalnya itu adalah taruhan yang lebih sulit untuk memahaminya dan kadang-kadang sangat bertele-tele. Saya sarankan Anda juga ikuti daftar isinya, dan dari sana Anda memeriksa kursus online untuk referensi yang lebih jelas).

--- pastikan untuk menguasai bahasa pemrograman untuk MELAKSANAKAN algoritma dan struktur data yang Anda pelajari - karena itu, saya menyarankan rangkaian Algoritma, dari Sedgewick (luar biasa!)

--- TAMBAH: Saya juga menyarankan buku ini: Algoritma Combinatorial: Generasi, Enumerasi, dan Cari oleh D. Kreher. Ini buku yang sangat bagus. Akan memberi Anda perspektif berbeda untuk banyak masalah dalam algoritma.

  • kombinatorik (terutama teori grafik), A Course in Combinatorics oleh JH van Lint, RM Wilson , bagus. Ada banyak referensi lain. Biasanya setiap buku kombinatorik terkenal sudah cukup - semua yang Anda dapatkan dari referensi tambahan dari internet. Saya pribadi suka: peter j cameron combinatorics, dan Bondy and Murty Graph Theory.

  • taruhan probabilitas (selalu diperlukan). Sangat mengejutkan bahwa banyak bidang dalam sains tidak menggunakan probabilitas. Tapi percayalah, yang harus Anda ketahui hanyalah dasar-dasarnya.

Kemudian: Banyak peneliti yang menyebut diri mereka sendiri sebagai ilmuwan komputer teoritik yang berfokus pada teori perhitungan (automota dan lainnya). Ada beberapa buku bagus untuk ini (Lihat posting Yuvul Filmus),

Aho dan Ullman baik (sebenarnya semua buku Ullman baik). Buat diri Anda nyaman dengan desain kompiler (lihat http://infolab.stanford.edu/~ullman/ullman-books.html ).

Setelah itu: semuanya tergantung pada apa yang ingin Anda lakukan. Berbagai arah yang dapat Anda ambil: 1) database, 2) pengenalan pola dan penambangan data, 3) algoritma terdistribusi, 4) dasar bahasa pemrograman, 4) algoritma acak, dan banyak lainnya. [masing-masing membutuhkan posting lain] tetapi cobalah untuk memiliki ide tentang semua!

* Gagasan umum: jika Anda baru di CS, buat diri Anda nyaman dengan sebanyak mungkin sub-domain CS. Membatasi diri Anda untuk "teori" akan membuat Anda kehilangan banyak kreativitas CS! * (pendapat saya)

Dipotong
sumber
Bagi saya pemrograman fungsional. Jangan gunakan buku warisan seperti yang Anda kutip. Bahasa fungsional diperlukan saat ini di industri. Ada beberapa tutorial di internet tentang bahasa seperti Skema, Haskel dan Erlang. Jangan terlalu teoretis, ini saran saya.
AJed
Semua komentar bagus. Tujuan saya adalah merancang program belajar mandiri yang lengkap dan pertanyaan ini hanya membahas bagian dari program, yang menurut saya paling sulit untuk diorganisasi. Bidang-bidang lain meliputi: Struktur & algoritme data, Arsitektur Komputer, Sistem Operasi, Jaringan, Keamanan & Kriptografi, Paralelisme, Metode Formal, Kecerdasan Buatan, Grafik & Simulasi, Basis Data, Bahasa Pemrograman, Kompiler, rekayasa perangkat lunak, dan akhirnya filosofi & administrasi Unix. Sebagian besar dari ini saya pikir cukup mendasar untuk CS, tetapi akan menjamin pertanyaan yang terpisah
CSLover
Trik terbaik Anda adalah fondasi yang kuat dalam desain dan analisis algoritma. - setiap bidang lainnya adalah sub-bidang desain dan analisis algoritma.
AJed
Apakah Anda akan baik dan memperjelas buku algoritma Sedgewick mana yang Anda rekomendasikan? Dia punya satu yang disebut "Algoritma" tapi itu bukan seri. Dia juga memiliki "Algoritma dalam C ++" (atau bahasa lain) yang merupakan 2 buku yang saya percayai dengan total 5 bagian.
CSLover
Yang saya gunakan adalah yang C ++. Saya menggunakan mereka sebagai referensi. Ini adalah situs webnya cs.princeton.edu/~rs
AJed