Thứ Sáu, 16 tháng 3, 2018

10 cuốn sách "thần thánh" về cấu trúc dữ liệu & giải thuật

Cấu trúc dữ liệu và giải thuật luôn được coi là cơn "ác mộng" đối với rất nhiều sinh viên ngành công  nghẹ thông tin. Đó là lí do vì sao bài viết này được đưa ra để chia sẻ cho các bạn về những cuốn sách hi vọng có thể hỗ trợ trình giải thuật của các bạn. 

Để hỗ trợ độc giả trong công tác tìm kiếm, mỗi đại diện được chúng tôi đề cập đều đi kèm với một tập source code tương ứng.

1. The Art of Computer Programming, 1st Edition – Donald E. Knuth


Đây là một tập hợp đồ sộ các giải thuật và phân tích được tổ chức thành 3 phần:
Phần 1 gồm các kiến thức nền liên quan đến toán học và những cấu trúc dữ liệu căn bản. Phần 2 dành cho semi-numerical algorithm. Phần cuối cùng giống như một cuốn bí kíp toàn tập về các kỹ thuật tìm kiếm và sắp xếp.
“Nếu bạn là một lập trình viên cứng, hãy đọc cuốn sách này và gửi CV ngay cho tôi nếu bạn hiểu tất cả mọi thứ trong đó” – Bill Gates
Ngôn ngữ: Pseudocode
Source codehttp://www-cs-faculty.stanford.edu/~uno/programs.html

2.The Algorithm Design Manual, 2nd Edition – Steven S. Skiena


Cuốn sách này sẽ giúp cho bạn trở nên tự tin hơn trong các buổi phỏng vấn. 
Một người thiết kế thuật toán tốt sẽ nắm được những nguyên lý thiết kế cơ bản, kèm theo đó là các cấu trúc dữ liệu, dynamic programming, depth first search, backtracking và tìm kiếm heuristic… Cuốn sách này sử dụng Pseudocode. Từ Pseudocode, ta có thể chuyển qua bất kỳ ngôn ngữ nào. Khía cạnh lịch sử liên quan đến việc áp dụng các giải thuật xảy ra trong chiến tranh thế giới cũng được đề cập trong cuốn này với một góc nhìn khá thú vị.
The Algorithm Desgin Manual đã được Steve Yegge đề xuất cho các ứng viên phỏng vấn tại Google.
Ngôn ngữ sử dụng: C/Pseudocode
Source codehttp://www3.cs.stonybrook.edu/~algorith/book/programs/

3. Algorithm, 4th Edition – Robert Sedgewick, Kevin Wayne.

  

Cuốn này được sử dụng rộng rãi tại các trường đại học trên toàn thế giới. Nó thống kê các thuật toán quan trọng đang được áp dụng rộng rãi cũng như đề cập một cách hết sức chi tiết tới các thuật toán và cấu trúc dữ liệu áp dụng cho công việc tìm kiếm, sắp xếp, xử lý đồ thị và xử lý xâu ký tự, Tác giả Robert Sedgewick và Kevin Wayne cũng duy trì một cổng thông tin điện tử cung cấp source code tương ứng. Trong tài liệu này, ngôn ngữ lập trình được sử dụng là Java.
Ngôn ngữ sử dụng: Java
Source codehttp://algs4.cs.princeton.edu/home/

4. Elements of Programming Interviews in Java: The Insiders’ Guide – Adnan Aziz, Tsung-Hsien Lee, Amit Prakash


The Elements of Programming Interviews hỗ trợ rất hiệu quả về vấn đề cấu trúc dữ liệu và giải thuật cho các buổi phỏng vấn. Tác giả cuốn này phát hành 2 bản, một bản cho ngôn ngữ C và một bản cho Java. 
Các hướng dẫn trong quyển này bắt đầu với các giải thuật kiểu vét cạn, sau đó phân tích và đi đến những lựa chọn tối ưu hơn. Khi đọc cuốn sách này bạn sẽ thấy khá dễ hiểu bởi có rất nhiều vấn đề được phân loại dựa trên độ khó và các trường hợp liên quan trong thực tế, kèm theo đó là những gợi ý hữu ích, nhờ vậy bạn dễ dàng hiểu và áp dụng các giải thuật này trong công việc thường nhật.  Cuốn sách này cũng mô phỏng được một phần những khó khăn bạn sẽ gặp phải trong các buổi phỏng vấn.
Ngôn ngữ: Java/C++
Source code:  http://elementsofprogramminginterviews.com/solutions

5. Data Structures and Algorithm in Java, 2nd Edition – Robert Lafore


Cuốn này giải thích các concept ở mức căn bản nhất. Kèm theo đó là các gợi ý về solution cho mỗi project ở từng chương. Cuốn này đã từng được sử dụng làm giáo trình cho một khóa học “Cấu trúc dữ liệu và giải thuật”. Các topic ở những cuốn sách kiểu này thường không khác nhau nhiều, vẫn là các cấu trúc dữ liệu quen thuộc : Stack, queue, heaps, hashtable….. 
Ngôn ngữ sử dụng: Java
Source codehttp://www.informit.com/store/data-structures-and-algorithms-in-java-9780672324536

6. Programming Pearls, 2nd Edition – Jon Bentley


Ngôn ngữ lập trình được sử dụng ở đây là ngôn ngữ C.
“Những viên ngọc của lập trình” – Programming Pearls là một bộ sưu tập các vấn đề kinh điển và khá phổ biến trong giới lập trình: thuật toán sắp xếp, tìm kiếm, kiểm thử phần mềm, bài toán tối ưu, …..Mỗi vấn đề đều kèm theo hướng dẫn và các bài phân tích hết sức chi tiết.
Ngôn ngữ: C

7. Data Structures and Algorithms Made Easy – Narasimha Karumanchi

Cuốn này giải thích các cấu trúc dữ liệu kèm theo source code C/C++. Độc giả có thể test song song với đọc. Nếu bạn thích Java? Hãy chọn phiên bản “Data Structures and Algorithm Made Easy by Java”. Cuốn này giải thích các khái niệm cấu trúc dữ liệu xuyên suốt 21 chương với các chủ đề như: Recursion & Backtracking, Linked Lists, Stacks, Queues, Trees, Priority Queues, Heaps, String Algorithms, Algorithms Design Technique… Nó cũng đưa ra nhiều phương pháp tiếp cận khác nhau cho mỗi vấn đề, nhờ đó, độc giả dễ dàng hình dung và phân tích được các giải thuật tương ứng cho từng bài toán. 
Ngôn ngữ sử dụng: C/C++
Source Code:  https://github.com/careermonk/DataStructuresAndAlgorithmsMadeEasy 

8. Algorithms in C, 3rd Edition – Robert Sedgewick


Đây là một bộ bao gồm 2 cuốn sách. Chúng được coi như nguồn tài nguyên quý giá dành cho các nhà nghiên cứu, các developer và thậm chí là cả sinh viên ngành CNTT. 
Cuốn đầu tiên giới thiệu các ý niệm cơ bản liên quan tới cấu trúc dữ liệu và giải thuật.
Cuốn thứ 2 sẽ chỉ tập trung vào các thuật toán đồ thị với trên 2000 bài tập thực hành. Đi kèm với khối lượng bài tập khổng lồ đó là các hướng dẫn và sample code mẫu mực của tác giả.
Ngôn ngữ: C
Source code
https://www.cs.princeton.edu/~rs/Algs3.c1-4/code.txt
https://www.cs.princeton.edu/~rs/Algs3.c5/code.txt

9. Hacker’s Delight 2nd Edition by Henry S. Warren


Các bí kíp liên quan tới kỹ thuật, cấu trúc dữ liệu và giải thuật sẽ được tổng hợp trong cuốn sách này . Mục tiêu chính là giúp bạn lập trình linh hoạt hơn, từ đó nâng cao hiệu suất công việc. Các tricks được trình bày “chi tiết đến từng bit”. Cuốn sách này cũng chứa một chương trình tối ưu hóa cho máy tính RISC.
Ngôn ngữ: C
Source codehttp://www.hackersdelight.org/hdcodetxt.zip

10. Introduction to Algorithm, 3rd edition – Thomas H.Cormen


Cuốn này cover một phạm vi khá rộng trong cấu trúc dữ liệu, bên cạnh đó, mỗi topic đều được viết rất sâu. Introduction to Algorithm phù hợp với tất cả đối tượng – từ sinh viên chưa tốt nghiệp cho đến chuyên gia…
Pseudocode cũng được sử dụng để trình bày các ý tưởng trong cuốn sách này. Các chủ đề thuộc giải thuật hiện đại như lý thuyết đồ thị, giải thuật đa luồng đều được đề cập rất chi tiết. 
Introduciton to Algorithm cũng là một bí kíp cần được tu luyện tử tế trước khi đi phỏng vấn
Ngôn ngữ sử dụng: Pseudocode



EmoticonEmoticon