Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithms) đây có lẽ không còn xa lạ gì nếu bạn là sinh viên ngành công nghệ thông tin.
Môn này cũng là một trong những môn đã hành hạ biết bao nhiêu thế hệ sinh viên.
Nhưng vì sự quan trọng của nó trong ngành này, nên dù các bạn đang theo học ngành này ở trường đại học hay tự học ở nhà thì bạn cũng cần phải nắm vững nó để có thể thăng tiến trong tương lai.
Vậy nó là cái gì mà lợi hại quá vậy?
Bài viết hôm nay chúng ta sẽ cùng nhau mổ xẻ nó cũng như tìm hiểu về một số tài liệu học cấu trúc dữ liệu và giải thuật.
Đầu tiên ta phải đi vào khái niệm cấu trúc dữ liệu và giải thuật là gì?
1. Cấu trúc dữ liệu và giải thuật là gì?
Cấu trúc dữ liệu là gì?
Cấu trúc dữ liệu là cách lưu trữ, tổ chức dữ liệu một cách logic để dữ liệu có thể được sử dụng và quản lý một cách hiệu quả.
Để dễ hiểu hơn, ta có thể liên kết với các ví dụ thực tế.
Giả sử như bạn đang tháo một thiết bị điện tử mà bạn chưa tháo lần nào trước đó, thì làm sao để các bạn có thể lắp ráp lại sau khi tháo ra?
Chúng ta sẽ sử dụng các truyền thống và đơn giản nhất, đó là đặt từng bộ phận được tháo ra theo thứ tự, sau đó, khi lắp vào thì chỉ việc cái nào ra sau thì vào trước.
Đó cũng là nguyên tắc mà “stack” một loại cấu trúc dữ liệu sử dụng để hoạt động, dữ liệu vào sau sẽ được lấy ra trước.
Chúng ta còn có rất rất nhiều cấu trúc dữ liệu khác nhau, được sử dụng tùy vào trường hợp.
Tất nhiên là sẽ không có một kiểu cấu trúc dữ liệu nào là hoàn hảo cho tất cả trường hợp, mỗi loại sẽ có ưu điểm và nhược điểm riêng.
> Đọc thêm: 6 loại cấu trúc dữ liệu cần phải biết
Vậy còn thuật toán, giải thuật là gì?
Thuật toán, giải thuật là gì?
“Thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn hay một dãy các quy tắc chặt chẽ của các chỉ thị, phương cách hay 1 trình tự các thao tác trên một đối tượng cụ thể được xác định và định nghĩa rõ ràng cho việc hoàn tất một số sự việc từ một trạng thái ban đầu cho trước; khi các chỉ thị này được áp dụng triệt để thì sẽ dẫn đến kết quả sau cùng như đã dự đoán trước.” - Wikipedia.
Đọc xong đống chữ của Wikipedia xong mình cũng ngáo luôn.
Thôi thì túm nó lại cho dễ hiểu nhé: Thuật toán, giải thuật hay tiếng Anh gọi là algorithms là tập hợp các bước, thao tác để giải quyết một vấn đề gì đó.
Nếu đọc cái đó xong mà vẫn chưa hiểu thì … đọc tiếp cái ví dụ nè.
Để dễ hiểu thì mình sẽ liên hệ thực tế cho các bạn dễ hình dung.
Giả sử như bạn có một vấn đề cần giải quyết đó là biến gạo thành cơm để ăn (hay nói cách khác là nấu cơm), bạn sẽ phải thực hiện những bước sau đây:
-
Lấy gạo - vo gạo - đong nước - đặt vào nồi - đậy nắp - cắm điện - bật nút - ngồi đợi nó chín.
Đấy, các bạn vừa thực hiện một “thuật toán nấu cơm” rồi đấy.
Thuật toán thực ra cũng không có gì to tát cả mà nhỉ. :v :v
Tương tự như vậy trong lập trình cũng có rất nhiều thuật toán để giải quyết nhiều vấn đề khác nhau ví dụ như: Quy hoạch động, Tiệm cận, Tham lam, Chia để trị,...
Vậy là xong, chúng ta đã hiểu được cấu trúc dữ liệu và giải thuật là cái gì rồi, vậy thì học nó để làm gì?
2. Cấu trúc dữ liệu và giải thuật có tác dụng, quan trọng như thế nào?
Tại sao cấu trúc dữ liệu và giải thuật quan trọng?
Đầu tiên phải khẳng định cấu trúc dữ liệu và giải thuật rất quan trọng trong lập trình, không riêng ngôn ngữ Java, PHP, Python.. tất cả ngôn ngữ lập trình khác điều cần cấu trúc dữ liệu và giải thuật.
Sau khi học lập trình một thời gian, bạn sẽ nhận ra việc chuyển đổi ngôn ngữ không quá khó.
Ngôn ngữ có thể thay đổi, nhưng cái sẽ theo bạn mãi là cấu trúc dữ liệu và thuật toán.
Trong tuyển dụng cũng vậy, đa số các công ty chỉ cần bạn có tư duy lập trình tốt và nắm vững nhiều thuật toán, cấu trúc dữ liệu.
Như vậy là bạn đã bước 1 chân qua vòng phỏng vấn, việc bạn sử dụng ngôn ngữ nào chỉ đứng sau trong danh sách ưu tiên trong việc tuyển dụng mà thôi.
Khi nắm vững 2 thứ này, bạn sẽ có cách tổ chức dữ liệu tốt, giải quyết vấn đề tốt.
Khi đó bạn có khả năng lớn hơn là sẽ không cần phải viết code nữa, mà sẽ trở thành người thiết kế phần mềm hoặc team leader để quản lý dự án.
Note: Cấu trúc dữ liệu và giải thuật là phần cần phải luyện tập nhiều để có thể vững vàng, khó có thể một sớm một chiều. Nhưng kiên trì và đúng phương pháp thì sẽ thành công.
> Hiểu rõ điều đó, tại KHÓA HỌC JAVA do NIIT - ICT Hà Nội triển khai cũng sẽ đẩy mạnh thêm về cơ sở, phương pháp học cấu trúc dữ liệu và giải thuật để người học nắm chắc hơn, có khả năng phát triển hơn trong tương lai.
3. Giới thiệu một số Sách / địa chỉ ôn tập cấu trúc giữ liệu vài giải thuật
Với tầm quan trọng thiết yếu của cấu trúc dữ liệu và giải thuật vậy thì đâu có lý do gì mà chúng ta không học nó cho thật tốt đúng không nào?
Bây giờ tôi sẽ giới thiệu một số tài liệu hay mà tôi nghĩ tốt cho các bạn tìm hiểu thêm về cấu trúc dữ liệu và thuật toán.
Sách (PDF) Có kèm link tải file
Ở đây mình giới thiệu với bạn 2 cuốn sách về thuật toán.
Cuốn thứ nhất là cuốn Data Structures and Algorithms phiên bản 27/3/2019.
Những ghi chú hiện đang được sửa đổi mỗi năm bởi John Bullinaria. Chúng bao gồm các phần dựa trên ghi chú ban đầu được viết bởi Martín Escardó và được sửa đổi bởi Manfred Kerber. Tất cả đều là thành viên của Trường Khoa học Máy tính, Đại học Birmingham, Vương quốc Anh.
> Tải sách tại đây.
Tiếp theo, nếu bạn không muốn đọc tiếng Anh và muốn tìm hiểu bằng tiếng Việt thì mình đề xuất bạn nên đọc cuốn Giải thuật và Lập trình do thầy Lê Minh Hoàng trường Đại học Sư phạm Hà Nội.
> Tải sách tại đây.
Địa chỉ (trang web) ôn tập cấu trúc dữ liệu và giải thuật
Một trong những địa chỉ học lập trình, ôn tập Cấu trúc dữ liệu và Giải thuật không thể bỏ qua chính là Youtube, ở đây mình xin giới thiệu một video mà mình rất thích:
Data Structures and Algorithms in Java (Programming with Mosh)
Ngoài ra, trên Youtube cũng có rất nhiều chia sẻ, hướng dẫn hay, bạn có thể lên đó tìm kiếm thêm.
Hoặc các bạn cũng có thể truy cập một số trang TutorialsPoint để học thêm.
Các bạn sẽ chọn phần mà mình quan tâm ở sidebar bên trái, bên phải chính là nội dung của phần đó, giao diện trang web khá trực quan và dễ sử dụng.
Ở trang này nó sẽ phân theo chủ đề, với giao diện cũng khá là trực quan và dễ hiểu. Thậm chí minh họa bằng hình vẽ rất công phu của thuật toán thông qua từng bước, từng bước.
Nói thật là mình thích nội dung về Cấu trúc dữ liệu và giải thuật trên trang web này nhất.
> Ngoài ra, bạn có thể đọc thêm series KIẾN THỨC THUẬT TOÁN trong Java. Đây là một series do mình biên soạn, public miễn phí để giúp các bạn học viên tại NIIT - ICT Hà Nội (cũng như bất kỳ ai yêu thích lập trình) có nền tảng kiến thức về thuật toán tốt hơn.
Tạm kết
Như vậy là trong bài viết này mình đã chia sẻ một chút về Cấu trúc dữ liệu và giải thuật cũng như một số tài liệu, nguồn học cấu trúc dữ liệu và giải thuật tốt.
Hi vọng những thông tin sẽ có ích trong quá trình học Java cũng như học lập trình của bạn sau này.
> Nếu bạn là người mới bắt đầu với Java, hãy xem ngay hướng dẫn TỰ HỌC JAVA tại đây!
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python