Những thuật toán và cấu trúc dữ liệu nào mà một nhà phát triển hoàn toàn nên biết? [đóng cửa]


24

Tôi muốn trở thành một nhà phát triển Java doanh nghiệp thành công. Với những thuật toán và cấu trúc dữ liệu nào tôi nên thành thạo? Những cuốn sách bạn muốn giới thiệu cho tôi?

Để trở thành một nhà phát triển Java thành công, tôi có cần biết tất cả các thuật toán nâng cao như các thuật toán được đưa ra trong CLRS không?

Bạn có thể đề xuất một danh sách các chủ đề mà tôi nên học theo thứ tự giảm dần mức độ ưu tiên của chúng không?

Tôi phải biết:

  • Đang tìm kiếm?
  • Sắp xếp?
  • Đồ thị / Cây?

v.v?


1
@jonsca: Tiếp thị liên kết ah? ;)
Chankey Pathak

Không, SE, thay đổi liên kết như vậy, nhưng tôi chỉ hình dung rằng không phải ai cũng biết những tên viết tắt đó :)
jonsca

Câu trả lời:


17

Giới thiệu về thuật toán của Cormen là một cuốn sách hay cho một số nền tảng lý thuyết cơ bản.

Điều đó nói rằng, hầu hết các thuật toán và cấu trúc dữ liệu đã được mã hóa, kiểm tra và tối ưu hóa bởi những người khác và không có lý do gì để thực hiện lại chúng một lần nữa. Để trở thành một nhà phát triển Java thành công, bạn cần biết Khung công tác sưu tập .


3
Bạn cần phải biết các chi phí liên quan đến các thuật toán: ví dụ: tìm kiếm đầu tiên sẽ tìm thấy con đường ngắn nhất trong khi sử dụng rất nhiều không gian, chẳng hạn.
Frank Shearar

Đồng ý, mặc dù chỉ cần có được tinh thần của ký hiệu O lớn đi một chặng đường dài.
Joonas Pulakka

8

Nếu bạn là một lập trình viên của bất kỳ loại nào, bạn cần phải hiểu tất cả các cấu trúc dữ liệu cơ bản (ngăn xếp, hàng đợi, mảng, danh sách được liên kết, hashtables, cây, v.v.) một cách chi tiết. Ít nhất là bạn có thể tự mình thực hiện bất kỳ điều gì trong số chúng nếu bạn thấy mình ở một thế giới không có bộ sưu tập khung để thực hiện công việc cho bạn.

Đối với các thuật toán, đối với tôi, dường như chúng là nhiều công cụ hơn cho công việc, trong khi cấu trúc dữ liệu của bạn là các khối xây dựng cơ bản. Tôi không nghĩ điều quan trọng là phải biết chi tiết về cách triển khai mọi thuật toán mà bạn có thể gặp phải. Những gì bạn cần để có thể làm là đánh giá một thuật toán sẽ hoạt động tốt như thế nào cho một mục đích nhất định. Đôi khi, sự khác biệt giữa tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng đầu tiên hoặc loại sắp xếp bạn thực hiện trên dữ liệu của bạn có thể tạo ra sự khác biệt rất lớn đối với hiệu suất hoặc thành công chung của mã của bạn, vì vậy biết cách đánh giá điều đó rất quan trọng.


0

Ngoài các câu trả lời khác, tôi chỉ muốn nói thêm rằng nghiên cứu về thuật toán không chỉ để biết về các kỹ thuật nổi tiếng (vẫn còn quan trọng), mà còn có thể hiểu về quá trình suy nghĩ đi vào phát minh một giải pháp cho một vấn đề bạn gặp phải trong cuộc sống thực, không nhất thiết phải được biết đến.


0

Tôi đang học Java bây giờ một ngày.

Tôi muốn trở thành một nhà phát triển doanh nghiệp thành công. Vậy thì những thuật toán và cấu trúc dữ liệu nào tôi nên thành thạo? Những cuốn sách bạn muốn giới thiệu cho tôi?

Để trở thành một nhà phát triển Java thành công, tôi có cần biết tất cả các thuật toán nâng cao như các thuật toán được đưa ra trong CLRS không?

Bạn có thể gợi ý cho tôi một danh sách các chủ đề mà tôi nên học theo thứ tự giảm dần mức độ ưu tiên của chúng không?

Cho tôi biết tên của một số chủ đề mà tôi phải biết. Giống như Tìm kiếm, Sắp xếp, Đồ thị, Cây, v.v.?

Thật tốt khi bạn mong muốn mở rộng và cải thiện kỹ năng lập trình của mình. Tuy nhiên, điều quan trọng là không coi các thuật toán là một danh mục các thứ cần ghi nhớ. Điều bạn cần biết để trở thành một nhà phát triển giỏi (bằng Java hoặc bất cứ điều gì khác cho vấn đề đó) là hiểu phân tích thuật toán.

Bạn học được điều này bằng cách học một vài cấu trúc dữ liệu và thuật toán chọn lọc học cách phân tích hiệu suất của chúng theo thời gian và không gian (bộ nhớ). Tìm kiếm, sắp xếp, đồ thị, cây, đống, ngăn xếp và tất cả những thứ tốt. Điều này cũng cần tuân theo một số điều cơ bản về lý thuyết tính toán và toán học rời rạc (ngay cả khi trong vương quốc Java, chúng ta không bao giờ thực sự sử dụng trực tiếp hai chủ đề đó - lợi ích của chúng là gián tiếp.)

Phân tách việc học ngôn ngữ lập trình (trong trường hợp Java của bạn) với việc học phân tích thuật toán (khác với "ghi nhớ" các thuật toán và cấu trúc dữ liệu.)

"Thuật toán trong một nốt nhạc" của George T. Heineman và Gary Selkow là một khởi đầu tốt. "Thuật toán" của Sanjoy Dasgupta, Christos Papadimitriou và Umesh Vazirani là một cuốn sách giáo khoa tốt nghiệp khác.

Suy nghĩ tốt nhất là học 9-12 khóa học tín dụng trong lập trình trước khi tham gia khóa học 3000 cấp độ dưới cấp về thuật toán. Chặn rằng, tự học với hai cuốn sách tôi đã đề cập có thể là một lựa chọn tốt (mặc dù vậy, tự học có thể không dành cho tất cả mọi người.)

Chúc may mắn!

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.