Làm thế nào để tìm hiểu tốt nhất về thuật toán theo chiều sâu


8

Tôi đã đọc trang web này với rất nhiều sự quan tâm, nhưng tôi thấy rất nhiều trong số đó đi qua đầu tôi. Điều này đã khiến tôi muốn tìm hiểu nhiều hơn về các thuật toán và CS nói chung. Theo như tôi có thể nói từ nghiên cứu của mình, có 2 cách chính để làm điều này.

  1. Tôi có thể bằng một cuốn sách dày dày đẹp đẽ và tìm cách vượt qua nó một cách chậm rãi nhưng chắc chắn.

  2. Tôi có thể "học bằng cách làm" và bằng một cuốn sách hay, nhưng thay vì đọc nó để che, hãy chuyển đến những phần mà tôi quan tâm và thực hiện và áp dụng các thuật toán tôi thích.

  3. ?

Câu hỏi của tôi là, bạn đã sử dụng phương pháp nào ở trên và bạn có đề xuất cách tiếp cận tương tự với người khác không?


1
Bạn có thể tìm thấy câu trả lời của tôi trên cstheory hữu ích.
Đại

Câu trả lời:


15

Tôi đã học về các thuật toán trong một khóa học đại học nhiều năm trước. Nhưng nếu bạn định làm một thuật toán bằng một cuốn sách, thì bạn cần một cuốn sách hay. Hai cuốn sách nổi bật với tôi là cách để đi vào thuật toán:

  • Hướng dẫn thiết kế thuật toán của Steven S. Skiena
  • Giới thiệu về thuật toán của T Cormen, C Leiserson, R Rivest và C Stein

Đầu tiên có lẽ là nhiều hơn một hướng dẫn thực hành, trong khi sau đó giống như kinh thánh, nhưng với bằng chứng.

Chiến lược bạn có thể làm theo sẽ bao gồm đọc, làm các bài tập lý thuyết và sau đó thực hiện càng nhiều càng tốt, tập trung vào các thuật toán / vấn đề bạn thấy thú vị hoặc thách thức hoặc cả hai. Vì vậy, hãy cố gắng bao gồm tất cả các khía cạnh của thuật toán, không chỉ thực hiện chúng. Điều này sẽ bao gồm nghiên cứu sự phức tạp về thời gian và không gian của họ và chứng minh tính đúng đắn của họ. Việc nghiên cứu các thuật toán không chỉ đơn thuần là thực hiện các thuật toán.

Sau khi bạn đã có đủ kinh nghiệm, hãy bắt đầu chuyên môn. Ví dụ, nếu bạn bắt đầu quan tâm đến Hình học tính toán hoặc các thuật toán không chặn, thì hãy bắt đầu khám phá sách và tài liệu nghiên cứu trong lĩnh vực này.

Chuyên môn hóa là tốt, nhưng cũng tốt khi lấy mẫu các kỹ thuật từ các lĩnh vực khác, vì vậy đọc rộng về các thuật toán (và thực hiện các thuật toán như vậy) là một cách tốt để duy trì một bộ kỹ năng rộng.

EDIT: Sau khi trải qua các thuật toán giới thiệu, bạn có thể tham khảo các cuốn sách như Thuật toán ngẫu nhiên của Motwani & Raghavan hoặc Thuật toán xấp xỉ của Vazirani . Những cuốn sách này là một cuộc khảo sát (và ở một mức độ nào đó, một bài tập học tập tốt về kỹ thuật toán học) trong các kỹ thuật thiết kế thuật toán tiên tiến hơn. Họ cũng mở rộng cái nhìn sâu sắc của bạn về nhiều lĩnh vực khác trong CS như Đồ thị và Mạng, Thiết kế cấu trúc dữ liệu và Tối ưu hóa.


Bắt đầu đọc một bản sao của Hướng dẫn thiết kế thuật toán trực tuyến và tôi thích nó cho đến nay! Cảm ơn!
Daniel Gratzer

3
Tôi sẽ viết lại một câu một chút: Việc nghiên cứu các thuật toán chỉtình cờ về việc thực hiện các thuật toán.
JeffE

13

Dạy một lớp thuật toán.

Hoặc có lẽ tốt hơn nữa:

viết sách giáo khoa thuật toán.


3
+1. Tôi đã coi đây là một trò đùa ban đầu, nhưng đã xem xét lại và nhận ra rằng không có gì để bạn hiểu sâu sắc điều gì đó như khi bạn buộc phải giúp người khác học các khái niệm tương tự. Tất nhiên, điều này bao gồm, đối với một giáo sư, cả hai lớp giảng dạy, chuẩn bị bài giảng, ghi chú và tất nhiên, viết sách giáo khoa ;-) Hai xu của tôi: chuẩn bị bài tập cũng giúp ích khá nhiều. Đối với một sinh viên, tôi đồng ý với chiến lược được đề xuất bởi @Dave Clarke.
Massimo Cafaro

Không, @vzn, câu trả lời này là hoàn toàn nghiêm túc.
JeffE

ah cũng sợ điều đó - sau đó một câu trả lời thích hợp / thích nghi với bất kỳ ai không phải là giáo viên hoặc giáo sư (vốn là một tập hợp rất hẹp của dân số) có thể là "dạy thuật toán cho bạn của bạn" hoặc "viết mô tả về thuật toán từ bộ nhớ và có ai đó cố gắng đọc và làm theo nó "
vzn

5
Đừng quá cứng nhắc. Tại sao bạn phải được trả tiền để dạy (hoặc viết) để dạy (hoặc viết)? Dạy cho các đồng nghiệp của bạn. Dạy trẻ em của bạn. Tình nguyện tại một trường trung học địa phương hoặc cao đẳng cộng đồng. Tạo video YouTube vào những ngày nghỉ của bạn. Bắt đầu một thuật toán Pechakucha Night.
JeffE

chạm vào. đoán rằng nó hoạt động nếu "sách giáo khoa" cũng được coi là "viết trong một cuốn sổ tay ràng buộc xoắn ốc, chưa được xuất bản"
vzn

2

Hãy thử giải quyết các vấn đề dựa trên thuật toán ngay khi bạn đọc. Hơn nữa, để hiểu các thuật toán và triển khai chúng tốt hơn, bạn cần hiểu rõ hơn về cấu trúc dữ liệu. Có một cuốn sách rất hay về cấu trúc dữ liệu được viết bởi Sahni. Bạn có thể sử dụng điều đó và cho các thuật toán, bạn có thể giải quyết các vấn đề về sách thách thức lập trình. Câu hỏi khá hay đấy.


1

Nếu bạn chưa học về thuật toán tại trường đại học, tôi khuyên bạn nên tham gia một trong các lớp học trực tuyến, bạn có thể xem xét đăng ký một trong các khóa học tại coursera.org hoặc theo các video được đăng bởi Đại học Stanford.


Udacity cũng cung cấp một khóa học tại udacity.com/overview/C thuyết / cs215 .
jonsca
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.