Cấu trúc dữ liệu và giải thuật là một trong những môn học đầu tiên của thời sinh viên IT. Không biết cảm giác của mọi người khi lần đầu tiếp xúc với môn giải thuật thế nào, riêng tôi thì thấy nó giống như viết văn liệt kê. Chẳng giấu gì, trước khi là sinh viên tôi cũng có "lập trình" if-else, array rồi object đủ cả nhưng rồi không hiểu tại sao lại phải viết giải thuật ra giấy thế này. Mãi sau này tôi mới hiểu giải thuật là cội nguồn của tư duy trong lập trình. Viết ra giải thuật theo phong cách step-by-step là đang rèn luyện khả năng tư duy.
Tuy vậy tôi thấy một số người, thậm chí là bạn bè đồng nghiệp vẫn có chút e dè khi nhắc đến cấu trúc dữ liệu & giải thuật. Với họ, giải thuật như một thứ gì đó phải cao siêu và thực sự phức tạp mà họ không thể hiểu, không biết tính ứng dụng của chúng trong công việc như thế nào mặc dù vẫn sử dụng hàng ngày trong công việc!?. Suy nghĩ như thế vô tình đánh giá thấp bản thân của mình đồng thời tạo nên một định kiến về nỗi sợ mỗi khi phải đối mặt. Thay vào đó tại sao không một lần gạt đi nỗi sợ để đối mặt xem thực chất cấu trúc và giải thuật có gì?
Theo tài liệu kĩ thuật, giải thuật là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính. Các thuật toán luôn rõ ràng và được sử dụng chỉ rõ việc thực hiện các phép tính, xử lý dữ liệu, suy luận tự động và các tác vụ khác.
Còn cấu trúc dữ liệu được xác định và tập hợp dữ liệu được sắp xếp có trật tự để làm cho một quy trình dễ theo dõi hơn.
Một ví dụ đơn giản nhất cho một giải thuật "Tính tổng các số từ nhiên từ 1 đến n":
khởi tạo biến sum = 0
với mỗi số tự nhiên x trong khoảng từ 1 đến n thì:
cộng x vào sum
sum là kết quả
Có thể nói cấu trúc dữ liệu góp phần tạo nên thuật toán, vì thuật toán phải dùng cấu trúc dữ liệu để lưu trũ. Có nhiều cấu trúc dữ liệu được tạo ra để phục vụ cho nhiều mục đích lưu trữ, khả năng truy xuất và bộ nhớ mà chúng sử dụng. Việc lựa chọn cấu trúc dữ liệu phù hợp với giải thuật làm tăng tính hiệu quả của giải thuật. Vì thế chúng ta cần nghiên cứu thêm cấu trúc dữ liệu để tăng tính ứng dụng vào thuật toán sau này.
Giải thuật vẫn luôn tồn tại trong những dòng code chúng ta viết hàng ngày. Mỗi logic bạn viết ra là kết quả của giải thuật và chúng có thể khác nhau ở mỗi lập trình viên. Điều đó tạo nên sự khác biệt trong phong cách cũng như hiệu năng lập trình.
Quan tâm đến giải thuật giúp rèn luyện khả năng tư duy trong lập trình. Trong lập trình có nhiều cách để giải quyết một vấn đề, sự khác biệt có thể thể hiện qua hiệu năng. Một số phương pháp giải quyết rất tốt một vấn đề mà phương pháp khác không thể làm được.
Việc biết nhiều giải thuật giúp cho khả năng giải quyết vấn đề trở nên nhanh và hiệu quả hơn. Chúng ta biết nên áp dụng giải thuật nào trong trường hợp nào hay thậm chí kết hợp chúng với nhau để tạo ra một giải thuật tối ưu hơn.
Khi lựa chọn một công cụ, hiểu được thuật toán mà công cụ áp dụng hoặc triển khai giúp cho việc liên kết với những kiến thức đã biết để từ đó lĩnh hội công cụ nhanh hơn. Ví dụ bạn tìm một công cụ hỗ trợ tìm kiếm văn bản, có nhiều công cụ làm được điều đó và chúng áp dụng các giải thuật tìm kiếm khác nhau. Biết được các giải thuật cũng như tình huống tìm kiếm mà bạn muốn sẽ giúp chọn ra được công cụ phù hợp nhất.
Những giải thuật hay thuật toán kinh điển, phổ biến rộng rãi đều được quan tâm tối ưu hóa tài nguyên máy tính như bộ nhớ hay sức mạnh vi xử lý. Lựa chọn giải thuật sẵn có hay viết một giải thuật mới dựa trên chúng một cách phù hợp giúp tối ưu hóa được bộ nhớ từ đó tăng hiệu năng xử lý.
Đặc biệt trong cuộc cách mạng công nghệ AI ngày nay, những giải thuật của các gã khổng lồ công nghệ đã và đang chi phối nhiều mặt của thế giới. Để thấy giải thuật đã len lỏi vào trong cuộc sống hàng ngày của mọi người. Việc trang bị cho mình kiến thức về cấu trúc dữ liệu & giải thuật giúp ta nhanh chóng hòa nhập với thế giới này hơn. Biết đâu một ngày giải thuật mà bạn viết ra cũng góp phần thay đổi thế giới thì sao?
Bí mật ngăn xếp của Blog
Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!
Đăng ký nhận thông báo bài viết mới
Bình luận (1)