2009-08-14 19 views
36

Tôi có một ý tưởng hay về Big-O là gì, và tôi cũng biết một vài thuật toán phân loại cơ bản, mặc dù, vì một lý do nào đó, tôi không bao giờ cảm thấy thoải mái với chúng, và tôi quên chúng. Tôi đã lập trình được 4 năm trong Java, Python, C và C++; Tôi đã là một lập trình viên phong nha. Bây giờ, tôi muốn vượt ra ngoài việc học các ngôn ngữ lập trình và bắt đầu các thuật toán học tập.Sách hướng dẫn thiết kế thuật toán có phải là một cuốn sách hay cho người mới bắt đầu trong thuật toán không?

Tôi đã thử 'Giới thiệu về thuật toán' của Carmen et al. nhưng Toán quá dày đặc đối với tôi (hoặc, có thể, tôi quá dày đặc đối với Toán trong cuốn sách đó).

Bây giờ, tôi đang lên kế hoạch lấy Sổ tay Thiết kế Thuật toán của Steve Skiena. Bạn có giới thiệu nó cho tình huống của tôi không? Bạn có đề xuất nào khác không nếu bạn cho rằng đây không phải là khuyến nghị cho tôi?

Cảm ơn bạn đã dành thời gian!

+0

Rất giống với câu hỏi này: http://stackoverflow.com/questions/1249465/data-structures-and-algorithms-e-books/1249676#1249676 –

+5

+1 "hoặc tôi quá dày đặc cho Toán học" : D – batman

Trả lời

39

Tôi chắc chắn sẽ giới thiệu cuốn sách Skiena. Bạn đã bắt đầu tìm hiểu về các thuật toán, bạn cũng nên bắt đầu học các thuật toán.

Để bất cứ ai thay đổi nội dung câu trả lời này và thay thế sự xuất hiện cuối cùng của từ thuật toán với từ toán: Tôi có nghĩa thuật toán khi tôi đã viết câu trả lời này, tôi vẫn có nghĩa thuật toán, thay thế cho chữ với toán học thay đổi vật chất câu trả lời. Nếu bạn nghĩ rằng toán học là những gì OP nên tìm hiểu, đăng câu trả lời của riêng bạn để có hiệu lực đó. Nếu bạn gặp khó khăn khi đọc bình luận bên dưới, bạn sẽ hiểu tại sao tôi đã chọn thuật toán từ và không phải là toán học.

+11

"Bạn đã bắt đầu tìm hiểu về các thuật toán, bạn cũng nên bắt đầu học các thuật toán." - Có phải là tôi hay điều này không có ý nghĩa gì nhiều sao ?! –

+15

Điều đó có ý nghĩa đối với tôi. Đó là một cách khác để nói, "Thay vì nói về thuật toán, hãy bắt đầu học nó." – Srikanth

+21

Tìm hiểu về thuật toán có nghĩa là học các công cụ như phức tạp, lặp lại, đệ quy, chia và chinh phục, chi nhánh và ràng buộc, v.v. Thuật toán học có nghĩa là biết thuật toán nhanh, bong bóng, Dijsktra, thuật toán Kruskal, v.v. –

-1

Dưới đây là một vài khuyến nghị:

  • Aho & Ulman - "Các thuật toán và dữ liệu Cấu trúc"
  • Vhirt
  • Donald E. Knuth - "The Art of Computer Programming"
0

Nếu bạn muốn phương pháp tiếp cận trái đất với một chút toán được ném vào thử Algorithms in a Nutshell - Tôi cho một thực tế được hưởng đọc nó nhiều hơn tôi có thể nói để làm chủ knuth. (Ok có một vài trang trong knuth đã khai sáng đủ để được gọi là vui vẻ.)

1

Nếu bạn có đủ khả năng (hoặc chủ lao động của bạn trả tiền) và bạn lập trình bằng Java, tôi khuyên bạn nên: Data Structures and Algorithms in Java. Nó bao gồm các chủ đề tương tự bạn tìm thấy trong các cuốn sách khác, nhưng nó làm cho nó dễ dàng để áp dụng một hiểu nếu bạn sử dụng để lập trình trong Java. Ví dụ, các sách cấu trúc dữ liệu C++ thường không dành nhiều thời gian cho các băm, vì các cấu trúc dựa trên các băm không phổ biến trong lập trình C++. Tuy nhiên, trong Java, các hash rất phổ biến và mọi đối tượng đều có một phương thức hashCode. Cuốn sách kết hợp một kết hợp tốt về lý thuyết và thực hành.

alt text http://ecx.images-amazon.com/images/I/51w6USIIpxL._SL160_.jpg

13

tôi muốn giới thiệu với "Thuật toán thiết kế bằng tay" cho mục đích của bạn và cho lướt Cormen hoặc Wikipedia để thay thế.

Sau khi giới thiệu ngắn gọn về các chủ đề thuật toán cơ bản, các trang 171-437 không thực sự dạy bạn về cách các thuật toán hoạt động cũng như cách thiết kế chúng, nhưng nhiều hơn về các thuật toán tồn tại và nơi để thực hiện các thuật toán của chúng. bạn để triển khai, bạn sẽ cần mua, như trong phần Lập trình tuyến tính)

Ví dụ: có 3 trang về phép nhân, cung cấp một vài ví dụ về những gì hữu ích cho, trình bày O ngây thơ (N ) 3) thuật toán, và đề cập đến có các thuật toán tốt hơn như Strassen's O (N 2.81) (không mô tả thuật toán), và khuyên bạn nên sử dụng thư viện LAPACK cho nó. Vì vậy, nếu bạn muốn tìm hiểu cách các thuật toán hoạt động, thay vì các thuật toán tồn tại và nơi để tìm các triển khai của chúng, một lần nữa, tôi khuyên bạn nên sử dụng "Hướng dẫn thiết kế thuật toán".

+6

Bạn không thể "lướt qua" Cormen. – talonx

2

Tôi đã mua Hướng dẫn thiết kế thuật toán gần đây và chỉ đi qua một vài chương đầu tiên. Đó là một cuốn sách tuyệt vời nhưng theo ý kiến ​​của tôi (từ những gì tôi đã đọc cho đến nay):

(1) nó không ít dày đặc hơn của Cormen.

(2) nó là nhiều hơn về thực hiện các thuật toán thực tế hơn so với thuật toán học tập.

+3

Nó ít dày đặc hơn nhiều so với Cormen. – batman

Các vấn đề liên quan