it-swarm-vi.com

Tôi là một sinh viên CS, và thành thật mà nói, tôi không hiểu sách của Knuth

Tôi tình cờ nhận được câu nói này của Bill Gates: "Bạn chắc chắn nên gửi cho tôi một bản lý lịch nếu bạn có thể đọc toàn bộ." Anh ấy đang nói về Nghệ thuật lập trình sách. Vì vậy, tôi đã khá tò mò và muốn đọc tất cả. Nhưng thành thật mà nói, tôi không hiểu điều đó.

Tôi thực sự không trí tuệ. Vì vậy, đây sẽ là lý do tại sao tôi không thể hiểu nó, nhưng tôi rất muốn học. Tôi hiện đang đọc Tập 1 về các thuật toán cơ bản. Có cuốn sách nào thân thiện với người mới/người chậm như tôi, điều này sẽ giúp xây dựng kiến ​​thức của tôi để tôi có thể đọc sách của Knuth một cách dễ dàng trong tương lai không?

52
Rho

Ngay cả tôi cũng nghĩ cuốn sách của Knuth hơi tiên tiến và khó hiểu. Những cuốn sách này chắc chắn là dành cho các nhà thuật toán cấp độ nghiên cứu IMHO.

Vậy có cuốn sách nào thân thiện với người mới/người chậm như tôi không?

Giới thiệu về Thuật toán bằng CLRS đơn giản hơn nhiều.

[~ # ~] chỉnh sửa [~ # ~] :

Tuy nhiên, nếu bạn muốn để đọc cuốn sách của Knuth, trước tiên bạn nên trải qua Toán học cụ thể . Knuth muốn học sinh của mình nhận thức được phần phần toán học cơ bản trong phân tích thuật toán.

39
Prasoon Saurav

Hãy chắc chắn đọc tất cả các trích dẫn của Gates bao gồm điều này:

"Tôi đã mất kỷ luật đáng kinh ngạc, và vài tháng, tôi đã đọc nó. Tôi đã nghiên cứu 20 trang, cất nó đi trong một tuần và quay lại thêm 20 trang nữa. Nếu ai đó quá phũ phàng đến mức họ nghĩ rằng họ biết tất cả mọi thứ, Knuth sẽ giúp họ hiểu rằng thế giới sâu sắc và phức tạp. "

Chúng không phải là những cuốn sách dễ dàng và chúng không có ý định. Hãy nhớ rằng một trong những mục tiêu của Knuth là mang lại sự chặt chẽ về toán học cho khoa học máy tính . Thật tuyệt nếu bạn muốn chứng minh một cái gì đó về một thuật toán, nhưng không tuyệt vời nếu bạn chỉ muốn biết nó hoạt động như thế nào.

Michael Dorfman có một vài mẹo hay để đọc những cuốn sách trong câu trả lời của anh ấy cho câu hỏi (hiện đã bị xóa) trên Stackoverflow về những gì tôi có thể nhận được từ việc đọc lô? . Nếu bạn không có đại diện 10k, bạn vẫn có thể xem câu hỏi và câu trả lời của anh ấy trên máy quay lại .

Bạn sẽ nhận được gì từ việc đọc nhiều? Một nền tảng tuyệt vời trong Khoa học Máy tính. Bạn sẽ hiểu máy tính hoạt động như thế nào, từ các cổng logic trở lên thông qua trình biên dịch. Bạn sẽ nghĩ về các vấn đề mà bạn chưa bao giờ thực sự biết là các vấn đề (ví dụ, cách nhanh nhất để nhân lên là gì?) Và xem các kết nối thuật toán giữa những thứ mà bạn không bao giờ nghĩ là có liên quan (ví dụ như dòng sông, RNA và dấu ngoặc đơn lồng nhau).

Tôi hoàn toàn không đồng ý với những người nói rằng "xây dựng phần mềm thay vì đọc về xây dựng phần mềm" - có một sự khác biệt giữa các ngành Kỹ thuật phần mềm và Khoa học máy tính. TAOCP là về sau.

Nếu bạn chưa bắt đầu, tôi có một vài khuyến nghị.

Đầu tiên, bạn có thể muốn bắt đầu với Tập 4. Đó là một số tài liệu thú vị, rất cập nhật và khiếu hài hước của Knuth tỏa sáng. Ngoài ra, có những video có sẵn (trên trang web Stanford SPCD hoặc Stanford iTunes) nơi Knuth thảo luận về các phần khác nhau. Những video này rất được khuyến khích. Fascicles 0, 1, 2, 3 và 4 của Tập 4 có sẵn dưới dạng bìa mềm riêng biệt. Cùng với nhau, tài liệu V4 được xuất bản lớn hơn bất kỳ 3 tập đầu tiên nào, nhưng được cắt thành các món ăn có kích cỡ cắn. (Tôi tự hỏi liệu Tập 1-3 có vẻ ít đáng sợ hơn đối với mọi người nếu mỗi tập được xuất bản ở dạng bìa mềm một chương ...)

Tùy thuộc vào nền tảng toán học của bạn, tôi khuyên bạn nên đọc lướt Chương 1 lần đầu tiên và quay lại khi cần. Trên thực tế, có lẽ bạn sẽ muốn đọc từng phần (ít nhất) hai lần - nhanh chóng ngay lần đầu tiên, chỉ để có được trực giác và ý chính của các đối số, sau đó từ từ, cẩn thận, hiểu từng bước.

Hãy chắc chắn đọc Tập 1, Fascicle 1 trên MMIX thay vì các phần cũ trên MIX. MMIX tốt hơn theo nhiều cách, và bạn nên chuyển đổi MIX trong văn bản thành MMIX khi bạn đi cùng hơn là cố gắng đi theo cả hai thế giới.

Một nguyên tắc chung: đừng bỏ qua các bài tập. Có rất nhiều tài liệu hay trong các câu hỏi (và câu trả lời). Làm nhiều bài tập nhất có thể; nhưng đọc tất cả (và đọc câu trả lời, một khi bạn đã xử lý vấn đề hoặc quyết định cho nó vượt qua).

Cuối cùng, nếu bạn thực sự bắt lỗi: đọc chỉ mục. Rất nhiều câu chuyện cười lớn ẩn giấu ở đó.

Đương nhiên, StackOverflow sẽ là một nơi tốt để đăng các câu hỏi cụ thể trên văn bản, nếu chúng sẽ xảy ra ....

Đối với các tài nguyên khác, tôi đã thấy rằng việc duyệt các giáo trình của các trường khoa học máy tính được đánh giá cao là hữu ích. Ví dụ, sách giáo khoa cho các lớp thuật toán bắt đầu:

57
Corbin March

Knuth là tác giả khoa học máy tính được kính trọng nhất, trích dẫn, nói về và rất được kính trọng trong lịch sử. Những cuốn sách của ông tô điểm cho giá sách của tất cả các nhà phát triển phần mềm nghiêm túc, và được nhắc đến với cùng một mức độ tôn trọng mà mọi người dành cho Kinh thánh và Nghệ thuật chiến tranh.

Tôi thậm chí đã nghe nói rằng một số mọi người thực sự đã đọc một phần sách của Knuth.

Hầu hết mọi người chỉ dự định đến.

Cá nhân tôi đang tiết kiệm cho họ nghỉ hưu

29
Steven A. Lowe

Sách của Knuth đã thay đổi lĩnh vực thuật toán mãi mãi. Chính anh ta đã nói rằng "2 trang trong cuốn sách của tôi là toàn bộ công việc của ai đó" và những cuốn sách của anh ta rất khó đọc. Cuốn sách chứa tài liệu cô đọng từ nhiều năm làm việc trong Khoa học máy tính.

Bạn không nên cảm thấy tồi tệ nếu bạn không thể hiểu nó.

Như Prasoon đã nói, CLRS là một cuốn sách đơn giản hơn để đọc.

Bạn cũng có Thuật toán của Rajasekaran, Sahni et al rất dễ hiểu.

20
Arjun J Rao

Khi tôi mới tốt nghiệp, tôi đã chọn ba tập TAOCP đầu tiên như một món quà tốt nghiệp cho chính mình và cố gắng đọc chúng xuyên suốt. Không bao giờ quản lý nó. Những ngày này tôi đã thực hiện được khoảng 1/3 trong ba tập đầu tiên (được cho là không theo thứ tự cụ thể nào). Tài liệu chắc chắn rất dày đặc, nhưng có ba lời khuyên tôi đã học được rất nhiều.

Đầu tiên, đừng cố đọc từ bìa này sang bìa khác. TAOCP thực sự là một công việc tham khảo nhiều như mọi thứ và tôi thấy tốt nhất là đọc một phần khi nó liên quan đến vấn đề bạn đang cố gắng giải quyết. Giống như nhiều thứ trên thế giới, hiểu các giải pháp dễ dàng hơn nhiều khi bạn gặp phải vấn đề mà họ đang cố gắng giải quyết.

Tiếp theo, sơ đồ đó ở phía trước của cuốn sách, nó không chỉ là một chút hài hước mà thực sự là một mẹo khá hữu ích. Đọc các phần bạn đang làm việc lặp đi lặp lại, bắt đầu trước tiên chỉ bằng các khái niệm bao quát và sau đó nhẹ nhàng đi sâu hơn vào toán học.

Cuối cùng, giữ một số giấy cũ lỗi thời và một cây bút chì tiện dụng để làm việc thông qua các thuật toán như chúng được mô tả, và giải quyết một vài vấn đề dễ dàng. Nó đi một chặng đường dài để giúp thực thi lại những gì bạn đang đọc.

12
Cercerilla

Đừng lo lắng, hầu hết mọi người không hiểu Nghệ thuật lập trình máy tính (TAOCP). Vì vậy, đừng nghĩ mình chậm chạp hay là người mới không hiểu-- bạn giống như 99,99% khác chúng ta không có được nó.

Bạn đang khá tham vọng nếu bạn muốn đạt đến cấp độ mà bạn có thể đọc TAOCP một cách dễ dàng. Bản thân tôi chỉ đọc lướt qua những cuốn sách trước khi cất chúng đi. Có lẽ chỉ có một số ít người trên hành tinh này hiểu TAOCP.

Kiểm tra bài đăng: Lập trình viên Sách không thực sự đọc bởi Bill the Lizard.

nhiều sách khác được liệt kê ở đó khá có thể đọc được , có thể hiểu được và bạn có thể được hưởng lợi ngay lập tức.

Cá nhân tôi thích:

10
spong

Tôi vấp phải câu nói này của Bill Gates: "Bạn chắc chắn nên gửi cho tôi một bản lý lịch nếu bạn có thể đọc toàn bộ." Anh ấy đang nói về cuốn sách Nghệ thuật lập trình .. Vì vậy, tôi khá tò mò và muốn đọc tất cả nhưng thành thật mà nói, tôi không hiểu gì cả .. I'm really not that highly intellectual being .. Vì vậy, đây sẽ là lý do tại sao tôi không thể hiểu nó, nhưng tôi rất muốn tìm hiểu .. Tôi hiện đang đọc tập 1 về thuật toán cơ bản .. Vậy có cuốn sách nào thân thiện với người mới không/người chậm như tôi? Vì vậy, tôi có thể xây dựng bản thân và hy vọng trong tương lai tôi có thể đọc sách của Knuth một cách thoải mái ..

nếu bạn xác định mình là not a highly intellectual being sau đó bạn đang đặt mình vào những kỳ vọng thấp. Bạn phải phá vỡ tâm lý đó nếu bạn muốn làm điều gì đó xứng đáng với rắc rối. Không có nghi ngờ gì trong tâm trí của bạn rằng bạn có thể đạt được một cái gì đó. Ngoài ra, đạt được nó không có nghĩa là bạn sẽ đạt được nó một cách dễ dàng.

Những điều đáng theo đuổi là những điều khó khăn ... và đó không phải là một sáo ngữ. Trong phần mềm, kỹ thuật, trong cuộc sống nói chung, nếu bạn muốn đạt được điều gì đó, bạn phải tìm kiếm những thứ khó, những thứ mọi người tránh và không giải quyết cho mẫu số chung thấp nhất của mọi thứ.

Đầu tiên, không rõ nền CS của bạn là gì. Cuốn sách của Knuth đòi hỏi một mức độ trưởng thành. Rất ít người có bằng CS có thể vượt qua nó một cách dễ dàng. Tôi không mong đợi một sinh viên CS vừa hoàn thành khóa học đầu tiên về thuật toán để thực sự có thể trải qua dù chỉ một cuốn sách của Knuth. Sự trưởng thành cần thiết để có được nó chỉ là không có, và điều đó không liên quan gì đến năng lực tinh thần của học sinh.

Bạn cần phải có các thuật toán cơ bản của bạn lạnh và rõ ràng, và bạn cần phải có một số lượng lớn lập trình (công việc và/hoặc học thuật) trong vành đai của bạn - tôi muốn nói, ít nhất là 40 tín chỉ về lập trình. Bạn cũng cần phải có toán học CS của bạn trên nền tảng vững chắc.

Bạn không thể tiến xa mà không nắm bắt được toán học rời rạc (và có thể là lý thuyết tính toán.)

Không phải là bạn sẽ cần kiến ​​thức đó để giải quyết các vấn đề của Knuth, nhưng bạn cần có sự trưởng thành để có thể trải qua loại tài liệu đó.

Trước tiên, chọn một cuốn sách và một cuốn sách duy nhất (cuốn sách của CLRS như được đề xuất trước đó) và làm việc từ đầu đến cuối. Khi có thể làm các chương trình thực hiện các thuật toán. Đừng sử dụng Java hoặc C #, thậm chí không phải C++. Chuyển đến xương trần C và có cảm giác xây dựng mọi thứ từ các mảnh vụn kim loại xương trần.

Cũng nhận được cuốn sách của Knuth về "Toán học cụ thể" nếu bạn chưa thực hiện một khóa học về toán học và lý thuyết tính toán rời rạc. Sẽ tốt cho bạn để đi qua cuốn sách đó là tốt.

Sau đó giải quyết bách khoa toàn thư của Knuth, một cuốn sách, một chương một lần. Đừng đi đến một chương khác mà không nắm bắt được phần đầu tiên.

Tôi sẽ đề nghị bạn đi qua tập I (thuật toán cơ bản) trước, sau đó đến tập III (tìm kiếm và sắp xếp). Đó nên là mục tiêu trước mắt của bạn. Sau đó, sau đó (nhiều về sau), giải quyết tập IV (Thuật toán kết hợp) và sau đó là Tập II (Thuật toán bán số.)

Đừng cảm thấy tồi tệ nếu bạn không hiểu nó lúc đầu. Tôi đã cố gắng vượt qua tập I và III trong nhiều năm (10 năm nay).

Và bạn cũng không nên đặt quá nhiều trọng lượng vào nó. Đừng làm điều đó để chứng minh điều gì đó với ai đó hoặc chính bạn. Làm điều đó bởi vì bạn trí tuệ thích làm như vậy. Bạn có thể trở nên thành thạo các thuật toán chỉ bằng cách sử dụng sách của CLRS (hoặc bất kỳ cuốn sách cấp độ tốt nào ngoài đó.)

Hãy thực dụng và cho bản thân nghỉ ngơi. Hãy coi việc đi qua cuốn sách của Knuth như một tham vọng cá nhân lâu dài, chứ không phải là một bằng chứng ngay lập tức rằng bạn là tài liệu CS;)

Có những điều quan trọng khác (khôn ngoan về nghề nghiệp) để tự giết mình;)

8
luis.espinal

Trước khi bắt đầu với Knuth, tôi đã phải vượt qua bốn cuốn sách khác nhau. Hai cái đầu tiên là sách Sedgewick trên Thuật toán. Những tổng quan này hầu hết các thuật toán và cấu trúc dữ liệu trong một biểu mẫu được triển khai thực tế, vì vậy bạn có thể thấy chúng là gì và chúng hoạt động như thế nào. Những cuốn sách này có các phiên bản ngôn ngữ khác nhau - tôi đọc những cuốn trong C, nhưng iirc chúng ban đầu được viết bằng Pascal, và có các phiên bản C++ và Java ngoài kia.

Sau đó, tôi đã nghiên cứu một phần tốt của cuốn sách Cormen về Thuật toán và đã sử dụng Sedgewick và Flajolet Giới thiệu về Phân tích thuật toán như một văn bản miễn phí, vì nó nằm trong mạch của sự nghiêm ngặt toán học của Knuth hơn là Cuốn sách Cormen. Tôi vẫn chưa hoàn thành một trong hai thứ này, chủ yếu là chọn những phần mà tôi cảm thấy cần.

Sau khi đọc chúng và nhận được bằng Toán học, tôi có thể đọc qua một số của TAOCP, nhưng nó rất khó đọc. Điều đó không có nghĩa là nó không hữu ích. TAOCP là một số hướng dẫn tham khảo thuật toán lớn nhất xung quanh, nhưng nghĩ rằng bạn có thể sử dụng chúng để "hiểu" đầy đủ bất cứ điều gì có vấn đề.

4
Justin Hamilton