Thuật toán là gì? Khái niệm & Phân tích thuật toán

Đánh giá post

Thuật toán là gì? Thuật toán là một khái niệm khá trừu tượng và mơ hồ với nhiều người. Bài viết dưới đây sẽ giúp bạn hiểu rõ hơn về khái niệm này và tìm hiểu tầm quan trọng của nó đối với lập trình viên.

VIỆC LÀM công nghệ thông tin

Thuật toán là gì?

Hiện nay, các công ty, doanh nghiệp công nghệ, điện tử,… đều đề cập đến thuật toán trong phỏng vấn giống như một cửa ải lớn buộc ứng viên vượt qua. Đây cũng là một trong nhiều cách hay giúp nhà tuyển dụng sàng lọc, kiểm tra mức độ tư duy logic của ứng viên.

thuật toán là gì
Bạn đã biết thuật toán là gì chưa?

Thuật toán là gì? Hiểu một cách đơn giản, thuật toán là danh sách các hướng dẫn và quy tắc mà máy tính cần thực hiện để hoàn thành một tác vụ. Về bản chất, các thuật toán là một loạt các chỉ dẫn được tuân theo từng bước để làm điều gì đó hữu ích hoặc giải quyết một vấn đề.

Ví dụ, bạn có thể coi một công thức nấu ăn là một thuật toán để làm một chiếc bánh. Và chìa khóa là “thuật toán” để giải quyết “vấn đề” là chiếc hòm. Khi không có chìa khóa hoặc dùng sai chìa khóa, bạn sẽ không thể mở được chiếc hòm kho báu. Hoặc bạn sẽ phải dùng “bạo lực” để phá vỡ chiếc hòm. Điều đó khiến báu vật bên trong bị sứt mẻ, méo mó, thiếu toàn vẹn. Mỗi chiếc hòm cần một loại chìa khóa khác nhau, không có chiếc chìa khóa nào mở được tất cả các hòm, cũng như không có thuật toán nào giải quyết được mọi vấn đề.

Các thuật toán máy tính hoạt động thông qua đầu vào và đầu ra. Họ lấy đầu vào và áp dụng từng bước của thuật toán cho thông tin đó để tạo ra đầu ra.

Đặc trưng của thuật toán là gì?

Nó được đặc trưng bởi 5 yếu tố, bao gồm:

Tính xác định

Thuật toán xác định là các thuật toán thực hiện một số bước cố định và luôn kết thúc với trạng thái chấp nhận hoặc từ chối với cùng một kết quả. Những thuật toán có kết quả ngẫu nhiên được gọi là không xác định.

Hãy xem ví dụ dưới đây:

function is_odd(n):

if n mod 2 = 1

then return true

else return false

Đây là một thuật toán xác định vì nó được sử dụng để xem một số nhất định có phải số lẻ hay không.

Tính tổng quát

Thuật toán được gọi là có tính tổng quát khi áp dụng được cho mọi trường hợp chứ không phải chỉ áp dụng cho 1 – 2 trường hợp cụ thể nào đó. Ví dụ, bài toán giải phương trình bậc 2 bằng Delta đảm bảo được tính chất này vì nó luôn giải được với mọi giá trị a, b, c bất kỳ.

Tuy nhiên, không phải lúc nào tính tổng quát cũng được đảm bảo. Trên thực tế, có những thời điểm, người ta chỉ xây dựng thuật toán cho một dạng bài toán đặc trưng.

Tính hiệu quả

Tính hiệu quả của thuật toán liên quan đến lượng tài nguyên tính toán được sử dụng. Nó xem xét lượng thời gian và dung lượng cần thiết để chạy một thuật toán cụ thể.

Tính đúng

Thuật toán cần đảm bảo tính đúng đắn, nghĩa là sau khi đưa dữ liệu vào nó có thể hoạt động và đưa ra kết quả như ý muốn. Tuy nhiên, đây là tính chất khó đạt tới nhất. Điều này tương tự như khi ta giải một bài toán, tất cả chúng ta đều mong đưa ra đáp án đúng, nhưng không phải lúc nào cũng đạt được.

Việc chứng minh tính đúng đắn của thuật toán rất quan trọng. Đối với nhiều vấn đề, không thể khẳng định độ tin cậy của một thuật toán cho đến khi nó đưa ra đầu ra chính xác cho mỗi đầu vào hợp lệ.

thuật toán là
Thuật toán là gì? – Xác định tính đúng của thuật toán là điều quan trọng.

Tính hữu hạn

Một thuật toán nên có số bước hữu hạn và kết thúc sau một khoảng thời gian nhất định. Khi không đáp ứng được đặc điểm này, nó sẽ bị lặp vô tận, không cho kết quả như chúng ta mong muốn. Tính hữu hạn là tính chất dễ bị vi phạm nhất, thường do sai sót khi trình bày.

B1. Hỏi giá trị của n.

B2. S = 0

B3. i = 1

B4. Nếu i = n+1 thì sang bước B8, ngược lại sang bước B5

B5. Cộng thêm i vào S

B6. Cộng thêm 2 vào i

B7. Quay lại bước B4.

B8. Tổng cần tìm chính là S.

Bạn hãy quan sát bước 4 của ví dụ trên, tại đây ta muốn kết thúc thuật toán khi giá trị i vượt quá n. Tuy nhiên, thay vì viết “nếu i lớn hơn n” thì ta viết “nếu i = n+1”. Theo toán học, “i = n+1” đồng nghĩa với “i lớn hơn n”. Tuy nhiên, cần lưu ý rằng, không phải lúc nào điều kiện “i = n+1” cũng xảy ra.

i = 1 là số lẻ thì sau mỗi bước, i được tăng thêm 2 nên i luôn là số lẻ.

  • Trường hợp n là số chẵn thì n+1 là số lẻ, nên sau một số bước i = n+1.
  • Trường hợp n là số lẻ thì n+1 là số chẵn. Vì i là số lẻ, nên dù qua bao nhiêu bước i vẫn không bằng n+1. Khi đó, thuật toán này sẽ bị lặp vô tận.

Tại sao phải sử dụng thuật toán?

Bạn có thể trở thành một lập trình viên mà không học thuật toán, nhưng nếu bạn muốn trở thành một lập trình viên giỏi thì việc học thuật toán là điều không thể bỏ qua. Lý do là bởi thuật toán mang đến rất nhiều lợi ích.

Nâng cao hiệu quả của một chương trình máy tính

Trong lập trình, có nhiều cách khác nhau để giải quyết vấn đề. Và hiệu quả của các phương pháp cũng không hề giống nhau. Một số phương pháp đưa ra câu trả lời chính xác, nhanh hơn những phương pháp khác. Và các thuật toán được sử dụng để tìm ra cách giải quyết vấn đề tốt nhất.

thuật toán
Chọn đúng thuật toán giúp chương trình hoạt động hiệu quả hơn.

Tiết kiệm tài nguyên

Máy tính sử dụng nhiều tài nguyên nguyên khác nhau. Một trong số đó là bộ nhớ. Trong giai đoạn thực thi, mỗi chương trình máy tính sẽ yêu cầu một lượng bộ nhớ nhất định. Một số chương trình sử dụng nhiều không gian lưu trữ hơn những chương trình khác.

Việc lựa chọn đúng thuật toán sẽ đảm bảo chương trình sử dụng ít không gian lưu trữ hơn, đồng nghĩa với việc tiết kiệm dung lượng bộ nhớ.

Tiết kiệm chi phí

Chọn đúng thuật toán giúp cải thiện tốc độ hoạt động của chương trình, tiết kiệm dung lượng bộ nhớ. Điều đó đồng nghĩa với việc bạn đang tiết kiệm chi phí.

Học thuật toán bằng cách nào?

Có nhiều cách để học thuật toán, bạn có thể học tại trường lớp hoặc tự học tại nhà.

Chương trình đào tạo thuật toán tại Việt Nam

Khi theo học ngành công nghệ thông tin tại các trường đại học, bạn sẽ được học 2 – 3 môn học về thuật toán. Tuy nhiên, theo anh Nguyễn Thanh Tùng – CEO tại trung tâm giảng dạy thuật toán BigO: số lượng này là không đủ. Vì thuật toán rất khó và để làm việc được với thuật toán thì cần ít nhất 6 – 7 môn.

Tuy nhiên, trường đại học không thể sắp xếp 6 – 7 môn cho thuật toán vì họ còn cần thời gian cho những môn học khác. Việc cắt bớt, đẩy nhanh tiến độ học dễ khiến sinh viên cảm thấy khó hiểu, dễ nản khi học.

Tự học thuật toán qua khóa học tại nhà

Để nắm bắt tốt kiến thức về thuật toán, bạn có thể tự học. Những tài liệu như “Cấu trúc dữ liệu và giải thuật” của thầy Đinh Mạnh Tường sẽ hữu ích và giúp bạn có kiến thức cơ bản về thuật toán.

Ngoài ra, nếu bạn giỏi tiếng Anh, bạn có thể tìm học các khóa học cơ bản trên mạng của nước ngoài như: Geeks for Geeks. Geeks for Geeks dạy thuật toán kèm video mẫu minh họa, cho phép bạn học và làm bài tập ngay trên đó.

Ngoài ra, bạn cũng có thể học các khóa học tại:

  • https://codelearn.io/Learning/Detail/3477
  • https://codelearn.io/Learning/Detail/133067.

Tuy nhiên, cái giá bạn cần phải trả cho việc tự học là thời gian và công sức. Ngoài ra, bạn cũng có thể sẽ gặp phải tình trạng học kiến thức cũ, kiến thức lỗi thời đã bị bỏ từ lâu. Vì vậy, nếu bạn muốn tự học, bạn nên xây dựng mối quan hệ với những chuyên gia trong ngành, những người này có thể chỉ cho bạn hướng học tốt hơn.

thuật toán la gi
Geeks for Geeks là nơi bạn nên ghé qua nếu muốn học về thuật toán.

 

Lời khuyên dành cho những lập trình viên

Dưới đây là một số lời khuyên giúp các lập trình viên nâng cao năng lực và có cơ hội trở thành nhân sự tại công ty mơ ước.

  • Tham gia vào các cuộc thi dành cho lập trình viên nói chung và thuật toán nói riêng, chẳng hạn như cuộc thi Google Code Jam, Facebook Hacker Cup,… Khi tham gia các cuộc thi này, bạn không chỉ có thêm kiến thức mà còn có cơ hội trở thành nhân viên của các công ty lớn.
  • Khi tham gia phỏng vấn, bạn đừng ngại việc đặt câu hỏi để làm rõ vấn đề. Đôi khi nhà tuyển dụng cố tình đưa ra câu hỏi không đầy đủ để đánh giá khả năng nhìn nhận vấn đề của ứng viên.
  • Khi code, bạn cần giải thích tại sao bạn code như vậy. Bằng cách này thay vì mất thời gian suy đoán về ý tưởng của bạn, leader/ người hợp tác có thể lập tức cho bạn biết suy nghĩ đó đúng hay sai, cần cải thiện ở đâu.

Giải đáp một số câu hỏi liên quan đến thuật toán

Những vấn đề dưới đây sẽ giúp bạn hiểu hơn về thuật toán.

Thuật toán có phải toán học không?

KHÔNG. Nó không hoàn toàn là toán học. Nó là hướng dẫn từng bước để đạt được kết quả.

Thuật toán có giống đại số không?

Câu trả lời là KHÔNG. Đại số đề cập tới lý thuyết về phương trình; trong khi đó thuật toán nói về các quy tắc đề giải quyết vấn đề theo từng bước.

Thuật toán nào phổ biến nhất?

Thuật toán được sử dụng phổ biến nhất là thuật toán xếp hạng tìm kiếm của Google.

thuat toan la gi
 Xếp hạng của Google là một trong những thuật toán phổ biến nhất.

 

Thuật toán có giống trí tuệ nhân tạo không?

Thuật toán là một phần của AI. AI là một nhóm các thuật toán có thể sửa đổi các thuật toán của chính nó và tạo ra các thuật toán mới để đáp ứng với đầu vào và các dữ liệu đã thay đổi.

Thế nào là một thuật toán tốt?

Một thuật toán được coi là tốt khi giúp máy tính giải quyết vấn đề một cách chính xác, trong thời gian ngắn và tốn ít dung lượng bộ nhớ.

Phép nhân có phải thuật toán không?

Có. Phép nhân là thuật toán nhân 2 số. Tùy thuộc vào kích thước của các con số mà thuật toán khác nhau sẽ được sử dụng.

Bạn đã hiểu thuật toán là gì chưa? Hãy học hỏi, trau dồi kiến thức về thuật toán để trở thành một lập trình viên xuất sắc nhé! Và sau đó đừng quên ghé qua JobsGO để tìm kiếm các cơ hội việc làm lập trình viên với mức lương hấp dẫn, ngay gần nhà.

Tìm việc làm ngay!

(Theo JobsGO - Nền tảng tìm việc làm, tuyển dụng, tạo CV xin việc)

Chia sẻ bài viết này trên: