Çeşitli konularda algoritma kitapları


11

Küçük şirketimiz (yaklaşık 15 kişi) için algoritmalar üzerine bir kitap kütüphanesi oluşturmakla görevlendirildim. Bütçe 5k'dan fazla, ama kesinlikle 10k'tan az, bu yüzden adil sayıda kitap satın alabilirim. Buradaki tüm insanlar en az CS lisans derecesine veya yakından ilişkili bir alana sahiptir, bu yüzden Cormen gibi bazı temel ders kitapları alırken, daha ileri konularla ilgili iyi kitaplarla ilgileniyorum. (Knuth'un 4 cildi BTW'yi alacağım.)

Bazı konular listesi:

  • Sıralama algoritmaları

  • Grafik algoritmaları

  • Dize algoritmaları

  • Rastgele algoritmalar

  • Dağıtılmış algoritmalar

  • Kombinatoryal algoritmalar

  • vb.

Esasen, CS'deki algoritmalar ve veri yapıları ile ilgili önemli konular hakkındaki kitaplar hakkında iyi öneriler arıyorum. Özellikle iyi bir okulda lisans derecesinin bir parçası olarak algoritma ve veri yapısı sınıflarında genellikle kapsanan şeylerin ötesine geçen şeyler. Sorunun oldukça bulanık olduğunu biliyorum, çünkü genel olarak kullanışlı malzeme arıyorum. Geliştirdiğimiz yazılım çoğunlukla büyük miktarda veriyi işleyen sistem düzeyidir.

İdeal, çoğu insanın duymamış olabileceği oldukça yeni serin veri yapılarını ve algoritmaları kapsayacak herhangi bir şey bulmak olacaktır.


DÜZENLEME: İşte almam gerektiğini düşündüğüm bazı ön kitaplar:

  • Algoritmalara Giriş Cormen ve ark.

  • Algoritma Tasarımı Kleinberg, Tardos

  • Bilgisayar Programlama Sanatı Cilt 1-4 Knuth

  • Vazirani Yaklaşım Algoritmaları

  • Williamson, Shmoys tarafından Yaklaşım Algoritmalarının Tasarımı

  • Rastgele Algoritmalar Motwani, Raghavan

  • Sipser ile Hesaplama Teorisine Giriş

  • Arora, Barak'ın Hesaplama Karmaşıklığı

  • Bilgisayarlar ve Sürdürülebilirlik Garey ve Johnson

  • Schrijver'in Kombinatoryal Optimizasyonu

Meslektaşlarımın dil tasarımı, derleyiciler ve biçimsel yöntemler ile ilgili teknikler ve algoritmalar ile uğraşmak istedikleri birkaç kitap:

  • Pierce Tarafından Türleri ve Programlama Dilleri

  • Baier, Katoen tarafından Model Kontrol Prensipleri

  • Derleyiciler: Aho, Lam, Sethi, Ullman'ın İlkeleri, Teknikleri ve Araçları

  • Derleyici Tasarım El Kitabı: Optimizasyonlar ve Makine Kodu Üretimi, İkinci Baskı by Srikant, Shankar

  • Çöp Toplama El Kitabı: Jones, Hosking, Moss tarafından Otomatik Bellek Yönetimi Sanatı


Her kütüphanenin sahip olması gereken kitaplar: * Jon Kleinberg ve Éva Tardos'un Algoritma Tasarımı * Michael Sipser tarafından Hesaplama Teorisine Giriş * Bilgisayarlar ve Süreksizlik: MR Garey ve DS Johnson tarafından NP Tamamlama Teorisi Kılavuzu
Pål GD

> * Hesaplama Teorisine Giriş Michael Sipser Bu harika bir kitap, ama daha çok Otomata ve Diller, Bağlamdan Bağımsız Diller, Turing Makineleri, Karmaşıklık Teorisi vb. Algoritmalar
Devid

1
Vay canına, bu geniş bir soru. Seçimin kalitesini ve kapsamını nasıl doğrulamayı düşünüyorsunuz? Nedir sizin arka plan? Şirketiniz ne üzerinde çalışıyor? Yüksek lisans veya doktora sahibi olanlarınız var mı?
Raphael

1
Moderatör bildirimi: lütfen tek kitap cevapları göndermeyin ve lütfen bu seçimleri neden yaptığınızı açıklayın. Burada 5 bin dolarlık bir bütçe var: nasıl harcayacağınızı açıklayın! Bize hangi kitapların olması gerektiğini düşündüğünüzü, hangi konuların daha fazla araştırılacağını, seçiminizi nasıl yaptığınızı söyleyin ...
Gilles 'SO- kötü olmayı bırakın'

Ağırlıklı olarak tasarımla mı yoksa algoritmaların analiziyle mi ilgileniyorsunuz? Eğer öyleyse, halkınızın teorik analizde yetkin olmasını mı istiyorsunuz, yoksa verimliliği değerlendirmek için daha pratik araçlarda yetkin olmayı mı tercih edersiniz?
Raphael

Yanıtlar:


13

Bunların 5000 dolar değerinde bir kitap okumadım (neredeyse). Bu nedenle, sizi seçmeniz gereken bazı literatür gruplarını önereceğim ve sizi seçilmiş temsilcilere yönlendireceğim. Kitapların çoğunu tam olarak okuduğumu iddia edemiyorum, bu yüzden çoğunlukla tanımlara, üstünkörü izlenime ve itibara güvenmek zorundayım. Birçoğuna bir ölçüde baktım ya da onunla çalıştım ya da uzmanlar tarafından tavsiye ettim.

İnsanlarınızın yapamayacaklarını öğrenmenin aksine, neler yapılabileceğini ve nasıl yapılacağını öğrenmesini istediğinizi varsayıyorum. Özellikle, hesaplanabilirlik ve karmaşıklık teorisi ile ilgili kitapları bu şekilde bırakacağım; Çalışanlarınızın lisans mesajlarından ilgili mesajları almasını bekliyorum.

  • Temel Bilgiler
    İnsanlarınız onları bir noktada öğrenmiş olsalar da, temel özellikleri aramalarını beklerler. Wikipedia gibi kaynaklar genellikle standartların altında veya tamamen yanlış olduğundan, onlara uygun referans metinleri almak istersiniz.

    Popüler seçenekler arasında

    • Cormen tarafından Algoritmalara Giriş , Leiserson ve ark.
      Temel analiz tekniklerinin yanı sıra birçok temel algoritmayı ve veri yapısını kapsayan çok geniş bir tanıtım. Öğretim amaçlı sıkça kullanılan ve 3. baskısında mevcut olan standart bir metin (bu yüzden çoğu hata şimdiye kadar tasfiye edilmiş olmalıdır). Birçok egzersiz.
    • Sedgewick ve Wayne'in Algoritmaları
      Dördüncü baskısında bir başka standart metin. Cormen'den daha az geniş, ancak uygulama ayrıntılarına daha fazla dikkat. Coursera'da ücretsiz bir kurs da dahil olmak üzere birçok çevrimiçi malzeme . Birçok egzersiz.
    • Algoritmalara Giriş - Udi Manber'in Yaratıcı Yaklaşımı
      Ayrıca bir dizi konuyu daraltmakla birlikte didaktiklere dikkat ederek sunulmuştur. Odak endüktif stratejiler üzerinde. Bazıları için çok sayıda egzersiz ve çözüm (veya en azından ipuçları) içerir. Olağandışı tarzı nedeniyle önerilen ders kitabını beğenmezseniz iyi bir ikincil referans.
    • Graham, Knuth ve Patashnik'ten Beton Matematiği
      Algoritma analiziyle ilgili olarak ayrık matematiği kapsar. Bilgisayar bilimi ihtiyaçları ve titizliğine odaklanan nadir . Çok kaliteli. Çözümlerle çok sayıda egzersiz.
  • Ö

  • Gelişmiş Anketler

    • Okasaki
      Classic ve temel literatürün tamamen işlevsel veri yapıları genellikle prosedür paradigmasına odaklanır. İşlevsel paradigmada çalışmak istiyorsanız, verimli veri yapıları için yeni tekniklere ihtiyaç vardır. Bu kitap, bölge hakkında ayrıntılı bir genel bakıştır.
    • Pirinç ile İleri Veri Yapıları
      Bazen temel teknikler yeterli değildir. Bu, kod ve birçok referansı olan gelişmiş veri yapılarına genel bir bakış.
    • Hromkovič
      Karmaşıklık teorisinin Zor Sorunlar için Algoritması , bize (uygulayıcılar olarak) birçok doğal sorun için kesin ama etkili algoritmalar aramaya çalışmamamızı söyler. Bu problemleri pratik olarak çözmek için birçok teknik vardır; bu metin size nasıl olduğunu gösterir.
  • İhtisas Edebiyatı

    • Derleyiciler: İlkeler, Teknikler ve Araçlar Aho ve arkadaşları tarafından Ejderha Kitabı aka
      Should Hiç şudur, bir derleyici ile yapı veya tinker gereken alan üzerinde standart metin.
    • Ağ Akışları: Ahuja'nın Teorisi, Algoritmaları ve Uygulamaları
      Birçok sorun ağ akışı problemleri olarak modellenebilir; bu kitap size alanın tamamını kapsamaktadır.
    • Koller ve Friedman'ın Olasılıksal Grafik Modelleri
      Grafik modeller, olasılıkla makine öğrenimi için (diğerleri arasında) senaryoları modellemede önemli bir araçtır. Kompleks hakkında kapsamlı bir genel bakış. İlgili bir ücretsiz çevrimiçi kurs var .
    • Charras ve Lecrog tarafından Tam String Eşleştirme Algoritmaları El Kitabı Verilerle
      uğraşırken önemli bir görevdir. Bu kitap, üst düzey açıklamalar ve uygulamalar da dahil olmak üzere, iş için ilgili algoritmaların çoğunu (tümü olmasa da) listeler.
    • Sedgewick ve Flajolet'ten Analitik Kombinatorik
      Aynı yazarlar tarafından "Algoritma Analizine Giriş" den sonraki derin matematiksel dalış. Herkes için değil, ilgilenenler için altın.
    • Gusfield'ın Dizeler, Ağaçlar ve Diziler üzerindeki Algoritmalar Çok
      miktarda dize verisiyle (özellikle biyoloji bağlamlarında) uğraşmak zorunda kalırsanız, ilgili veri yapıları ve algoritmalarına genel bir bakış sağladığı için bu kitaptır.
  • Uygulayıcı için

    • Paralel Programlama Kalıpları Mattson ve ark.
      Uygulamada, büyük sorunlarla başa çıkmak için birden fazla makine kullanmak isteyebilirsiniz. Bu kitap, bunu yapmanın yolları, yani verileri ve bilgi işlem ajanlarını nasıl organize edeceğiniz ve taşıyacağınız konusunda üst düzey, örnek odaklı bir genel bakıştır. Ayrıca mevcut araçlarla uygulama yöntemlerini de ele alır.
    • McGeoch tarafından Deneysel Algoritma Kılavuzu
      Teorik analiz çok zor veya çok kaba olduğunda, deneyler yapmanız gerekir. Bu, algoritmalar üzerinde deneylerin düzgün bir şekilde nasıl tasarlanacağına bir giriş niteliğindedir.
    • Kesin ANTLR 4 Referans Parr tarafından
      You genellikle bunları ayrıştırmak için alana özgü dilleri ve araçları gerekir. ANTLR olgun ve kullanışlı bir derleyici üreticisidir ve bu nasıl kullanılacağını öğrenmek için en uygun kitaptır. Parr'ın DSL'lerde incelemeye değer başka kitapları da var.

Çok yeni bir materyal istiyorsanız, belki de bir üniversite kütüphanesi ile işbirliği yaparak, çalışanlarınızın dergilere ve konferans bildirilerine erişmesini sağlamanız gerekir. Ayrıca kendileriyle ilgili konularda konferanslara katılmalarına izin verebilirsiniz. şirketin.

Ayrıca, insanlarınıza sormayı düşünün. Kendi araştırmalarını yapmalarını sağlayın (ücretsiz örnekler veya web veya kütüphanelerdeki kopyalar dahil) ve hangi kitapların çalışmaları ile ilgili olduğunu düşündüklerini size söyleyeceklerdir. Kimsenin okuyamayacağı şeyler satın almanın bir yararı yoktur.


Ve elbette, onları ilginç sorunları ile buraya gönderin. :)
Raphael


@Bartek: Hiç duymadım, bu yüzden tavsiye edemem.
Raphael

4

İşte gelişmiş algoritmalar hakkında harika bir kitap olarak düşündüğüm temel üzerine gelişmiş algoritmalar üzerine rastgele bir kitap koleksiyonu. Tabii ki bu sadece benim kişisel görüşüm ve başka birçok iyi kitap var.

  • Vijay V. Vazirani'nin Yaklaşım Algoritmaları
  • Yaklaşım Algoritmalarının Tasarımı, David P. Williamson, David B. Shmoys
  • Hesaplamalı geometri: Ketan Mulmuley tarafından rastgele algoritmalar ile giriş
  • Rajeev Motwani, Prabhakar Raghavan'ın Rastgele Algoritmaları
  • Dizeler, Ağaçlar ve Diziler Üzerine Algoritmalar - Dan Gusfield
  • Kombine Edici Optimizasyon, William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

kesinlikle harika bir ders kitabı olan Kleinberg / Tardos kitabını düşünmelisiniz.

Ayrıca, belirli konularda bir alan üzerinde ansiklopedik bir genel bakış sağlayan "el kitapları" olduğunu da bilmelisiniz (örneğin, Hesaplamalı Geometri El Kitabı). JR Sack, J. Urrutia tarafından düzenlenmiştir. Bu el kitaplarının pahalı olduğuna dikkat edin. Yani onları satın almak 5k harcamanıza yardımcı olabilir.


1
Bunun "rastgele" bir koleksiyon olduğunu söylüyorsun. Bu kitapları tavsiye etmek için özel nedenleriniz var mı? OP kalan 4.5k $ ile ne yapmalı?
Raphael

4

Şirketinizin ne uzmanlaştığını belirtmezsiniz, bu nedenle genel önerilerden daha fazlasını sağlamak kolay değildir. Genel olarak, bir araya getirdiğiniz listenin oldukça iyi olduğunu düşünüyorum ve ondan hiçbir şey kaldırmam. Sadece birkaç ekleme ve yorum:

1) Cormen standart bir metindir. Sedgewick başka bir standart metindir. Sedgewick'ten daha çok şey aldım ama YMMV. Bütçeniz var gibi görünüyor. Her ikisini de satın alın.

2) "Çöp Toplama El Kitabı" nın bir kopyası yok, ancak Jones & Lin'in çöp toplama ile ilgili daha önceki araştırmasının küçük bir kopyası var. Herhangi bir otomatik bellek yönetimi yapmak istiyorsanız, kesinlikle bunu satın almalısınız.

3) Ayrıştırma ve otomata teorisi hakkında da birkaç yararlı kitabınız var, ancak en yararlı bulduğum iki kitabı (üç cilt) kaçırıyorsunuz: Sippu & Soisalon-Soisinen Ayrıştırma Teorisi ve Dick Grune'un Ayrıştırma Teknikleri, Pratik bir Rehber . Birincisi teoriye büyük bir bakış, ikincisi ise uygulamaya kapsamlı bir bakış. (Elbette, ejderha kitabını da al. Ama eminim Grune'u daha fazla kullanacaksın.)

4) Veri yapılarındaki her kütüphane için Okasaki'nin "Tamamen Fonksiyonel Veri Yapıları" nın bir kopyası gerekir. Bu kadar ince bir kitabı çok ilginç fikirlerle okuduğumu sanmıyorum.

5) Maxime Crochemore'un "Tellerde Algoritmalar" ın bir kopyasına sahip değilim ama keşke yapsaydım. Son derece pratik, birçok yararlı fikir.

  • C ++ / Java / C'de algoritmalar (birini seçin), Üçüncü Baskı, Robert Sedgewick. İki cilt. Addison-Wesley, 2001.

  • Çöp Toplama El Kitabı Richard Jones, Antony Hosking ve Eliot Moss.

  • Ayrıştırma Teorisi, Seppo Sippu ve Eljas Soisalon-Soininen. İki cilt: Cilt. 1 Diller ve Ayrıştırma; Vol. 2 LR (k) ve LL (k) Ayrıştırma. Springer, 1988.

  • Ayrıştırma Teknikleri, Pratik Bir Kılavuz, İkinci Baskı, Dick Grune ve Ceriel JH Jacobs. Springer, 2008.

  • Tamamen Fonksiyonel Veri Yapıları, Chris Okasaki. Cambridge, 1998.

  • Dizelerde Algoritmalar, Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.

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.