Có một bách khoa toàn thư về thuật toán? [đóng cửa]


34

Có một bách khoa toàn thư về các thuật toán có phong cách tương tự như Sổ tay toán học không? Có vẻ hữu ích khi có số lượng lớn trong số họ có sẵn ở một nơi. Tôi biết Nghệ thuật lập trình máy tính được coi là một nguồn tốt nhưng nó dường như không phải là bách khoa toàn thư nhiều như hướng dẫn.

Người điều hành Lưu ý

Chúng tôi đang tìm kiếm câu trả lời dài cung cấp một số giải thích và bối cảnh. Đừng chỉ liệt kê một cuốn sách: vui lòng giải thích lý do tại sao bạn giới thiệu một cuốn sách hoặc tài nguyên. Câu trả lời không giải thích bất cứ điều gì sẽ bị xóa. Xem chủ quan tốt, chủ quan xấu để biết thêm thông tin.



Một chút Googling sẽ đi một chặng đường dài để trả lời câu hỏi này. Ít nhất, nó sẽ cung cấp một danh sách các ứng cử viên tốt mà sau đó bạn có thể sử dụng để hỏi một câu hỏi tập trung hơn.
Caleb

Câu trả lời:


41

Tôi không chắc đây có phải là thứ bạn đang tìm kiếm không nhưng NIST có Từ điển thuật toán và cấu trúc dữ liệu . Đó là một từ điển khá toàn diện cho các cấu trúc dữ liệu và thuật toán (doh) và thường là nơi tốt để tìm khi tôi tìm thấy thứ gì đó mà tôi chưa từng nghe thấy trước đây.


Câu trả lời của bạn là khá nhiều chính xác những gì tôi đang tìm kiếm. Thêm điểm để được miễn phí.
Kỹ sư thế giới

Điều thú vị là, trong vài ngày qua, NIST DADS đã bị đóng cửa cho đến khi có thông báo mới vì sự đóng cửa của Chính phủ Hoa Kỳ! Và sau đó khi nghe hàng ngàn nhà phát triển hét lên cùng một lúc ...
haylem

11

Cuốn sách Skiena cũng là một tài liệu tham khảo tốt: http://www.algorist.com/

Cuốn sách bao gồm mọi thứ từ nền tảng thông qua các lĩnh vực vấn đề khác nhau (cấu trúc dữ liệu, tìm kiếm / sắp xếp, vấn đề đồ thị, kết hợp / hoán vị / heuristic) và thậm chí các vấn đề của P so với các vấn đề hoàn thành NP.

Phần đặc biệt có liên quan của cuốn sách cho câu hỏi này là một danh mục gồm ~ 70-75 thuật toán khác nhau, các loại đầu vào mà chúng thường yêu cầu, mô tả tổng thể về vấn đề mà thuật toán cụ thể giải quyết và ví dụ cụ thể về các ứng dụng (ví dụ: phần trên cây hậu tố thảo luận về việc sử dụng các lần thử và khả năng ứng dụng của nó vào chuỗi con và tìm kiếm). Trường hợp có thể tác giả cũng xác định các triển khai hiện có cho các ngôn ngữ phổ biến khác nhau (c, c ++, Java và một số ngôn ngữ khác.)


Đó là gần nhất với một bách khoa toàn thư thuật toán mà tôi có thể nghĩ ra. Cuốn sách tuyệt vời
Charalambos Paschalides

8

Cấu trúc và diễn giải các chương trình máy tínhnghệ thuật lập trình máy tính là thứ gần nhất tôi từng thấy với những gì bạn tìm kiếm.

SICP đi qua các cấu trúc dữ liệu và thuật toán phổ biến. Mặc dù nó không phải là bách khoa toàn thư, nhưng nó khá tốt khi bao phủ một vùng lãnh thổ rộng lớn trong một không gian hạn chế.

Có thể nói gì về Nghệ thuật lập trình máy tính chưa có. Hãy cẩn thận khi bạn chọn nó, bạn có thể chuyển đến chủ đề cụ thể và hàng giờ sau đó nhận ra rằng bạn đã đọc một tập từ bìa này sang bìa khác. Đó là một cách tuyệt vời để thực sự đưa chương trình của bạn lên một tầm cao mới.


5
SICP là một cuốn sách tuyệt vời, nhưng tôi không nghĩ đó là một gợi ý hợp lý cho ai đó đang tìm kiếm "bách khoa toàn thư về thuật toán". SICP không cố gắng trở thành bất cứ thứ gì như thế. Hơn nữa, OP đã viết rằng ACP "dường như không phải là bách khoa toàn thư nhiều như hướng dẫn", vì vậy cần phải rõ ràng rằng SICP không phải là thứ mà anh ấy hoặc cô ấy đang tìm kiếm.
Caleb

Cuốn sách tuyệt vời, nhưng không phải bách khoa toàn thư.
haylem

Khá chắc chắn rằng tôi đã nói rằng nó không phải là bách khoa toàn thư nhưng cung cấp một chuyến đi tốt về các thuật toán. "Mặc dù nó không phải là bách khoa toàn thư, nhưng nó khá tốt khi bao phủ một vùng rộng lớn trong một không gian hạn chế." Yup đó là những gì tôi nói.
Michael Brown

8

Cormen, Leiserson, Rivest, Stein - "Giới thiệu về thuật toán"

Giới thiệu về Thuật toán, thường được gọi là CLRS, là sách giáo khoa thuật toán tiêu chuẩn tại một số lượng lớn các trường đại học. Nó bao gồm một loạt các thuật toán cho một loạt các ứng dụng, bao gồm sắp xếp, tìm kiếm, lý thuyết đồ thị và tính toán số cơ bản. Nó cũng bao gồm một cuộc thảo luận chi tiết về ký hiệu Big O, Big Omega và Big Theta. Một lời chỉ trích phổ biến là nó không thực sự chuẩn bị một để thiết kế các thuật toán mới, nhưng là một cuốn bách khoa toàn thư hoặc từ điển thuật toán, nó là quá đủ.

Tôi cũng nên lưu ý rằng CLRS cũng đưa ra lời khuyên về việc sử dụng thuật toán nào khi nào và không chỉ trình bày một chỉ mục chung về thuật toán và cấu trúc dữ liệu. Nó hữu ích khi bạn có một nhiệm vụ mà bạn muốn hoàn thành và muốn lời khuyên về cách tốt nhất để thực hiện nó. Có nhiều tài nguyên tốt hơn khi bạn biết bạn muốn làm những gì bạn đang làm và bạn chỉ cần mã giả.

- từ nhận xét của @quanticle, bên dưới


4
Bạn có thể mở rộng câu trả lời của mình để bao gồm những gì về cuốn sách này đáp ứng mục tiêu của câu hỏi này không?

2
Giới thiệu về Thuật toán , thường được gọi là CLRS, là sách giáo khoa thuật toán tiêu chuẩn tại một số lượng lớn các trường đại học. Nó bao gồm một loạt các thuật toán cho nhiều ứng dụng, bao gồm sắp xếp, tìm kiếm, lý thuyết đồ thị và tính toán số cơ bản. Nó cũng bao gồm một cuộc thảo luận chi tiết về ký hiệu Big O, Big Omega và Big Theta. Một lời chỉ trích phổ biến là nó không thực sự chuẩn bị một để thiết kế các thuật toán mới , nhưng là một cuốn bách khoa toàn thư hoặc từ điển thuật toán, nó là quá đủ.
tử

1
Tôi cũng nên lưu ý rằng CLRS cũng đưa ra lời khuyên về việc sử dụng thuật toán nào khi nào và không chỉ trình bày một chỉ mục chung về thuật toán và cấu trúc dữ liệu. Nó hữu ích khi bạn có một nhiệm vụ mà bạn muốn hoàn thành và muốn lời khuyên về cách tốt nhất để thực hiện nó. Có nhiều tài nguyên tốt hơn khi bạn biết bạn muốn làm những gì bạn đang làm và bạn chỉ cần mã giả.
tử

Gợi ý cho Dmitry: chỉ cần sao chép ý kiến ​​của @ quanticle vào phần thân của câu trả lời để làm cho câu trả lời của bạn tuyệt vời hơn 1000%.

5

Trong trường đại học Vật lý, tôi thực sự rất thích Công thức toán số trong C. Tất nhiên, nó không bao gồm tất cả các thuật toán, nhưng đưa ra những lời giải thích tuyệt vời về nhiều thứ vô cùng hữu ích trong các ngành khoa học:

http://www.nr.com/

Cuốn sách bao gồm cách giải quyết:

Các phương trình tuyến tính

  1. Các phương trình tuyến tính
  2. Nội suy và ngoại suy
  3. Tích hợp các chức năng
  4. Đánh giá chức năng
  5. Các chức năng đặc biệt bao gồm chức năng gamma, chức năng beta, giai thừa
  6. Các số ngẫu nhiên - bao gồm một lời giải thích tốt về ý nghĩa của điều này
  7. Thuật toán sắp xếp
  8. Tìm gốc và phương trình phi tuyến
  9. Tối thiểu hóa và tối đa hóa các chức năng
  10. Hệ sinh thái
  11. Biến đổi Fourier nhanh
  12. Phân tích quang phổ và FFT
  13. Mô tả thống kê dữ liệu
  14. Mô hình hóa dữ liệu
  15. Integratoin của phương trình vi phân thông thường
  16. Vấn đề ranh giới hai điểm
  17. Phương trình tích phân và lý thuyết biên nghịch đảo
  18. Phương trình vi phân từng phần
  19. Các thuật toán "khác" như kiểm tra CRC và nén dữ liệu

Vì vậy, tất cả đều rất toán học, tốt cho các nhà khoa học cũng như cho những người thiết kế động cơ vật lý cho các trò chơi. Và nó không chỉ đưa ra các thuật toán mà còn giải thích các vấn đề đằng sau chúng để bạn có thể sử dụng chúng một cách chính xác. Không phải văn bản mã hóa điển hình của bạn, nhưng chính xác những gì bạn cần khi bạn cần nó.

Tôi đã dựa vào nó rất nhiều khi sử dụng phương pháp đơn giản xuống dốc trong đa chiều (đi bộ amip) để phân tích dữ liệu. Vẫn có dấu bút chì của tôi trong đó. Ahh, thời gian tốt đẹp!


1
Bạn có thể mở rộng câu trả lời của mình để bao gồm những gì về cuốn sách này đáp ứng mục tiêu của câu hỏi này không?

4

Nếu bạn đang tìm kiếm một "bách khoa toàn thư về thuật toán", thật khó có thể sai với bách khoa toàn thư về thuật toán . Tôi không thể nói rằng tôi đã đọc nó (ở mức $ 399, nó rẻ cho một cuốn bách khoa toàn thư ), nhưng bản blurb có vẻ đầy hứa hẹn:

Bách khoa toàn thư về thuật toán cung cấp một bộ giải pháp toàn diện cho các vấn đề thuật toán quan trọng cho sinh viên và nhà nghiên cứu, bao gồm các giải pháp có tác động cao từ thập kỷ gần đây nhất.

Ai đó đã trích dẫn Sổ tay thiết kế thuật toán của Steven Skiena , nhưng tôi không nghĩ có ai đã đề cập đến trang web liên quan của Skiena, Kho lưu trữ thuật toán Stony Brook . Từ trang web:

Trang WWW này được dự định là một bộ sưu tập toàn diện các triển khai thuật toán cho hơn bảy mươi vấn đề cơ bản nhất trong các thuật toán tổ hợp.

Cuốn sách không chỉ là một danh mục các thuật toán đã biết; nó cũng là một loại hướng dẫn (theo nghĩa tốt nhất của từ này) về cách quyết định sử dụng thuật toán nào cho phù hợp nhất với vấn đề và tình huống của bạn. Các kho lưu trữ, mặt khác, là bách khoa toàn thư hơn. Nó không nhất thiết phải chứa nhiều chi tiết về cách tự thực hiện từng thuật toán, nhưng nó giải thích thuật toán đó làm gì và cách thức hoạt động nói chung, các thuật ngữ dễ đọc thường được lấy từ cuốn sách và nó cung cấp liên kết đến các triển khai thực tế cho từng thuật toán thuật toán.


2

Các Rosetta Mã Wiki là một bộ sưu tập lớn của việc triển khai các thuật toán phổ biến ở một số ngôn ngữ. Nó không hoàn toàn mang tính học thuật, nhưng khá nhiều thông tin và thú vị để lướt qua.

Nói cách riêng của họ:

Rosetta Code là một trang web chuyên về lập trình . Ý tưởng là đưa ra các giải pháp cho cùng một nhiệm vụ bằng nhiều ngôn ngữ khác nhau càng tốt, để chứng minh các ngôn ngữ giống nhau và khác nhau như thế nào, và giúp một người có cơ sở trong một cách tiếp cận vấn đề trong việc học một vấn đề khác.

Ưu điểm chính của nó so với các tài nguyên khác (như Từ điển thuật toán và cấu trúc dữ liệu của NIST ) là nó cho phép bạn xem xét một số triển khai cho các ngôn ngữ khác nhau. Điều này có thể hữu ích cho các mục đích khác nhau (so sánh tính biểu cảm, xác minh tính khả thi trong ngôn ngữ này hoặc ngôn ngữ khác, v.v ...).

Chẳng hạn, trang QuickSort cung cấp (kể từ 2013-10-07) ít nhất 89 lần triển khai.


bạn có phiền giải thích thêm về những gì nó làm không và tại sao bạn lại đề nghị nó như trả lời câu hỏi được hỏi? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

@gnat: Thường sẽ đồng ý, nhưng câu trả lời "chỉ dành cho sách" khác nhau như thế nào? Ngoài ra, tôi nghĩ rằng "tập hợp các triển khai các thuật toán phổ biến trong một số ngôn ngữ" bao gồm khá nhiều những gì nó làm. Nó cũng như (hoặc ít) chi tiết như câu trả lời được chấp nhận, nếu bạn nhìn đủ gần :)
haylem

@gnat: dù sao, thêm một số.
haylem

@AnnaLear: xin lỗi, tôi nghĩ rằng chỉnh sửa của bạn là hoàn toàn đúng khi giữ bài đăng của tôi ngắn và theo dõi, nhưng có vẻ phù hợp để đưa sự so sánh trở lại liên quan đến các thay đổi theo yêu cầu của gnat.
haylem

0

Mặc dù có những cuốn sách hướng dẫn tuyệt vời và vượt thời gian về chủ đề này, tôi hầu như không nghĩ rằng, bạn sẽ tìm thấy một cuốn bách khoa toàn thư như vậy.

  • Một cuốn bách khoa toàn thư về toán học bao gồm hàng thiên niên kỷ nghiên cứu. Mặt khác, các thuật toán hầu như không được nghiên cứu trong một thế kỷ (nói ở quy mô lớn hơn). Toàn bộ lĩnh vực khoa học máy tính hầu như không được ai hiểu và hầu hết mọi thứ vẫn đang chuyển động nhanh chóng. Nếu có một cuốn bách khoa toàn thư về điều này ngay bây giờ, tôi đoán bạn có thể ném 90% ra khỏi cửa sổ sau 10-20 năm nữa. Và trong số 10% giá trị giữ hơn một nửa đã được in cách đây nửa thế kỷ. Các phần lớn của cuốn sổ tay toán học sẽ được cập nhật trong một trăm năm nữa.

  • Toán học là thuần túy và khép kín. Điều này hầu như không áp dụng cho "lĩnh vực thuật toán". Nó thực sự khó có thể được coi là một trường, bởi vì một trường thường hoạt động trên một không gian vấn đề được xác định rõ, trong khi các thuật toán thực sự chỉ hoạt động trong một không gian giải pháp được xác định rõ hơn.
    Vì vậy, nếu người ta biên dịch một cuốn bách khoa toàn thư về các thuật toán, thì nó không thực sự rõ ràng bao gồm những gì, nếu bạn thực sự muốn nó được toàn diện. Lý thuyết đồ thị? Đại số tuyến tính? Phân tích số?

IMHO, ngay bây giờ tài nguyên tốt nhất đáp ứng vai trò của bách khoa toàn thư, là "internet" (kìa). Quan điểm của bách khoa toàn thư là có một kho kiến ​​thức được lập chỉ mục, toàn diện, có thể tìm kiếm (về một số chủ đề). Cá nhân, tôi thấy cả danh sách nàydanh sách này khá áp đảo. Cũng trong các câu trả lời khác, nhiều cơ sở dữ liệu thuật toán xuất sắc đã được liên kết.

Vì vậy, trong khi bạn không thể mong đợi mức chất lượng như bạn mong đợi từ một cuốn bách khoa toàn thư lấp đầy giá sách của bạn, thì bạn có được mức độ kịp thời cần thiết để bù đắp cho tuổi trẻ của lĩnh vực bạn muốn biết.


0

Theo như các nguồn còn lại, tôi nghĩ Wikipedia là thứ gần gũi nhất với những gì bạn đang tìm kiếm. Nói một cách dí dỏm, có thể hữu ích khi tạo một "mẫu thuật toán" được xác định rõ hơn trên Wikipedia cho mục đích này, nhưng đó là điều cần thảo luận với các biên tập viên Wikipedia chứ không phải ở đây.

Lưu ý nhanh về Nghệ thuật lập trình máy tính : khi hoàn thành, nó sẽ bao gồm một tập "tóm tắt" và mặc dù điều đó sẽ không giúp bạn bây giờ, nó có thể xấp xỉ những gì bạn đang tìm kiếm. TAOCP là bách khoa toàn thư cho những gì nó bao gồm, nhưng nó vẫn chưa hoàn thành và tính cách của Knuth là anh ta sẽ không bao gồm mọi thứ trừ khi anh ta nghiên cứu kỹ lưỡng chúng.

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.