2010-10-13 46 views
11

Tôi đã được yêu cầu giới thiệu một tài nguyên (trực tuyến, sách hoặc hướng dẫn) để tìm hiểu Thuật toán (theo nghĩa của Giới thiệu về thuật toán của MIT) cho không Chuyên ngành CS hoặc Toán. Rõ ràng là cuốn sách MIT là quá tham gia và một số các phương pháp điều trị nhẹ hơn (như thuật toán của OReilly trong một Nutshell) vẫn có vẻ như nếu bạn sẽ cần phải có một số nền trong phân tích thuật toán. Có tài nguyên nào trình bày tài liệu theo cách mà các nhà phát triển không có nền tảng trong khoa học máy tính lý thuyết sẽ thấy hữu ích không?Tài nguyên học tập Thuật toán cho các cấp độ phi CS/Toán

Trả lời

6

Tôi nghĩ cách tốt nhất để tìm hiểu thuật toán là thông qua các trang web cạnh tranh khác nhau.

  • USACO - Sở thích cá nhân của tôi, vì nó cung cấp cho một con đường rõ ràng thông qua các tài liệu
  • TopCoder - đã đề cập
  • Sphere Online Judge - tuyệt vời nếu bạn muốn làm việc trong một ngôn ngữ khác hơn so với C/C++/Java

Theo như sách, phần giới thiệu đơn nhất tốt nhất tôi đã xem cho chuyên gia không phải là toán học là Data Structures and Algorithms. Nó sẽ đưa bạn qua một dòng thuật toán theo từng dòng và cho bạn thấy nó phân tích như thế nào về mặt toán học, một phần phân tích tuyệt vời khác của CLRS thì ít rõ ràng hơn.

Skiena Algorithm Design Manual cũng tuyệt vời, như là Programming Challenges của anh ấy, về cơ bản là hướng dẫn thông qua Thẩm phán trực tuyến Valladolid.

Thành thật mà nói, tôi nghĩ điều hữu ích nhất mà người mới bắt đầu có thể làm là triển khai các thuật toán khác nhau - sắp xếp hợp nhất, nói, tiếp theo là Quicksort - và thời gian chúng chống lại các đầu vào có kích thước khác nhau. Tạo bảng tính có biểu đồ thể hiện sự tăng trưởng của chúng theo thời gian. Rất ít người không phải chuyên gia sẽ có sự kiên nhẫn hoặc bí quyết để thiết lập một mối quan hệ lặp lại và giải quyết theo cách của họ thông qua nó. Nhưng bạn phải hiểu được hiệu quả của, nói O^^ tăng trưởng theo thời gian, và không có cách nào tốt hơn để tìm hiểu điều này hơn là xem chương trình của riêng bạn thổi qua ngăn xếp bộ nhớ của nó. :)

Tôi nói đây là một lập trình viên phi CS, không phải là người đã dành một vài tháng tốt để suy nghĩ về phân tích thuật toán.

+0

không có sự cạnh tranh ở đây, chỉ có đồng nghiệp – none

+2

@ không ai - tôi gọi chúng là "các trang web cạnh tranh" bởi vì chúng được thiết lập đặc biệt để cho phép mọi người tập luyện cho các cuộc thi thuật toán khác nhau. Họ là những công cụ học tập xuất sắc. – rtperson

0

Tôi không chắc cuốn sách MIT nào bạn đang đề cập đến, nhưng văn bản chuẩn là CLRS. Tôi không nghĩ rằng nó thực sự giả định bất kỳ nền tảng nào ngoài toán học trung học.

Cá nhân, tôi nhận thấy đang thực hiện TopCoder cuộc thi thuật toán trong vài năm qua là cách tốt nhất để tôi học các thuật toán phổ biến và đưa chúng vào thực tế. Có lẽ bạn nên thử như vậy. Dù bạn làm gì, tôi khuyên bạn nên dành nhiều thời gian thực hành hơn cho bàn phím để thực hiện những điều bạn học được so với thời gian đầu đọc sách, vì đó là cách để thực sự hóa các kỹ thuật khác nhau.

+1

vâng tôi đang nói về CLRS. Bạn đang ở ngay trong đó nó là một văn bản giới thiệu, tuy nhiên, kích thước và cách học tập của nó bằng văn bản sẽ được đáng sợ đến nhiều .... – ennuikiller

+3

@ennuikiller - CLRS ít đáng sợ hơn khi bạn đã thử Knuth trước. Tôi biết rằng qua trải nghiệm đau đớn ... – rtperson

1

Tôi muốn đi theo số Algorithm Design Manual, bởi Steven Skiena. Nó rất dễ đọc và bắt đầu với những điều cơ bản một cách dễ hiểu. Ví dụ, nó giải thích ký hiệu big-O rất tốt. Sự nhấn mạnh là trên ứng dụng thực tế, đó là một tiền thưởng lớn cho người mới bắt đầu đến từ một lĩnh vực phi lý thuyết.

Phần thứ hai của cuốn sách là tài liệu tham khảo về các vấn đề thuật toán phổ biến và cách tiếp cận thực tế cho giải pháp của họ. Tôi tìm thấy nó vô giá như một trợ giúp học tập, và bây giờ là một tài liệu tham khảo.

+0

Cảm ơn bạn đã giới thiệu! – ennuikiller

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