Tại sao nên biết cấu trúc dữ liệu và giải thuật? Một điều mà nhiều năm qua chưa ai nói với bạn

Tại sao nên biết cấu trúc dữ liệu và giải thuật? Một điều mà nhiều năm qua chưa ai nói với bạn

Tin ngắn hàng ngày dành cho bạn
  • Vậy là cuối cùng Anthropic đã ra trang web Anthropic Academy. Dạy tất tần tật những thứ liên quan đến Claude luôn.

    » Xem thêm
  • Rust sinh ra để tái định nghĩa nhiều thứ. Trong đó chắc phải kể đến JavaScript. Từ đầu năm đến giờ các công cụ làm từ Rust mà để cho JavaScript dùng đếm sương sương cũng vài ba cái rồi. Mới đây nhất là Oxc.

    Oxc là một công cụ phân tích cú pháp (parser), kiểm tra lỗi (lint), định dạng (formatter), chuyển đổi (transformer), minifier... tất cả đều được viết bằng Rust, trong một công cụ duy nhất.

    Mặc dù vẫn đang trong quá trình xây dựng nhưng thử nhìn điểm hiệu năng của nó so với swc hoặc eslint mà xem 🫣

    » Xem thêm
  • Mấy hôm nay, à mà cũng không hẳn, do sự kiện WWDC vừa rồi nên Apple lại bị dân cư mạng mang ra bàn tán rằng rốt cục thì các tính năng AI của họ đang ở đâu? Trong khi các hãng khác đang lao mình vào việc mang AI lên thiết bị, phần mềm của họ thì Apple lại đang có vẻ... không quan tâm lắm.

    Thậm chí mới đây các nhà nghiên cứu của Apple cho rằng các mô hình LLM sẽ "sụp đổ hoàn toàn về độ chính xác" khi được đưa ra các vấn đề cực kỳ phức tạp. Chỉ ra rằng suy luận chỉ là huyễn hoặc thì ngay lập tức đã có nhiều bài phản bác nghiên cứu này. Một lần nữa cho thấy rằng Apple đang suy nghĩ điều gì với AI trên thiết bị của họ?

    Mình thì nghĩ đơn giản thôi, Apple có vẻ đang gặp khó khăn với việc tạo ra AI cho riêng họ. Tức là khó khăn ngay từ đoạn thu thập dữ liệu để đào tạo rồi. Họ luôn tỏ ra tôn trọng quyền riêng tư của người dùng nên chẳng lẽ lại lên mạng đi xào nấu dữ liệu ở khắp nơi, hoặc "chôm" dữ liệu dưới máy người dùng lên? Chắc chắn, họ cũng không muốn cung cấp thêm dữ liệu người dùng cho các bên thứ 3 như OpenAI.

    Nhưng nhờ những khó khăn này biết đâu họ lại tìm ra được hướng đi mới. Ai cũng chọn phần dễ thì gian khổ để phần cho ai 😁. À mình không phải là "fan" của Apple, chỉ là thấy cái nào phù hợp thì dùng thôi 🤓

    » Xem thêm

Vấn đề

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ì?

Cấu trúc dữ liệu & giải thuật là 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.

Tại sao nên biết cấu trúc dữ liệu & giải thuật?

Tại sao nên biết cấu trúc dữ liệu & giải thuật?

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?

Cao cấp
Hello

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!

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!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (1)

Nội dung bình luận...
Avatar
Trịnh Cường2 năm trước

Rất hay bạn ơi

Trả lời
Avatar
Xuân Hoài Tống2 năm trước

Bạn Cường rút ra được bài học gì không ạ?