Thiết kế thuật toán và độ phức tạp - Làm thế nào để suy nghĩ theo 'cách đó'?


15

Câu hỏi của tôi là một câu hỏi chung: Làm thế nào để tôi bắt đầu suy nghĩ về Thiết kế và Độ phức tạp của Thuật toán? Tôi sẽ tham gia một khóa học sau đại học về thiết kế thuật toán. Tôi đã đăng ký nó sớm hơn nhưng đã bỏ nó sau vì tôi không thể theo kịp nó. Tôi phải tham gia khóa học này như một yêu cầu.

Có một 'mẹo' để suy nghĩ theo cách này? Tôi biết điều này đang đặt nó khá thô sơ nhưng đôi khi một viễn cảnh mới mẻ giúp suy nghĩ về một chủ đề khác đi.

Vấn đề chính tôi gặp phải với khóa học này (và các khóa học lý thuyết tương tự) là: Làm thế nào để tôi biết rằng các giải pháp mà tôi đưa ra là chính xác? Tôi thấy phần lý thuyết là tùy ý, đặc biệt là khi 'chứng minh' một thuật toán nhất định hành xử hoặc hành xử theo một cách nhất định?

Khóa học của chúng tôi sẽ sử dụng văn bản tiêu chuẩn: Giới thiệu về thuật toán của CLRS.

Có bất kỳ sách giáo khoa / trang web / sách / vv. Điều đó có thể cung cấp một cách để trở nên tự tin trong lĩnh vực này?

Cảm ơn mọi người

Jason Dane


2
Tôi đề nghị hãy xem bài viết này . Tôi đặc biệt gợi ý cuốn sách của Udi Manber.
MS Dousti

1
Cuộc thảo luận này trên StackOverflow cung cấp một số đề xuất: stackoverflow.com/questions/2256721/
triệt

2
Tôi thứ hai khuyến nghị Manber. Ngoài ra, hãy xem Cách nghĩ về thuật toán của Jeff Edmonds: amazon.com/Think-
Giới thiệu-

"Làm thế nào để tôi biết rằng các giải pháp mà tôi đưa ra là chính xác?" Bạn có nghĩa là (1) bạn đã đưa ra một thuật toán nhưng không biết làm thế nào để chứng minh rằng nó đúng hay (2) bạn có một bằng chứng nhưng bạn không chắc liệu nó có đúng không?
Jukka Suomela

Bước một: ngừng đưa ra câu trả lời thẳng và thay vào đó hãy tham khảo các giải pháp của người khác. ;)
Raphael

Câu trả lời:


18

Tôi nghĩ các khóa học về thiết kế thuật toánđộ phức tạp tính toán luôn là thử thách đối với những sinh viên không quen thuộc với các môn học này bởi vì họ yêu cầu một số mức độ trưởng thành toán học và kỹ năng giải quyết vấn đề. Trong khóa học sau đại học đầu tiên của tôi về "độ phức tạp tính toán", một người bạn của tôi có bằng toán học thuần túy đã nói với tôi rằng anh ta đã ngạc nhiên như thế nào bởi vì mặc dù khóa học đó không đòi hỏi nhiều nền tảng toán học (ít nhất đó là những gì được kể trong đề cương khóa học), nó thực sự đòi hỏi gần như tất cả các kỹ năng anh ta có được thông qua tất cả các bằng cấp toán học thuần túy của mình!

Tôi thấy rằng tôi đã biết về "cách" nhất (khi tôi mới bắt đầu học cao học) bằng cách đọc và làm bài tập từ cuốn sách của Sipser . Hãy chắc chắn rằng bạn thực hiện các bài tập vì kỹ năng giải quyết vấn đề và sự trưởng thành toán học là những gì bạn muốn học và không chỉ là một loạt các sự kiện hoặc định nghĩa.

Tuy nhiên, cuốn sách của Sipser chỉ tốt cho những thứ phức tạp và đầy đủ NP, nó sẽ không đủ để thay thế cuốn sách CLRS. Vấn đề duy nhất với cuốn sách CLRS là lợi thế của nó về phạm vi bảo hiểm toàn diện có thể trở thành điểm yếu của nó vì cuốn sách có thể trông khá đáng sợ hoặc quá sức đối với học sinh. Vì vậy, lời khuyên của tôi là bạn thực sự nên đến thư viện và tìm kiếm các cuốn sách về thuật toán, quét qua từng cái một và chọn những cuốn phù hợp với mô hình suy nghĩ của bạn nhất. Và một lần nữa đừng quên tập thể dục!

Đối với các thuật toán, cá nhân tôi đề xuất các cuốn sách sau (bên cạnh những cuốn sách được đề xuất bởi Sadeq và JeffE):

  • Các thuật toán cuốn sách rất dễ đọc và đẹp của S. Dasgupta, CH Papadimitriou, và UV Vazirani.
  • Kẻ giết người ghi chú (hoặc bản thảo sách) của Jeff Erickson. (Vì JeffE quá khiêm tốn để đề xuất ghi chú của riêng mình, tôi phải tự làm điều đó.)

Nói chung, bất cứ khi nào bạn nghiên cứu một thuật toán hoặc cấu trúc dữ liệu nhất định, nếu bằng cách nào đó, phần trình bày trong sách giáo khoa của bạn không đủ rõ ràng cho bạn, thì cách tốt nhất là tìm kiếm trên google để ghi chú bài giảng về chủ đề cụ thể đó. Trong các trường hợp có thể, những lời giải thích khác nhau về cùng một thứ cuối cùng sẽ cho bạn bức tranh hoàn chỉnh. Ít nhất, đó là cách nó hoạt động với tôi.


8
+1 cho ghi chú sát thủ của Jeff. Tôi luôn thích đọc chúng. Thư pháp Ả Rập của thuật toán từ rất đẹp.
Mohammad Al-Turkistany
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.