Saya ditugaskan membangun perpustakaan buku tentang algoritma untuk perusahaan kecil kami (sekitar 15 orang). Anggarannya lebih dari 5k, tapi tentu saja kurang dari 10k, jadi saya bisa membeli sejumlah buku. Semua orang di sini memiliki setidaknya gelar Sarjana dalam CS atau bidang yang terkait erat, jadi sementara saya akan mendapatkan beberapa buku teks dasar seperti Cormen, saya lebih tertarik pada buku-buku bagus tentang topik-topik lanjutan. (Saya akan mendapatkan 4 volume Knuth, BTW.)
Beberapa daftar topik adalah:
Algoritma penyortiran
Algoritma grafik
Algoritma string
Algoritma acak
Algoritma terdistribusi
Algoritma kombinatorial
dll.
Pada dasarnya saya mencari rekomendasi yang bagus tentang buku-buku tentang topik utama dalam CS terkait dengan algoritma dan struktur data. Terutama hal-hal yang melampaui apa yang biasanya dibahas dalam kelas algoritma dan struktur data sebagai bagian dari gelar sarjana di sekolah yang bagus. Saya tahu pertanyaannya cukup kabur, karena saya mencari materi yang bermanfaat secara umum. Perangkat lunak yang kami kembangkan sebagian besar adalah hal-hal tingkat sistem yang menangani data dalam jumlah besar.
Idealnya adalah menemukan apa pun yang akan mencakup struktur data dan algoritma yang cukup baru, yang kebanyakan orang mungkin belum pernah dengar.
EDIT: Berikut adalah beberapa buku pendahuluan yang saya pikir harus saya dapatkan:
Pengantar Algoritma oleh Cormen et al.
Desain Algoritma oleh Kleinberg, Tardos
Seni Pemrograman Komputer Vol 1-4 oleh Knuth
Algoritma Perkiraan oleh Vazirani
Desain Algoritma Aproksimasi oleh Williamson, Shmoys
Algoritma Acak oleh Motwani, Raghavan
Pengantar Teori Komputasi oleh Sipser
Kompleksitas Komputasi oleh Arora, Barak
Komputer dan Daya Tarik oleh Garey dan Johnson
Optimalisasi Kombinasi oleh Schrijver
Beberapa buku lain yang diinginkan rekan saya yang berhubungan dengan teknik dan algoritma untuk desain bahasa, penyusun, dan metode formal adalah:
Jenis dan Bahasa Pemrograman oleh Pierce
Prinsip Memeriksa Model oleh Baier, Katoen
Compiler: Prinsip, Teknik, dan Peralatan oleh Aho, Lam, Sethi, Ullman
Buku Pegangan Desain Kompiler: Optimalisasi dan Pembuatan Kode Mesin, Edisi Kedua oleh Srikant, Shankar
The Garbage Collection Handbook: Seni Manajemen Memori Otomatis oleh Jones, Hosking, Moss
Jawaban:
Saya belum (hampir) membaca cukup banyak buku untuk menyebutkan nilai $ 5.000 dari mereka. Oleh karena itu, saya akan menyarankan beberapa kelompok literatur yang harus Anda liput serta mengarahkan Anda ke perwakilan terpilih. Saya tidak dapat mengklaim telah membaca sebagian besar buku secara lengkap, jadi saya harus mengandalkan sebagian besar deskripsi, kesan sepintas lalu, dan reputasi. Saya telah melihat ke dalam atau bekerja dengan sebagian besar dari mereka sampai batas tertentu, atau meminta mereka direkomendasikan oleh para ahli.
Saya berasumsi bahwa Anda ingin orang-orang Anda mempelajari apa yang dapat dilakukan, dan bagaimana melakukannya, sebagai lawan dari mempelajari apa yang tidak dapat mereka lakukan. Secara khusus, saya akan meninggalkan buku tentang teori komputabilitas dan kompleksitas; Saya berharap orang-orang Anda telah mengambil pesan yang relevan dari pendidikan sarjana mereka.
Dasar-dasar
Meskipun orang-orang Anda telah mempelajarinya pada suatu saat, harap mereka melihat dasar-dasarnya. Karena sumber-sumber seperti Wikipedia sering di bawah standar atau salah, Anda ingin mendapatkan mereka teks referensi yang tepat.
Pilihan populer termasuk
Pengantar yang sangat luas yang mencakup banyak algoritma dasar dan struktur data serta teknik analisis dasar. Teks standar yang sering digunakan untuk tujuan pengajaran dan tersedia dalam edisi ke-3 (sehingga sebagian besar kesalahan seharusnya sudah dihapus sekarang). Banyak latihan.
Teks standar lain dalam edisi keempatnya. Kurang luas dari Cormen, tetapi lebih memperhatikan detail implementasi. Banyak materi online, termasuk kursus gratis di Coursera . Banyak latihan.
Juga agak langsing dalam memilih topik, tetapi disajikan dengan perhatian pada didaktik. Fokusnya adalah pada strategi induktif . Berisi banyak latihan dan solusi (atau setidaknya petunjuk) untuk beberapa. Referensi sekunder yang bagus jika Anda tidak menyukai buku teks yang disarankan karena gayanya yang tidak biasa.
Meliputi matematika diskrit yang relevan dengan analisis algoritma. Jarang dalam fokusnya pada kebutuhan dan ketelitian ilmu komputer . Kualitas sangat tinggi. Banyak latihan dengan solusi.
teknik Sedgewick dan Flajolet Dasar untuk analisis algoritma yang tepat. Ditulis oleh pelopor bidang. Juga memiliki kursus online gratis .
The referensi untuk kualitas tinggi, tingkat rendah, tepatnya dianalisis algoritma untuk berbagai macam masalah. Juga berfungsi sebagai referensi.
Survei Tingkat Lanjut
Classic dan literatur dasar sering berfokus pada paradigma prosedural. Jika Anda ingin bekerja dalam paradigma fungsional, teknik baru untuk struktur data yang efisien diperlukan. Buku ini adalah tinjauan terperinci atas area tersebut.
Kadang-kadang, teknik dasar tidak cukup. Ini adalah gambaran umum atas struktur data tingkat lanjut, dengan kode dan banyak referensi.
Teori kompleksitas memberi tahu kita (sebagai praktisi) untuk tidak repot mencari algoritma yang tepat namun efisien untuk banyak masalah alami. Ada banyak teknik untuk secara praktis menyelesaikan masalah ini; teks ini menunjukkan caranya.
Sastra Khusus
Haruskah Anda merasa perlu untuk membangun atau bermain-main dengan compiler, ini adalah yang teks standar di daerah.
Alur Jaringan: Teori, Algoritma, dan Aplikasi oleh Ahuja Banyak masalah dapat dimodelkan sebagai masalah aliran jaringan; buku ini memberi Anda cakupan penuh dari bidang ini.
Model grafis adalah alat utama dalam pemodelan skenario untuk pembelajaran mesin (antara lain) secara probabilistik. Ini adalah tinjauan komprehensif tentang kompleks. Ada kursus online gratis terkait .
Pencocokan string adalah tugas yang semakin penting ketika berhadapan dengan data. Buku ini mencantumkan sebagian besar (jika tidak semua) algoritma yang relevan untuk pekerjaan itu, termasuk deskripsi tingkat tinggi serta implementasinya.
Penyelaman matematis yang mendalam setelah "Pengantar Analisis Algoritma" oleh penulis yang sama. Bukan untuk semua orang, tapi emas untuk yang berminat.
Jika Anda harus berurusan dengan data string dalam jumlah besar (khususnya dalam konteks biologi) ini adalah buku pilihan karena menyediakan tinjauan umum atas struktur data dan algoritma yang relevan.
Untuk Praktisi
Dalam praktiknya, Anda mungkin ingin menggunakan beberapa mesin untuk menangani masalah besar. Buku ini adalah ikhtisar tingkat tinggi yang didorong oleh contoh tentang cara melakukannya, yaitu bagaimana mengatur dan memindahkan data dan agen komputasi. Ini juga membahas cara untuk mengimplementasikannya dengan alat yang ada.
Ketika analisis teoritis terlalu sulit atau terlalu kasar, Anda harus melakukan percobaan. Ini adalah pengantar tentang bagaimana merancang eksperimen dengan tepat pada algoritma.
Anda sering membutuhkan bahasa dan alat khusus domain untuk menguraikannya. ANTLR adalah generator kompiler yang matang dan nyaman, dan ini adalah buku yang paling cocok untuk mempelajari cara menggunakannya. Parr juga memiliki beberapa buku lain tentang DSL yang patut dicoba.
Jika Anda ingin materi yang sangat baru, Anda harus mempertimbangkan untuk mendapatkan akses orang-orang Anda ke jurnal dan proses konferensi, mungkin dengan bekerja sama dengan perpustakaan universitas. Anda juga dapat benar-benar membiarkan mereka menghadiri konferensi tentang topik yang relevan dengan mereka. perusahaan Anda.
Juga, pertimbangkan untuk bertanya kepada orang-orang Anda. Mintalah mereka melakukan penelitian sendiri (termasuk sampel atau salinan gratis di web atau perpustakaan) dan mereka akan memberi tahu Anda buku mana yang mereka anggap relevan dengan pekerjaan mereka. Tidak ada gunanya membeli barang yang tidak akan dibaca oleh siapa pun.
sumber
Berikut ini adalah kumpulan buku acak tentang algoritma lanjutan berdasarkan apa yang saya anggap sebagai buku hebat tentang algoritma canggih. Tentu saja ini hanya pendapat pribadi saya dan ada banyak buku bagus lainnya.
Anda pasti harus mempertimbangkan buku Kleinberg / Tardos, yang hanya merupakan buku teks yang hebat.
Anda juga harus tahu bahwa pada topik tertentu ada "buku pegangan" yang memberikan ikhtisar ensiklopedis di atas bidang (misalnya Buku Pegangan Geometri Komputasi). disunting oleh JR Sack, J. Urrutia. Perhatikan bahwa buku pegangan ini adalah pricy. Jadi membeli mereka mungkin membantu Anda menghabiskan 5k.
sumber
Anda tidak menentukan spesialisasi perusahaan Anda, jadi tidak mudah untuk memberikan lebih dari rekomendasi umum. Secara keseluruhan, saya pikir daftar yang Anda kumpulkan cukup bagus, dan saya tidak akan menghapus apa pun darinya. Hanya beberapa tambahan dan komentar:
1) Cormen adalah teks standar. Sedgewick adalah teks standar lainnya. Saya selalu mendapatkan lebih banyak dari Sedgewick tetapi YMMV. Anda tampaknya memiliki anggaran. Beli keduanya.
2) Saya tidak memiliki salinan "The Garbage Collection Handbook" tetapi saya memiliki salinan survei Jones & Lin tentang pengumpulan sampah. Jika Anda berniat melakukan manajemen memori otomatis apa pun, Anda harus membeli yang ini.
3) Anda juga punya beberapa buku yang berguna tentang teori parsing dan automata, tetapi Anda kehilangan dua buku (tiga volume) yang menurut saya paling berguna: Teori Parsing Sippu & Soisalon-Soisinen , dan Teknik Parsing Dick Grune , Panduan Praktis . Yang pertama adalah tinjauan umum yang luar biasa dari teori tersebut, dan yang kedua adalah tinjauan mendalam dari praktik tersebut. (Ngomong-ngomong, dapatkan buku naga juga. Tapi aku berani bertaruh kamu akan lebih sering menggunakan Grune.)
4) Setiap perpustakaan pada struktur data memerlukan salinan "Struktur Data Murni Fungsional" Okasaki. Saya rasa saya tidak pernah membaca buku ini setipis ini dengan begitu banyak ide menarik.
5) Saya tidak memiliki salinan "Algoritma pada Strings" Maxime Crochemore, tapi saya berharap saya punya. Sangat praktis, banyak ide berguna.
Algoritma dalam C ++ / Java / C (pilih satu), Edisi Ketiga oleh Robert Sedgewick. Dua volume. Addison-Wesley, 2001.
The Garbage Collection Handbook oleh Richard Jones, Antony Hosking dan Eliot Moss.
Teori Parsing, oleh Seppo Sippu dan Eljas Soisalon-Soininen. Dua volume: Vol. 1 Bahasa dan Parsing; Vol. 2 Parsing LR (k) dan LL (k). Springer, 1988.
Teknik Parsing, Panduan Praktis, Edisi Kedua oleh Dick Grune dan Ceriel JH Jacobs. Springer, 2008.
Struktur Data Murni Fungsional oleh Chris Okasaki. Cambridge, 1998.
Algoritma pada Strings oleh Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.
sumber