Buku-buku algoritma tentang berbagai topik

11

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

mtf
sumber
Buku-buku yang harus dimiliki setiap perpustakaan: * Desain Algoritma oleh Jon Kleinberg dan Éva Tardos * Pengantar Teori Komputasi oleh Michael Sipser * Komputer dan Daya Tarik: Panduan untuk Teori Kelengkapan NP oleh MR Garey dan DS Johnson
Pål GD
> * Pengantar Teori Komputasi oleh Michael Sipser Ini adalah buku yang hebat, tetapi lebih tentang Automata dan Bahasa, Bahasa Bebas Konteks, Mesin Turing, Teori Kompleksitas dan sebagainya. Tidak banyak tentang Algoritma
Devid
1
Wow, ini pertanyaan luas. Bagaimana Anda berharap untuk memverifikasi kualitas dan cakupan seleksi? Apa Anda latar belakang? Apa yang perusahaan Anda kerjakan? Apakah Anda memiliki orang dengan gelar master atau doktor?
Raphael
1
Pemberitahuan moderator: tolong jangan posting jawaban satu buku, dan tolong jelaskan mengapa Anda membuat pilihan ini. Ada anggaran $ 5k di sini: jelaskan bagaimana Anda akan membelanjakannya! Beri tahu kami buku mana yang menurut Anda harus dimiliki, topik mana yang harus ditelusuri lebih lanjut, bagaimana Anda menentukan pilihan ...
Gilles 'SO- stop being evil'
Apakah Anda terutama tertarik pada desain, atau juga dalam analisis algoritma? Jika demikian, apakah Anda ingin karyawan Anda kompeten dalam analisis teoretis, atau apakah Anda lebih suka mereka mahir dalam cara yang lebih praktis untuk mengevaluasi efisiensi?
Raphael

Jawaban:

13

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 Algoritma oleh Cormen, Leiserson et al.
      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.
    • Algoritma oleh Sedgewick dan Wayne
      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.
    • Pengantar Algoritma - Pendekatan Kreatif oleh Udi Manber
      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.
    • Matematika Beton oleh Graham, Knuth dan Patashnik
      Meliputi matematika diskrit yang relevan dengan analisis algoritma. Jarang dalam fokusnya pada kebutuhan dan ketelitian ilmu komputer . Kualitas sangat tinggi. Banyak latihan dengan solusi.
  • O

  • Survei Tingkat Lanjut

    • Struktur data yang murni fungsional oleh Okasaki
      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.
    • Struktur Data Lanjut oleh Brass
      Kadang-kadang, teknik dasar tidak cukup. Ini adalah gambaran umum atas struktur data tingkat lanjut, dengan kode dan banyak referensi.
    • Algoritma untuk Masalah Sulit oleh Hromkovič
      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

    • Compiler: Prinsip, Teknik, dan Alat alias The Dragon Book oleh Aho et al
      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 Probabilistik oleh Koller dan Friedman
      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 .
    • Buku Pegangan Algoritma Pencocokan String Tepat oleh Charras dan Lecrog
      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.
    • Analytic Combinatorics oleh Sedgewick dan Flajolet
      Penyelaman matematis yang mendalam setelah "Pengantar Analisis Algoritma" oleh penulis yang sama. Bukan untuk semua orang, tapi emas untuk yang berminat.
    • Algoritma pada Strings, Trees dan Sequences oleh Gusfield
      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

    • Pola untuk Pemrograman Paralel oleh Mattson et al.
      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.
    • Panduan untuk Algoritma Eksperimental oleh McGeoch
      Ketika analisis teoritis terlalu sulit atau terlalu kasar, Anda harus melakukan percobaan. Ini adalah pengantar tentang bagaimana merancang eksperimen dengan tepat pada algoritma.
    • Referensi Definitif ANTLR 4 oleh Parr
      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.

Raphael
sumber
Dan, tentu saja, mengirim mereka ke sini dengan masalah menarik mereka. :)
Raphael
2
Bagaimana dengan The Algorithm Design Manual ?
Bartosz Przybylski
@ Bartek: Tidak pernah mendengarnya, jadi saya tidak bisa merekomendasikannya.
Raphael
4

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.

  • Algoritma Perkiraan oleh Vijay V. Vazirani
  • Desain Algoritma Aproksimasi oleh David P. Williamson, David B. Shmoys
  • Komputasi geometri: pengantar melalui algoritma acak oleh Ketan Mulmuley
  • Algoritma Acak oleh Rajeev Motwani, Prabhakar Raghavan
  • Algoritma pada Strings, Trees and Sequences oleh Dan Gusfield
  • Optimalisasi Kombinasi oleh William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

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.

A.Schulz
sumber
1
Anda mengatakan ini adalah koleksi "acak". Apakah Anda punya alasan khusus untuk merekomendasikan buku-buku itu? Apa yang harus dilakukan OP dengan sisa $ 4,5k?
Raphael
4

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.

rici
sumber