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

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Mình mới tìm thấy một công cụ trích xuất nội dung từ image, pdf, docx, xlsx, pptx... sang dạng text, markdown, hay là json... Nói chung là nó hỗ trợ kha khá đầu vào và đầu ra. Lấy được nội dung ra rồi thì muốn làm gì thì làm, đặc biệt là bỏ vào trong các mô hình ngôn ngữ lớn để làm nguồn dữ liệu gì còn gì bằng 😁

    Công cụ tên là Docling, viết bằng python. Có thể nhúng vào trong mã hoặc dùng CLI đều được. Mình đã thử với dạng ảnh và pdf. Nhìn chung thì pdf vẫn cho kết quả tốt hơn. Ảnh thì hên xui 😅. Nó còn cho lựa chọn cả thư viện OCR á. Cái nào phù hợp hơn thì chọn.

    Quá trình cài thì phát sinh mấy lỗi. Mọi người nhớ dùng python 3.9 -> 3.12. Nếu bị lỗi ModuleNotFoundError: No module named '_lzma' thì thử làm theo hướng dẫn này xem giải quyết được không nhé ModuleNotFoundError: No module named '_lzma'

    » Xem thêm
  • Giá như mình biết đến kho lưu trữ này sớm hơn. github/opensource.guide là nơi hướng dẫn mọi người tất tần tật về Open Source. Từ làm thế nào để đóng góp mã, làm thế nào để bắt đầu một dự án mã nguồn mở của riêng, cho đến những kiến thức mà bất kỳ ai cũng nên biết khi mới bước chân vào 🤓

    Đặc biệt hàng này chính chủ từ Github luôn á.

    » Xem thêm
  • Hôm trước mới nhắc đến dokploy.com thì hôm nay lại có tiếp coolify.io - cũng là một dự án mã nguồn mở có khả năng thay thế Heroku/Netlify/Vercel. Theo như mình đọc thì Coolify hoạt động dựa trên triển khai Docker, nhờ đó mà nó có thể chạy được hầu hết các ứng dụng. Coolify cung cấp giao diện và tính năng để việc triển khai ứng dụng trở nên đơn giản và dễ dàng hơn.

    Có khi nào đây sẽ là xu hướng triển khai ứng dụng trong tương lai không? 🤔

    » 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 ạ?
Bấm hoặc cuộn mạnh để sang bài mới