it-swarm-vi.com

Làm thế nào để tôi học các thuật toán và cấu trúc dữ liệu?

Đây là phần tiếp theo câu hỏi trước của tôi nơi tôi hỏi có cần thiết phải học thuật toán và cấu trúc dữ liệu. Tôi cảm thấy có nó là.

Bây giờ tôi làm việc trong một môi trường mà tôi sẽ không bao giờ có cơ hội học nó bằng cách thử nghiệm hoặc thực tế hoặc trong bất kỳ nhiệm vụ nào. Cách tiếp cận đúng như sách đúng, loại vấn đề phù hợp, loại tài nguyên phù hợp mà tôi có thể trải qua để cung cấp sáu tháng hoặc một hoặc hai năm để tìm hiểu thuật toán và cấu trúc dữ liệu? Và cũng uốn nắn tâm trí của tôi theo cách nó có thể liên quan đến các vấn đề với các cấu trúc dữ liệu và thuật toán.

38
sushil bharwani

Đọc.

Không, thực sự, đã đọc.

Đọc tất cả mọi thứ về thuật toán và thiết kế bạn có thể tìm thấy. Có những cuốn sách phi thường ngoài kia. Các cuốn sách thuật toán Sedgewick là tốt. Hướng dẫn thiết kế thuật toán của Skiena là tốt. Cùng nhau những cuốn sách này theo tôi trên mọi kệ sách ở mọi công việc tôi làm, cùng với Tháng huyền thoại.

Sau đó hỏi.

Nói chuyện với những người bạn tôn trọng. Hỏi họ những điểm quyết định nào họ có và tại sao họ lại đưa ra quyết định. Những người giỏi sẽ luôn có thể nói với bạn "Tôi đã chọn làm X vì nó tốt hơn A, B theo những cách này. Tôi có thể đã đi với C, nhưng tôi cảm thấy đây là một lựa chọn tốt hơn vì điều này".

Tiếp theo, làm.

Xây dựng công cụ. Xây dựng những thứ mà bạn sẽ không bao giờ sử dụng. Xây dựng những thứ mà bạn sẽ không bao giờ cần. Đi viết một chương trình giải câu đố Sudoku. Bây giờ đi làm lại. Và một lần nữa. Xây dựng nó 5 cách hoàn toàn khác nhau. Xây dựng một chương trình tạo ra các câu đố Sudoku và đưa nó vào bộ giải. Tìm người giải là nhanh nhất. Và sau đó...

Tìm hiểu lý do.

"Cái gì" gần như không bao giờ quan trọng. Ý tôi là, vâng, điều quan trọng là phải hoàn thành dự án trong tay, nhưng cuối cùng nếu bạn biết "cái gì" mà không biết "tại sao", thì bạn có thể không bao giờ thực hiện nó ngay từ đầu. Bạn có một gạch đầu dòng trong sơ yếu lý lịch của bạn. Đi lấy một cái bánh quy và chúc mừng chính mình. "Tại sao" quan trọng hơn nhiều so với "cái gì".

Và đối với hồ sơ Sudoku là một ví dụ. Tôi đã dành rất nhiều thời gian rảnh để trải qua bài tập đó với vô số câu đố logic trên Kongregate và học được rất nhiều trên đường đi.

http: // www <azon.com/Bundle-Alacticms-Parts-1-5-Fundamentals/dp/020172684X/http: // www. -Thiết kế-Hướng dẫn-Steven-Skiena/dp/1848000693 /http: //www <azon.com/Mythical-Man-Month-Software -Engineering-Annlahoma/dp/0201835959 /

40
Hounshell

Thuật toán

Tôi đã học những bài học phép thuật trong môi trường nhóm khi tôi mười hai tuổi. Tên pháp sư là Joe Carota. Anh ấy đã làm một trò lừa một lần và tôi buột miệng, "Làm thế nào mà bạn làm được điều đó?" Anh ấy nói điều gì đó ngày hôm đó đã gắn bó với tôi kể từ đó.

Câu trả lời của Joe, "Michael, nếu bạn thực sự muốn biết thủ thuật đó được thực hiện như thế nào, bạn phải tìm ra cách bạn sẽ tự làm nó."

Tất nhiên đó không phải là điều tôi muốn nghe nhưng nó khiến tôi tập trung vào giải quyết vấn đề. Đây là vấn đề giải quyết từ quan điểm của tôi. Nếu nỗ lực đầu tiên của tôi trong việc giải quyết vấn đề mất mười bảy bước và thực sự klunky, thì tin tốt là tôi đã giải quyết được vấn đề.

Sau đó, bằng cách xem xét giải pháp tôi đã phát triển và tìm cách tinh chỉnh giải pháp đó, tôi sẽ học cách sắp xếp kết quả cuối cùng. Sau này trong cuộc đời lập trình máy tính của tôi, tôi phát hiện ra rằng quá trình này được gọi là "Tinh chỉnh từng bước". Tôi nghĩ hôm nay họ gọi nó là tái cấu trúc.

Nó làm việc sau đó nó vẫn hoạt động bây giờ.

10

ở đây, liên kết sau đây chuyển hướng bạn đến một trong những lớp thành công nhất DS và Thuật toán bằng MIT Tôi đã từng theo dõi.

http://academicearth.org/cifts/int sinhtion-to-alacticms

Hy vọng bạn sẽ thích loạt video này. Chúc may mắn !!!

9
Tharindu Rusira

Xem nếu bạn có thể tham gia một khóa học trực tuyến, hoặc được dạy kèm. Không thành công, điều này xuất hiện trong một tìm kiếm nhanh trên google. Tôi vừa tham gia một lớp học vào mùa xuân vừa qua (lần đầu tiên, tôi đã chuyển từ EE sang phần mềm) và không quá khó để chọn nếu bạn hiểu rõ con trỏ .

2
Stephen Furlani

Nếu bạn không thể tham gia một khóa học về điều này, tôi khuyên bạn nên Hướng dẫn thiết kế thuật toán. Có miễn phí PDF tại đây , nhưng đáng để lấy sách thực tế nếu bạn có kế hoạch lập trình chuyên nghiệp.

2
Jason Baker

Bắt đầu làm việc để giải quyết các vấn đề cổ điển chẳng hạn sphere online , trang web có thể trông không lạ mắt lắm, nhưng đây là những vấn đề lập trình cổ điển đòi hỏi nhiều cấu trúc dữ liệu và thuật toán quan trọng hiện nay.

Các giải pháp có thể được gửi bằng nhiều ngôn ngữ lập trình từ C/C++ đến JavaScript, LISP, Smalltalk, trình biên dịch + khoảng 40 ngôn ngữ khác. Vì vậy, bạn có thể tập trung hoàn toàn vào việc giải quyết vấn đề với bất kỳ ngôn ngữ lập trình nào bạn cảm thấy thoải mái.

1
Ernelli

CLRS

Đây là tài nguyên yêu thích của tôi. Tôi đã sử dụng nó trong khóa học thuật toán khoa học máy tính đại học của mình và cuối cùng tôi đã mua cuốn sách 4 năm sau để tự đọc để chuẩn bị cho M.S. Các khóa học Comp Sci. Nó không dễ đọc bằng bất kỳ phương tiện nào nhưng nếu bạn nỗ lực để hiểu một số phép toán/bằng chứng được trình bày và sau đó triển khai mã giả trong ngôn ngữ yêu thích của bạn, thì nó cũng đáng giá với mức giá khá đắt. Hướng dẫn thiết kế thuật toán mà những người khác đã đề cập cũng là một tài nguyên tuyệt vời để học cách xác định vấn đề nhưng tôi thấy CLRS tốt hơn cho chi tiết thuần túy.

1
Kurtis

Cố gắng đăng ký một khóa học cấp đại học về cấu trúc dữ liệu và thuật toán, việc học các khái niệm này cùng với các khái niệm khác luôn là điều tốt.

1
Martijn Verburg

Bạn luôn có thể thử một cái gì đó như thế này: http://codekata.pragprog.com/

Tôi luôn học tốt hơn bằng cách nghĩ nó trái ngược với việc đọc. Tuy nhiên, bạn nên có sẵn tài liệu/tài liệu đọc để tìm câu trả lời.

0
RobotHumans

Mua cái này cuốn sách , Cho mượn cái này hoặc Ăn cắp cái này! Phần còn lại sẽ theo sau :)

Giới thiệu về thuật toán của Rivest và Cormen. Sẽ rất khó để theo dõi ban đầu khi bạn vượt qua phần giải thích về Mergesort trong phần giới thiệu. Tất cả mọi thứ mở ra cho bạn đẹp.

Thêm vào đó bạn sẽ trở nên tốt hơn nếu bạn giải quyết các vấn đề được đưa ra trong cuốn sách. Tôi chưa bao giờ thực sự muốn chia tay với cuốn sách ngay cả sau khi tốt nghiệp trường. Điều đó thật tốt.

0
Venki