Sách thuật toán về một loạt các chủ đề


11

Tôi đã được giao nhiệm vụ xây dựng một thư viện sách về các thuật toán cho công ty nhỏ của chúng tôi (khoảng 15 người). Ngân sách hơn 5k, nhưng chắc chắn chưa đến 10k, vì vậy tôi có thể mua một số lượng sách hợp lý. Tất cả mọi người ở đây đều có ít nhất một bằng Cử nhân về CS hoặc một lĩnh vực liên quan chặt chẽ, vì vậy trong khi tôi sẽ nhận được một số sách giáo khoa cơ bản như Cormen, tôi quan tâm nhiều hơn đến những cuốn sách hay về các chủ đề nâng cao. (Tôi sẽ nhận 4 tập của Knuth, BTW.)

Một số danh sách các chủ đề sẽ là:

  • Thuật toán sắp xếp

  • Thuật toán đồ thị

  • Thuật toán chuỗi

  • Thuật toán ngẫu nhiên

  • Thuật toán phân tán

  • Thuật toán kết hợp

  • Vân vân.

Về cơ bản, tôi đang tìm kiếm các khuyến nghị tốt về sách về các chủ đề chính trong CS liên quan đến thuật toán và cấu trúc dữ liệu. Đặc biệt là những thứ vượt xa những gì thường được đề cập trong các lớp học về thuật toán và cấu trúc dữ liệu như là một phần của bằng Cử nhân tại một trường học tốt. Tôi biết câu hỏi khá mờ nhạt, vì tôi đang tìm kiếm tài liệu hữu ích chung chung. Phần mềm chúng tôi phát triển chủ yếu là công cụ cấp hệ thống xử lý lượng lớn dữ liệu.

Lý tưởng cũng là tìm bất cứ thứ gì có thể bao gồm các thuật toán và cấu trúc dữ liệu khá gần đây, mà hầu hết mọi người có thể chưa nghe nói đến.


EDIT: Đây là một số cuốn sách sơ bộ mà tôi nghĩ rằng tôi nên nhận được:

  • Giới thiệu về thuật toán của Cormen et al.

  • Thiết kế thuật toán của Kleinberg, Tardos

  • Nghệ thuật lập trình máy tính Vol 1-4 của Knuth

  • Các thuật toán gần đúng của Vazirani

  • Thiết kế các thuật toán gần đúng của Williamson, Shmoys

  • Thuật toán ngẫu nhiên của Motwani, Raghavan

  • Giới thiệu về Lý thuyết tính toán của Sipser

  • Độ phức tạp tính toán của Arora, Barak

  • Máy tính và tính hấp dẫn của Garey và Johnson

  • Tối ưu hóa kết hợp bởi Schrijver

Một vài cuốn sách khác mà các đồng nghiệp của tôi muốn liên quan đến các kỹ thuật và thuật toán để thiết kế ngôn ngữ, trình biên dịch và phương pháp chính thức là:

  • Các loại và ngôn ngữ lập trình của Pierce

  • Nguyên tắc kiểm tra mô hình của Baier, Katoen

  • Trình biên dịch: Nguyên tắc, Kỹ thuật và Công cụ của Aho, Lam, Sethi, Ullman

  • Cẩm nang thiết kế trình biên dịch: Tối ưu hóa và tạo mã máy, Ấn bản thứ hai của Srikant, Shankar

  • Cẩm nang thu gom rác: Nghệ thuật quản lý bộ nhớ tự động của Jones, Hosking, Moss


Những cuốn sách mà mọi thư viện nên có: * Thiết kế thuật toán của Jon Kleinberg và Éva Tardos * Giới thiệu về Lý thuyết tính toán của Michael Sipser * Máy tính và tính hấp dẫn: Hướng dẫn về lý thuyết hoàn thiện NP của MR Garey và DS Johnson
Pål GD

> * Giới thiệu về Lý thuyết tính toán của Michael Sipser Đây là một cuốn sách hay, nhưng nó nói nhiều hơn về Automata và Ngôn ngữ, Ngôn ngữ không ngữ cảnh, Máy Turing, Lý thuyết phức tạp, v.v. Nó không nhiều về Thuật toán
Devid 2/213

1
Wow, đây là một câu hỏi rộng. Làm thế nào để bạn mong đợi để xác minh chất lượng và phạm vi của lựa chọn? Nền của bạn là gì? Công ty của bạn làm việc trên cái gì? Bạn có những người có bằng thạc sĩ hoặc tiến sĩ?
Raphael

1
Thông báo của người điều hành: vui lòng không đăng câu trả lời trong một cuốn sách và vui lòng giải thích lý do tại sao bạn thực hiện các lựa chọn này. Có ngân sách $ 5k ở đây: giải thích cách bạn sẽ chi tiêu! Hãy cho chúng tôi biết những cuốn sách mà bạn nghĩ là phải có, những chủ đề nào cần được khám phá thêm, cách bạn đưa ra lựa chọn của mình ...
Gilles 'SO- ngừng trở nên xấu xa'

Bạn chủ yếu quan tâm đến thiết kế, hoặc cũng có thể phân tích các thuật toán? Nếu vậy, bạn có muốn người của bạn có được năng lực trong phân tích lý thuyết, hay bạn muốn họ thành thạo các phương tiện thực tế hơn để đánh giá hiệu quả?
Raphael

Câu trả lời:


13

Tôi chưa (gần) đọc đủ sách để đặt tên cho chúng trị giá $ 5000. Do đó, tôi sẽ đề xuất một số nhóm văn học bạn nên đề cập cũng như hướng bạn tới các đại diện được chọn. Tôi không thể tự nhận mình đã đọc hầu hết các cuốn sách một cách đầy đủ, vì vậy tôi phải dựa chủ yếu vào các mô tả, ấn tượng khó hiểu và danh tiếng. Tôi đã xem xét hoặc làm việc với hầu hết trong số họ ở một mức độ nào đó, hoặc được các chuyên gia khuyên dùng.

Tôi cho rằng bạn muốn người của bạn học những gì có thể làm được và cách thực hiện, trái ngược với việc học những gì họ không thể làm. Cụ thể, tôi sẽ bỏ các cuốn sách về lý thuyết tính toán và độ phức tạp như vậy; Tôi hy vọng người của bạn đã lấy đi những thông điệp liên quan từ giáo dục đại học của họ.

  • Những điều cơ bản
    Mặc dù người của bạn đã học được chúng ở một số điểm, mong đợi họ tìm kiếm những điều cơ bản. Vì các nguồn như Wikipedia thường không đạt tiêu chuẩn hoặc hoàn toàn sai, bạn muốn có được các văn bản tham khảo phù hợp.

    Lựa chọn phổ biến bao gồm

    • Giới thiệu về thuật toán của Cormen, Leiserson et al.
      Giới thiệu rất rộng bao gồm nhiều thuật toán cơ bản và cấu trúc dữ liệu cũng như các kỹ thuật phân tích cơ bản. Một văn bản tiêu chuẩn được sử dụng thường xuyên cho mục đích giảng dạy và có sẵn trong phiên bản thứ 3 của nó (vì vậy hầu hết các lỗi nên được thanh trừng ngay bây giờ). Rất nhiều bài tập.
    • Thuật toán của Sedgewick và Wayne
      Một văn bản tiêu chuẩn khác trong phiên bản thứ tư của nó. Ít rộng hơn Cormen, nhưng chú ý nhiều hơn đến các chi tiết thực hiện. Rất nhiều tài liệu trực tuyến, bao gồm một khóa học miễn phí trên Coursera . Rất nhiều bài tập.
    • Giới thiệu về thuật toán - Cách tiếp cận sáng tạo của Udi Manber
      Cũng khá mỏng trong việc lựa chọn các chủ đề, nhưng được chú ý đến didactics. Trọng tâm là các chiến lược quy nạp . Chứa rất nhiều bài tập và giải pháp (hoặc ít nhất là gợi ý) cho một số. Một tài liệu tham khảo thứ cấp tốt nếu bạn không thích sách giáo khoa được đề xuất vì phong cách khác thường của nó.
    • Toán học cụ thể của Graham, Knuth và Patashnik
      Bao gồm toán học rời rạc có liên quan đến phân tích thuật toán. Hiếm khi tập trung vào nhu cầu khoa học máy tính sự nghiêm ngặt. Chất lượng rất cao. Rất nhiều bài tập với các giải pháp.
  • O

  • Khảo sát nâng cao

    • Các cấu trúc dữ liệu chức năng thuần túy của Okasaki
      Cổ điển và tài liệu cơ bản thường tập trung vào mô hình thủ tục. Nếu bạn muốn làm việc trong mô hình chức năng, các kỹ thuật mới cho cấu trúc dữ liệu hiệu quả là cần thiết. Cuốn sách này là một cái nhìn tổng quan chi tiết trong khu vực.
    • Cấu trúc dữ liệu nâng cao bằng đồng thau
      Đôi khi, các kỹ thuật cơ bản là không đủ. Đây là một tổng quan về cấu trúc dữ liệu nâng cao, với mã và nhiều tài liệu tham khảo.
    • Thuật toán cho các vấn đề khó theo
      lý thuyết phức tạp Hromkovič cho chúng ta (với tư cách là các học viên) không bận tâm tìm kiếm các thuật toán chính xác nhưng hiệu quả cho nhiều vấn đề tự nhiên. Có rất nhiều kỹ thuật để thực tế giải quyết những vấn đề này; văn bản này cho bạn thấy làm thế nào.
  • Văn học chuyên ngành

    • Trình biên dịch: Nguyên tắc, kỹ thuật, và công cụ aka The Dragon Book bởi Aho et al
      có nên bao giờ bạn cần phải xây dựng hay tinker với một trình biên dịch, đây là những văn bản chuẩn trên địa bàn.
    • Luồng mạng: Lý thuyết, Thuật toán và Ứng dụng của Ahuja
      Nhiều vấn đề có thể được mô hình hóa thành các vấn đề về lưu lượng mạng; cuốn sách này cung cấp cho bạn một phạm vi bảo hiểm đầy đủ của lĩnh vực này.
    • Các mô hình đồ họa xác suất của Koller và Friedman
      Các mô hình đồ họa là một công cụ chính trong các kịch bản mô hình hóa cho máy học (trong số các mô hình khác) theo xác suất. Đây là một tổng quan toàn diện về phức tạp. Có một khóa học trực tuyến miễn phí có liên quan .
    • Sổ tay của String Exact Matching thuật toán bởi Charras và Lecrog
      Chuỗi phù hợp là một nhiệm vụ quan trọng bao giờ hết khi giao dịch với dữ liệu. Cuốn sách này liệt kê hầu hết (nếu không phải tất cả) các thuật toán có liên quan cho công việc, bao gồm các mô tả cấp cao cũng như triển khai.
    • Kết hợp phân tích của Sedgewick và Flajolet
      Việc lặn sâu toán học sau "Giới thiệu về phân tích thuật toán" của cùng các tác giả. Không dành cho tất cả mọi người, nhưng vàng cho những người quan tâm.
    • Các thuật toán về Chuỗi, Cây và Chuỗi của Gusfield
      Nếu bạn phải xử lý một lượng lớn dữ liệu chuỗi (đặc biệt là trong bối cảnh sinh học), đây là cuốn sách hướng dẫn vì nó cung cấp tổng quan về các cấu trúc dữ liệu và thuật toán có liên quan.
  • Dành cho các học viên

    • Các mẫu cho lập trình song song của Mattson et al.
      Trong thực tế, bạn có thể muốn sử dụng nhiều máy để xử lý các vấn đề lớn. Cuốn sách này là một tổng quan cấp cao, dựa trên ví dụ về các cách để làm như vậy, đó là cách tổ chức và di chuyển các tác nhân dữ liệu và máy tính. Nó cũng giải quyết các cách để thực hiện chúng với các công cụ hiện có.
    • Hướng dẫn về thuật toán thực nghiệm của McGeoch
      Khi phân tích lý thuyết quá khó hoặc quá thô, bạn phải thực hiện các thí nghiệm. Đây là phần giới thiệu về cách thiết kế đúng các thí nghiệm trên các thuật toán.
    • Tham chiếu ANTLR 4 dứt khoát của Parr
      Bạn thường cần các ngôn ngữ và công cụ cụ thể của miền để phân tích chúng. ANTLR là một trình tạo trình biên dịch trưởng thành và tiện lợi, và đây là cuốn sách phù hợp nhất để học cách sử dụng nó. Parr cũng có một số cuốn sách khác về DSL đáng để kiểm tra.

Nếu bạn muốn tài liệu gần đây, bạn nên xem xét việc mọi người truy cập vào các tạp chí và thủ tục hội nghị, có thể bằng cách hợp tác với một thư viện trường đại học. Bạn cũng có thể thực sự cho phép họ tham dự các hội nghị về các chủ đề liên quan đến họ. Công ty của bạn.

Ngoài ra, hãy xem xét hỏi người của bạn. Yêu cầu họ tự nghiên cứu (bao gồm các mẫu hoặc bản sao miễn phí trên web hoặc thư viện) và họ sẽ cho bạn biết những cuốn sách mà họ cho là phù hợp với công việc của họ. Không có sử dụng trong việc mua công cụ sẽ không ai đọc.


Và, tất nhiên, gửi chúng ở đây với các vấn đề thú vị của họ. :)
Raphael


@Bartek: Chưa bao giờ nghe về nó, vì vậy tôi không thể khuyên bạn nên dùng nó.
Raphael

4

Dưới đây là một bộ sách ngẫu nhiên về các thuật toán nâng cao dựa trên những gì tôi coi là cuốn sách tuyệt vời về các thuật toán nâng cao. Tất nhiên đây chỉ là ý kiến ​​cá nhân của tôi và còn nhiều cuốn sách hay khác.

  • Các thuật toán gần đúng của Vijay V. Vazirani
  • Thiết kế các thuật toán gần đúng của David P. Williamson, David B. Shmoys
  • Hình học tính toán: giới thiệu thông qua các thuật toán ngẫu nhiên của Ketan Mulmuley
  • Các thuật toán ngẫu nhiên của Rajeev Motwani, Mitchhakar Raghavan
  • Các thuật toán về Chuỗi, Cây và Chuỗi của Dan Gusfield
  • Tối ưu hóa kết hợp bởi William J. Cook, William H. Cickyham, William R. Pulleyblank, Alexander Schrijver

bạn chắc chắn nên xem xét cuốn sách Kleinberg / Tardos, đây chỉ là một cuốn sách giáo khoa tuyệt vời.

Ngoài ra, bạn nên biết rằng trong một số chủ đề nhất định, có "sổ tay" cung cấp tổng quan về bách khoa toàn thư về một lĩnh vực (ví dụ: Sổ tay hình học tính toán). được chỉnh sửa bởi JR Sack, J. Urrutia. Lưu ý rằng những cuốn sổ tay này là pricy. Vì vậy, mua chúng có thể giúp bạn chi tiêu 5k.


1
Bạn nói rằng đây là một bộ sưu tập "ngẫu nhiên". Bạn có lý do đặc biệt để giới thiệu những cuốn sách? OP nên làm gì với 4,5k còn lại?
Raphael

4

Bạn không chỉ định những gì công ty của bạn chuyên về, vì vậy không dễ để cung cấp nhiều hơn các đề xuất chung. Nhìn chung, tôi nghĩ rằng danh sách bạn đã tổng hợp là khá tốt và tôi sẽ không xóa bất cứ thứ gì khỏi nó. Chỉ cần một vài bổ sung và bình luận:

1) Cormen là một văn bản tiêu chuẩn. Sedgewick là một văn bản tiêu chuẩn khác. Tôi đã luôn nhận được nhiều hơn từ Sedgewick nhưng YMMV. Bạn dường như có ngân sách. Mua cả hai.

2) Tôi không có bản sao của "Cẩm nang thu gom rác" nhưng tôi có một bản sao rõ ràng về khảo sát trước đây của Jones & Lin về thu gom rác. Nếu bạn có ý định thực hiện bất kỳ loại quản lý bộ nhớ tự động nào, bạn chắc chắn nên mua cái này.

3) Bạn cũng đã có một vài cuốn sách hữu ích về lý thuyết phân tích cú pháp và automata, nhưng bạn đang thiếu hai cuốn sách (ba tập) mà tôi thấy hữu ích nhất: Lý thuyết phân tích cú pháp của Sippu & Soisalon-Soisinen và Kỹ thuật phân tích cú pháp của Dick Grune , Hướng dẫn thực hành . Đầu tiên là một tổng quan tuyệt vời về lý thuyết, và thứ hai là một tổng quan toàn diện về thực tiễn. (Bằng mọi cách, cũng nhận được cuốn sách rồng. Nhưng tôi cá là cuối cùng bạn sẽ sử dụng Grune nhiều hơn.)

4) Mỗi ​​thư viện trên các cấu trúc dữ liệu yêu cầu một bản sao "Cấu trúc dữ liệu chức năng thuần túy" của Okasaki. Tôi không nghĩ rằng tôi đã từng đọc bất kỳ cuốn sách mỏng này với rất nhiều ý tưởng thú vị.

5) Tôi không sở hữu một bản sao "Thuật toán trên chuỗi" của Maxime Crochemore, nhưng tôi ước mình đã làm được. Rất thực tế, rất nhiều ý tưởng hữu ích.

  • Các thuật toán trong C ++ / Java / C (chọn một), Ấn bản thứ ba của Robert Sedgewick. Hai tập. Addison-Wesley, 2001.

  • Cẩm nang Bộ sưu tập Rác của Richard Jones, Antony Hosking và Eliot Moss.

  • Lý thuyết phân tích cú pháp, bởi Seppo Sippu và Eljas Soisalon-Soininen. Hai tập: Tập. 1 ngôn ngữ và phân tích cú pháp; Tập Phân tích cú pháp 2 LR (k) và LL (k). Mùa xuân, 1988.

  • Kỹ thuật phân tích cú pháp, Hướng dẫn thực hành, Ấn bản thứ hai của Dick Grune và Ceriel JH Jacobs. Mùa xuân năm 2008.

  • Cấu trúc dữ liệu chức năng thuần túy của Chris Okasaki. Cambridge, 1998.

  • Các thuật toán trên chuỗi của Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.