+2

Tại sao cấu trúc dữ liệu và giải thuật quan trọng?

Giải thuật là gì?

Một đoạn code tốt nhất không phải là đoạn code ngắn nhất, ít dòng nhất mà là đoạn code có hiệu năng cao nhất. Trong một lớp đại học nọ có một bài toán nhỏ được đưa ra, ông A code rất nhanh, rất ngắn và hoàn thành trước tiên, một lúc sau ông B mới xong và code còn dài hơn - tất nhiên là cũng gọn gàng. Nhưng sau đó hãy nhìn vào kết quả của 2 ông: trung bình tất cả các test case ông A hết 1,25s, ông B hết 0,8s, bộ nhớ ông B cần cũng ít hơn ông A, vậy chúng ta nên nhận xét code của ông nào tốt hơn? tất nhiên là ông B rồi.

Vậy vấn đề ở đây là gì? không phải code cứ chạy xong là xong, chúng ta phải biết cách tối ưu hóa chúng. Có thể ở đây ông A biết cách giải bài toán nhưng ông B biết cách tối ưu hóa hiệu năng cho chúng. Và ông B chắc chắn giỏi một thứ hơn - đó là giải thuật.

Giải thuật - Algorithm - tạm dịch là một tập các hướng dẫn được xác định rõ ràng theo từng bước một để xử lý dữ liệu. Hơi mông lung một chút nhưng cứ hiểu đơn giản là các phép tính theo trình tự, có logic, từng bước một rất rõ ràng để xử lý dữ liệu và không phụ thuộc ngôn ngữ nào cả.

Cấu trúc dữ liệu là gì?

Cấu trúc dữ liệu - Data structure - là cách lưu trữ và tổ chức dữ liệu sao cho chúng được sử dụng hiệu quả.

Việc chọn loại cấu trúc dữ liệu sẽ phụ thuộc vào mỗi bài toán và mỗi hoàn cảnh. Ví dụ trong một bài toán cần lưu trữ một số dữ liệu có sẵn và hữu hạn, vậy ta nên dùng Array thay cho các loại cấu trúc có bộ nhớ động khác như Linked-list, bởi vì Array sẽ cần ít bộ nhớ hơn và trong bài toán này ta chỉ cần đọc dữ liệu, trong khi độ phức tạp khi đọc dữ liệu của Array chỉ là O(1).

Tóm lại: Chúng ta code lúc nào cũng liên quan tới cấu trúc dữ liệu và thuật toán. Cấu trúc dữ liệu để lưu trữ dữ liệu còn thuật toán là con đường xử lý vấn đề từ đống dữ liệu đó. Và mỗi dự án chúng ta làm đều phải chọn những loại phù hợp nhất để chương trình chạy hiệu quả, tối ưu hiệu năng cho chúng sẽ giúp ta dễ dàng mở rộng và bảo trì code của ta về sau.


Cảm ơn các bạn đã dành ít phút đọc, mình sẽ làm từng loại thuật toán và cấu trúc dữ liệu trong series này.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí