Lý thuyết CS và Toán - khuyến nghị tự học


14

Tôi là một sinh viên không CS và lĩnh vực nghiên cứu của tôi không liên quan đến CS. Tuy nhiên, là một phần trong kế hoạch lớn hơn để trở thành một nhà khoa học máy tính, tôi muốn có được một nền tảng vững chắc về khoa học máy tính và toán học vì nó liên quan đến CS. Tôi đã thực hiện rất nhiều nghiên cứu và chọn ra những cuốn sách hay nhất / thực sự hay sau đây về chủ đề CS và toán học và muốn hỏi ý kiến ​​của bạn về:

  • Tính đầy đủ của các chủ đề được đề cập (vui lòng giới thiệu bất cứ điều gì tôi đã bỏ lỡ)
  • Chồng chéo vật liệu được che phủ / vùng quá mức (vui lòng giới thiệu những cuốn sách nên được xóa khỏi danh sách)
  • Đặt hàng để nghiên cứu các cuốn sách (tôi liệt kê theo thứ tự mà tôi nghĩ rằng chúng nên được nghiên cứu)

Danh sách cảm thấy quá dài, vì vậy tôi sẽ đánh giá cao các đề xuất để xóa một số sách mà không mất kiến ​​thức cốt lõi cần có cho CS.

Vì vậy, những cuốn sách là:

  1. Nhà toán học Delight của WW Sawyer
  2. Cách chứng minh: Cách tiếp cận có cấu trúc của Daniel J. Velleman
  3. Làm thế nào để giải quyết nó: Một khía cạnh mới của phương pháp toán học của G. Polya
  4. Giới thiệu về lập trình chức năng thông qua tính toán Lambda của Greg Michaelson
  5. Nền tảng của Khoa học Máy tính của Al Aho và Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
  6. Toán học cụ thể: Một nền tảng cho khoa học máy tính của Graham, Knuth và Patashnik
  7. Giới thiệu về Lý thuyết tính toán của Michael Sipser
  8. Giới thiệu về Lý thuyết, Ngôn ngữ và Tính toán của Automata bởi John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. Độ phức tạp tính toán: Một quan điểm khái niệm của Oded Goldreich
  10. Độ phức tạp tính toán: Cách tiếp cận hiện đại của Sanjeev Arora, Boaz Barak
  11. Một khóa học về kết hợp của JH van Lint, RM Wilson
  12. Khả năng tính toán: Giới thiệu về Lý thuyết chức năng đệ quy của Nigel Cutland
  13. Máy tính và tính hấp dẫn: Hướng dẫn về lý thuyết hoàn thiện NP của MR Garey, DS Johnson
  14. Lý thuyết về các hàm đệ quy và khả năng tính toán hiệu quả của Hartley Rogers
  15. Bất bình đẳng của GH Hardy, JE Littlewood, G. Polya
  16. Logic toán học: Một khóa học với các bài tập (Phần I): Tính toán đề xuất, Đại số Bookean, Tính toán dự đoán của René Cori, Daniel Lreb
  17. Logic toán học: Một khóa học với các bài tập (Phần II): Lý thuyết đệ quy, Định lý của Godel, Lý thuyết tập hợp, Lý thuyết mẫu của René Cori, Daniel Lreb

Vui lòng tham khảo câu hỏi này cstheory.stackexchange.com/questions/3253/NH
Bartosz Przybylski

Bắt đầu với một cuốn sách Thuật toán đã biết nếu bạn chưa có kinh nghiệm trong chủ đề này.
AJed

@Bartek: Cảm ơn bạn, nhưng đây là một trong những câu hỏi tôi đã xem trước đây để biên soạn danh sách ở vị trí đầu tiên. Câu hỏi của tôi là nhiều hơn về cách thực tế đọc tất cả các tài liệu tuyệt vời ngoài kia. Thời gian luôn là một hạn chế, vì vậy tôi muốn biết những cuốn sách nào tôi nên "không" đọc để tránh sự lặp lại, v.v.
CSLover

@AJed: Bạn có đề xuất bắt đầu với cuốn sách số 5 trong danh sách thay vì một số sách toán học # 1-4 không? Tôi tin rằng # 5 cung cấp một giới thiệu nhẹ nhàng cho các thuật toán và cấu trúc dữ liệu.
CSLover

Quá nhiều ở đây. Tôi chỉ cần chọn một và đi, sau đó lo lắng về những gì tiếp theo khi bạn đến đó. Tôi có thể đề nghị Sipser bắt đầu cho một người mới bắt đầu muốn có một nền tảng vững chắc trong nền tảng của CS.
usul

Câu trả lời:


10

Danh sách của bạn là vô cùng có vấn đề.

Để bắt đầu, tôi sẽ bỏ qua các cuốn sách 6,11,12,14,15,16,17: Sách 6, 11 và 15 là toán học nói chung không thực sự cần thiết trừ khi bạn trở thành nhà nghiên cứu lý thuyết . Sách 12 và 14 bao gồm lý thuyết đệ quy không phải là khoa học máy tính (mặc dù nó liên quan đến khả năng tính toán!). Sách 16 và 17 bao gồm các chủ đề nâng cao về logic, trong khi bạn chỉ cần biết logic rất cơ bản.

Trong số 1,2,3 cuốn sách, tôi sẽ chọn chỉ một cuốn để giới thiệu chung về toán học và chứng minh.

Sách 5,7,8,9,10,13 bao gồm một số môn học: lý thuyết tự động, thuật toán và lý thuyết phức tạp. Hãy để tôi đề nghị bạn theo dõi Sipser (Quyển 7) về lý thuyết tự động và lý thuyết phức tạp và Giới thiệu về thuật toán của Cormen, Leiserson, Rivest và Stein ("CLRS") cho các thuật toán.

Cuốn 4 đề với lập trình chức năng. Mặc dù giáo dục khoa học máy tính của tôi chưa bao giờ bao gồm bất kỳ khóa học nào về chủ đề này, nhưng thật công bằng khi nói rằng nhiều nhà nghiên cứu về khoa học máy tính lý thuyết coi lập trình chức năng là một phần của nền tảng thiết yếu.

Tóm tắt: những gì bạn còn lại là

  • Một trong những cuốn sách 1-3 (hoặc bất kỳ văn bản "giới thiệu về bằng chứng" nào có thể so sánh được)
  • CLRS
  • Quyển 4 (lập trình chức năng)
  • Quyển 7 (lý thuyết automata và lý thuyết phức tạp)

Cảm ơn bạn rất nhiều vì một phản ứng kỹ lưỡng như vậy. Tôi biết danh sách này là quá mức, nhưng đọc tất cả các loại khuyến nghị sách cho các nhà khoa học máy tính, bạn kết thúc với một danh sách dài. Đề nghị của bạn là rất thực tế, và đó là những gì tôi đang theo đuổi. Cảm ơn bạn rất nhiều!!
CSLover

1
Tôi không đồng ý với lời khuyên rằng "toán học là không cần thiết". Chọn bất kỳ khía cạnh nào của khoa học máy tính và tôi sẽ chỉ cho bạn cách toán học cần thiết. Bạn càng học nhiều toán, bạn càng giỏi. Mặt khác, gần như không thể tự học toán thực sự mà không đi học. Vì vậy, có lẽ bạn nên tập trung vào khoa học máy tính, điều đó dễ học hơn.
Andrej Bauer

5

Bạn cũng có thể xem xét tận dụng một số trong nhiều khóa học trực tuyến có sẵn. Ví dụ, cả StanfordMIT đều cung cấp các khóa học trực tuyến (miễn phí) về khoa học máy tính và tôi nghĩ cũng có nhiều khóa học khác.

Theo như sách, tôi đứng thứ hai trong số các khuyến nghị của Yuval, ngoại trừ CLRS là một tài liệu tham khảo tuyệt vời, nhưng hơi quá sức khi là một cuốn sách giới thiệu chỉ cần ngồi xuống và đọc qua. Đối với lần đầu tiên vượt qua ở phần thuật toán, tôi có thể đề xuất Thuật toán của Dasgupta et al. . Liên kết trước là bản in trực tuyến miễn phí, nhưng cũng khá rẻ để mua ở bìa mềm.


Đồng ý. Tôi đánh giá cao phản ứng của bạn. Cảm ơn rât nhiều.
CSLover

2

Các tài liệu tham khảo mà bạn đang đề xuất sẽ làm cho một nhà khoa học máy tính "rất" lý thuyết. nhưng tôi thực sự không tìm thấy bất kỳ lợi ích nào khi đọc tất cả những cuốn sách này nếu bạn đến từ một mức độ không phải là CS. Tất nhiên điều này phụ thuộc vào những gì bạn cần.

Tôi thấy một số cuốn sách như Sách 14, 15, 16, 17 không dành cho các nhà khoa học máy tính. Quyển 3 là dài dòng. Nó chỉ là chung cho bất kỳ sinh viên. Do đó tôi cho rằng quyển 1 và 2 giống nhau.

Đối với tôi - ở trong hoàn cảnh giống như ban đầu của bạn không phải là một nhà khoa học máy tính (mà thay vào đó là một kỹ sư điện / máy tính) - tôi đề xuất hai hướng ban đầu:

  • Thiết kế và phân tích thuật toán, (nhiều người đề xuất Giới thiệu về thuật toán CLRS . Đây là một tài liệu tham khảo tuyệt vời, nhưng tôi thực sự không phải là một fan hâm mộ của nó và ban đầu, nó khó hơn để hiểu nó và đôi khi rất dài dòng. theo dõi mục lục của nó và từ đó bạn kiểm tra các khóa học trực tuyến để tham khảo rõ ràng hơn).

--- đảm bảo thành thạo một ngôn ngữ lập trình để THỰC HIỆN các thuật toán và cấu trúc dữ liệu mà bạn học - do đó, tôi đề xuất loạt Thuật toán, của Sedgewick (tuyệt vời!)

--- THÊM: Tôi cũng đề xuất cuốn sách này: Thuật toán kết hợp: Tạo, liệt kê và tìm kiếm của D. Kreher. Đây là một cuốn sách rất hay. Sẽ cung cấp cho bạn một định kiến ​​khác nhau cho nhiều vấn đề trong thuật toán.

  • tổ hợp (đặc biệt là lý thuyết đồ thị), A Course in Combinatorics của JH van Lint, RM Wilson , là tốt. Có nhiều tài liệu tham khảo khác. Thông thường bất kỳ cuốn sách tổ hợp nổi tiếng nào cũng đủ - mọi thứ khác bạn nhận được từ các tài liệu tham khảo bổ sung từ internet. Cá nhân tôi thích: tổ hợp peter j cameron, và Lý thuyết đồ thị Bondy và Murty.

  • đặt cược xác suất (luôn luôn cần thiết). Điều đáng chú ý là nhiều lĩnh vực trong khoa học không sử dụng xác suất. Nhưng tin tôi đi, tất cả những gì bạn phải biết là những điều cơ bản.

Sau đó: Nhiều nhà nghiên cứu tự gọi mình là nhà khoa học máy tính lý thuyết tập trung rất nhiều vào lý thuyết tính toán (automota và những người khác). Có một số cuốn sách hay cho việc này (Xem bài của Yuvul Filmus),

Aho và Ullman là tốt (thực ra tất cả các cuốn sách của Ullman đều tốt). Làm cho bạn thoải mái với thiết kế trình biên dịch (xem http://infolab.stanford.edu/~ullman/ullman-books.html ).

Sau đó: tất cả phụ thuộc vào những gì bạn muốn làm. Các hướng khác nhau bạn có thể thực hiện: 1) cơ sở dữ liệu, 2) nhận dạng mẫu và khai thác dữ liệu, 3) thuật toán phân tán, 4) nền tảng của ngôn ngữ lập trình, 4) thuật toán ngẫu nhiên và nhiều thuật toán khác. [mỗi bài yêu cầu một bài khác] nhưng hãy cố gắng có một ý tưởng về tất cả!

* Ý tưởng chung: nếu bạn chưa quen với CS, thì hãy làm cho mình thoải mái với càng nhiều tên miền phụ CS càng tốt. Giới hạn bản thân trong "lý thuyết" sẽ khiến bạn mất nhiều sáng tạo của CS! * (ý kiến ​​của tôi)


Đối với tôi lập trình chức năng. Đừng sử dụng một cuốn sách kế thừa như cuốn sách bạn đã trích dẫn. Ngôn ngữ chức năng được yêu cầu hiện nay trong ngành công nghiệp. Có tồn tại một số hướng dẫn trên Internet về các ngôn ngữ như Scheme, Haskel và Erlang. Không nhận được rất lý thuyết, đây là lời khuyên của tôi.
AJed

Tất cả các ý kiến ​​tốt. Mục tiêu của tôi là thiết kế một chương trình tự học hoàn chỉnh và câu hỏi này chỉ liên quan đến một phần của chương trình, mà tôi nghĩ là khó khăn nhất để tổ chức. Các lĩnh vực khác bao gồm: Cấu trúc dữ liệu & thuật toán, Kiến trúc máy tính, Hệ điều hành, Mạng, Bảo mật & Mật mã, Song song, Phương thức chính thức, Trí tuệ nhân tạo, Đồ họa & Mô phỏng, Cơ sở dữ liệu, Ngôn ngữ lập trình, Trình biên dịch, công nghệ phần mềm và cuối cùng là triết lý & quản trị Unix. Hầu hết những điều này tôi nghĩ là khá cơ bản đối với CS, nhưng sẽ đảm bảo một câu hỏi riêng
CSLover

Thủ thuật tốt nhất của bạn là một nền tảng vững chắc trong thiết kế và phân tích thuật toán. - mỗi lĩnh vực khác là một lĩnh vực phụ của thiết kế và phân tích thuật toán.
AJed

Bạn có tử tế và làm rõ cuốn sách thuật toán Sedgewick nào mà bạn đề xuất không? Anh ta có một cái gọi là "Thuật toán" nhưng nó không phải là một bộ. Ông cũng có "Thuật toán trong C ++" (hoặc các ngôn ngữ khác) là 2 cuốn sách tôi tin với tổng cộng 5 phần.
CSLover

Cái tôi dùng là những cái C ++. Tôi đã sử dụng chúng như tài liệu tham khảo, mặc dù. Đây là trang web của anh ấy cs.princeton.edu/~rs
AJed
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.