Tổng hợp

Thuật toán là gì? phân loại và ý nghĩa của thuật toán

Thuật toán – một thuật ngữ nghe quen thuộc trong kỹ thuật, trong cuộc sống, đặc biệt là trong lĩnh vực công nghệ khoa học. Khái niệm thuật toán là gì? Thuật toán có tính chất, vai trò, phân loại ra sao? Những thông tin trong bài viết sau đây của trường THPT Ngô Thì Nhậm sẽ giúp bạn hiểu rõ hơn nhé!

Thuật toán là gì?

Thuật toán là gì? Học thuật toán làm quái gì?

Thuật toán hay giải thuật (tiếng anh là Algorithm) có khá nhiều định nghĩa phức tạp. Bạn có thể đọc ở nhiều nguồn để hiểu thêm về nó. Cá nhân tôi định nghĩa dễ hiểu rằng, thuật toán là “thuật” (phương pháp) để giải quyết 1 bài toán. Nói dễ hiểu hơn, mỗi một bài toán giống như một chiếc hòm chứa đựng kho báu (kết quả, đáp án), và chiếc chìa khoá để mở cái hòm đó chính là “giải thuật”. Nếu dùng sai chìa khoá, bạn vẫn có thể mở được hòm, nhưng mà sẽ mất nhiều thời gian, hoặc mở được hòm thì kho báu ở bên trong bị méo mó, không toàn vẹn. Sử dụng đúng chìa khoá, sẽ giúp bạn lấy được kho báu 1 cách dễ dàng, nhanh chóng. Tất nhiên mỗi chiếc hòm sẽ luôn cần loại chìa khoá khác nhau, giống như một bài toán luôn có những giải thuật xác định. Không có chiếc chìa khoá nào mở được tất cả các hòm, cũng như không có giải thuật nào giải được toàn bộ các bài toán.

Thuật toán thực ra cũng đơn giản, không phải cái gì đó phức tạp. Nó là những phương pháp, những cách mà người ta yêu cầu mình làm đúng theo những quy trình như vậy thì nó sẽ ra được kết quả tối ưu.

Phương pháp này có thể đến từ nhiều nguồn khác nhau, có thể là một nhà khoa học họ sáng chế ra, cũng có thể là một nhóm người nào đó hoặc kinh nghiệm truyền nhiều năm, khi mà mình áp dụng đúng quy cách như vậy thì mình sẽ có những kết quả tốt hơn là những cái gì đó mình tự làm.

Thuật toán khác gì với cách lập trình thông thường? Nếu không biết về thuật toán thì có thể lập trình được không?

Top 10 thuật toán dành cho lập trình viên mới nhất

Bạn không biết thuật toán, bạn vẫn có thể lập trình và cũng có thể lập trình giỏi, tuy nhiên nếu bạn biết thuật toán bạn sẽ có thêm những phương pháp hay hơn. Tôi ví dụ thuật toán đơn giản như vậy, tôi cho bạn dãy số, và tôi yêu cầu bạn hãy tìm một con số mà tôi đưa có nằm trong dãy số đó không? Nếu như bạn không học thuật toán thì rất đơn giản, bạn cứ so sánh mỗi số một lần miễn sao bạn tìm được con số có nằm trong dãy số này hay không. Còn người khi học thuật toán, họ sẽ nghĩ khác, thứ nhất họ sẽ nghĩ những con số mà người ta đưa ra liệu nó có lớn hay không, tại vì nếu như người ta đưa lớn quá sẽ gây hiện tượng tràn số và nếu như mình phải làm thêm thao tác cộng, trừ, nhân, chia.

Số lượng người ta đưa ra bao nhiêu cũng ảnh hưởng đến việc sử dụng thuật toán, ví dụ người ta đưa ra 10 số, 20 số thì làm dễ, còn người ta đưa 1 tỷ số hoặc 10 tỷ số thì việc tìm kiếm đó nó rất không khả thi nếu mình tìm bình thường, như vậy thì mình phải áp dụng thêm thuật toán vào, bằng cách mình có thể sắp xếp trước những con số đó lại và khi mình sắp xếp như vậy thì mình sẽ tốn thời gian cho việc sắp xếp đó nhưng sau đó mình tìm kiếm rất là nhanh. Cuối cùng thời gian tìm kiếm rất là nhanh, dù là 1 tỷ số hay 10 tỷ số thì tìm kiếm trong vòng 1s cũng ra kết quả được. Còn nếu mình không áp dụng thuật toán, mình cứ làm hoài, cứ so sánh hoài, rồi khi người ta tăng lên thì thời gian chạy rất là lâu.

Tại sao cần dùng thuật toán?

Thuật toán là gì? Tính chất, Vai trò và Cách phân loại thuật toán

Lập trình chính là để yêu cầu, chỉ thị máy thực hiện, giải quyết 1 công việc, bài toán cụ thể nào đó của cuộc sống. Mỗi bài toán thực tế sẽ có cách giải quyết khác nhau. Am hiểu và sử dụng đúng thuật toán, sẽ giúp bạn giải quyết một cách dễ dàng, cùng với độ chính xác cao trong thời gian ngắn nhất. Bỏ qua thuật toán sắp xếp các số trong dãy số nguyên hay thuật toán tìm số nguyên tố đi nhé, bài đó chỉ dùng để học và minh hoạ về thuật toán thôi. Ở đây, mình muốn giới thiệu với các bạn những thuật toán có tính ứng dụng khá lớn trong các sản phẩm/hệ thống phần mềm hiện tại nhé:

  • Đầu tiên là thuật toán tìm đường đi ngắn nhất. Đại khái cho bạn một danh sách các đường đi giữa các địa điểm, hãy tìm đường đi ngắn nhất (về khoảng cách) hoặc chi phí tối thiểu khi đi từ điểm X đến điểm Y. Bạn biết thuật toán này dùng ở đâu rồi chứ? Hiện tại tôi nghĩ, bạn có thể sẽ biết nó xuất hiện trong các phần mềm chỉ đường và ứng dụng liên quan tới ngành giao thông vận tải (ví dụ google map, grab, uber, giao hàng nhanh, ….), nhưng bạn có biết nó còn dùng ở đâu nữa không? Xin nói với các bạn rằng, trong các hệ thống mạng, viễn thông người ta cũng dùng thuật toán này để định hướng đường truyền và tín hiệu. Cuộc điện thoại từ 1 người ở thành phố Hà Nội gọi cho 1 người ở thành phố Hồ Chí Minh đi qua các cột thu phát sóng, dữ liệu internet từ máy tính của bạn đi tới máy chủ của nhà cung cấp mạng cũng phải sử dụng thuật toán này để đạt được tốc độ tối đa.
  • Tiếp theo, một thuật toán khá nổi tiếng khác là thuật toán tìm kiếm. Bạn có thể nhìn thấy nó ở khá nhiều sản phẩm phần mềm hiện tại, điển hình như Google. Bạn có thể nghĩ rằng, tìm kiếm khá là đơn giản, khi bạn lần lượt soi vào từng ô, từng dòng dữ liệu xem có thứ mà mình tìm kiếm hay không? Nhưng hãy đặt địa vị, bạn có hàng tỷ tỷ món đồ dùng được vứt lộn xộn trong 1 căn nhà, bạn sẽ mất bao nhiêu lâu để tìm được món đồ mà bạn mong muốn. Hãy biết chắc chắn rằng, việc Google trả ra được kết quả mà bạn yêu cầu tìm kiếm trong vòng 1 vài giây là vô cùng khó. Điều ấy yêu cầu 1 thuật toán cực mạnh, và vẫn liên tục cần cải tiến cho đến ngày hôm nay.
  • Các thuật toán mã hoá được sử dụng để mã hoá thông tin, được sử dụng nhiều trong việc truyền nhận và lưu trữ giữ liệu, giúp bảo vệ thông tin cá nhân và tổ chức khỏi các cuộc tấn công hay khai thác.

Bỏ qua những thuật toán cao siêu như bên trên vì bạn ít có cơ hội làm những sản phẩm như vậy, trong quá trình làm phần mềm, bạn cũng có thể sẽ gặp các bài toán hay vấn đề nhỏ yêu cầu bạn phải chọn đúng giải thuật để giải, ví dụ như:

  • Hãy tìm kiếm 1 cái máy tính có giá từ X->Y, đáp ứng tối đa các tiêu chí của người dùng chỉ trong 1 cái click chuột
  • Hãy đưa ra các bài viết hoặc sản phẩm mà người dùng quan tâm dựa trên lịch sử truy cập của họ

Khi bạn lập trình đủ lâu và đủ nhiều, tôi nghĩ chắc chắn bạn sẽ gặp nhiều bài toán khó hơn tôi. Trong quá trình phát triển sản phẩm CodeLearn, tôi và những đồng đội cũng đôi lúc phải giải quyết những bài toán kiểu như thế này:

  • Hãy tính toán và sắp xếp thứ hạng của người dùng dựa trên lịch sử học và làm bài
  • Đếm số lượng truy cập của người dùng trong 1 khoảng thời gian để dự đoán tấn công
  • Đưa ra gợi ý các bài tập mà người dùng nên làm dựa vào lịch sử truy cập và thao tác của họ trên hệ thống

Tất nhiên những bài toán trên là không khó với tập dữ liệu và người dùng nhỏ. Nhưng hãy thử tưởng tượng, khi hệ thống có hàng nghìn hàng vạn người cùng truy cập và bạn phải trả về kết quả là cực kì nhanh, bạn sẽ làm như thế nào để đảm bảo điều đó? Thực tế đã trả lời chúng tôi rằng, khi chọn đúng giải thuật, tốc độ xử lí có thể tăng lên từ hàng chục tới hàng trăm lần. Và tôi nghĩ rằng, một ngày nào đó, chúng tôi vẫn sẽ phải nâng cấp thuật toán để giải quyết bài toán với lượng dữ liệu và người dùng lớn hơn.

Phân loại thuật toán

cac-loai-thuat-toan
Các loại thuật toán

Dựa vào nhiều tiêu chí đa dạng khác nhau, thuật toán được phân chia thành nhiều loại, nhiều yếu tố, cụ thể như sau:

Phân loại theo tính năng

Đối với việc phân chia dựa vào tính năng, thuật toán được phân chia thành các loại cơ bản sau:

  • Thuật toán tìm kiếm: là loại thuật toán áp dụng để tìm kiếm các dữ liệu, thông tin trong 1 tập hợp và bao gồm các phân tử khác nhau.
  • Thuật toán sắp xếp được biết đến để sắp xếp các thứ tự trong từng phân tử của 1 tập hợp theo cách khoa học, đáp ứng được yêu cầu logic.
  • Thuật toán đồ thị là dạng thuật toán sử dụng để xử lý các vấn đề liên quan đến bài có sử dụng đồ thị.

Phân loại theo cách thức thực hiện

Cách phân loại thứ hai đó là theo cách thức thực hiện. Cách phân loại này chia thuật toán thành 2 loại chính đó là:

  • Thuật toán chia để trị: nói cách dễ hiểu hơn, nó sẽ chia bài toán lớn thành các phần nhỏ, chia vấn đề lớn thành những vấn đề nhỏ để xử lý và giải quyết dần.
  • Thuật toán tham lam: Đây là dạng thuật toán thay đổi trạng thái của bài toán thông qua những hành động cụ thể. Nó giúp người giải quyết có thể tiếp cận vấn đè từ từ để tìm ra hướng giải quyết nhanh chóng và hiệu quả hơn.

Đó là những loại thuật toán cơ bản được chia theo từng tiêu chí riêng mà chúng ta có thể tham khảo.

Tính chất của thuật toán

tinh-chat-cua-thuat-toan
Tính chất của thuật toán

Thuật toán có những tính chất nào? Đâu là đặc trưng tiêu biểu cơ bản của thuật toán? Thuật toán có 5 tính chất cơ bản sau đây:

Tính chính xác

Tính chính xác là tính chất tiêu biểu, đầu tiên khi nhắc đến thuật toán. Nó là một trong những yếu tố quan trọng hàng đầu đảm bảo kết quả cũng như thao tác thực hiện chính xác, hiệu quả và khả thi hơn trong các bài toán và công thức.

Tính rõ ràng minh bạch

Tính chất thứ 2 của thuật toán là sự rõ ràng, minh bạch. Tính chất này được thực hiện trên nguyên tắc lệnh. Các câu lệnh trong thuật toán đưa ra rõ ràng, dễ hiểu và được sắp xếp theo trình tự nhất định.

Tính khách quan

Tính khách quan là đặc trưng của thuật toán, bởi nó được thực hiện bởi hệ thống máy tính hay con người cũng đều phải đưa ra kết quả giống nhau, duy nhất, chỉ 1 kết quả. Kết quả sẽ được đưa ra bởi 2 phương pháp này không tương đồng thì cần xem xét lại bởi điều đó chứng tỏ thuật toán sai hoặc vô lý.

Tính phổ dụng

Tính phổ dụng cũng là đặc trưng tiêu biểu của thuật toán, nó đòi hỏi tính ứng dụng cao. Nó không chỉ dùng để giải quyết duy nhất 1 bài toán mà còn có khả năng giải quyết được những bài toán tương tự.

Tính kết thúc

Thuật toán nhất định không thể thiếu tính kết thúc. Bởi nó là tập hợp hữu hạn vì thế, luôn có điểm kết thúc, điểm kết thúc chính là kết quả đã tìm ra phù hợp.

Các thuật toán được sử dụng ở đâu trong cuộc sống thực?

Từ ‘thuật toán‘ thoạt nghe có vẻ đáng sợ, nhưng nó thực sự là một khái niệm đơn giản. Mọi người sử dụng thuật toán mọi lúc trong thói quen hàng ngày của họ để hoàn thành công việc, chẳng hạn như pha cà phê hoặc soạn thảo văn bản.

Các thuật toán nằm ở trung tâm của máy tính. Nếu quan sát môi trường xung quanh, chúng ta có thể tìm thấy một số thuật toán đang hoạt động để giải quyết các vấn đề trong cuộc sống hàng ngày của chúng ta: Mạng truyền thông xã hội, ứng dụng GPS, bộ máy tìm kiếm của Google, nền tảng thương mại điện tử, hệ thống đề xuất của YouTube hoặc Netflix, v.v. các ứng dụng được cung cấp bởi thuật toán.

Thuật toán là gì? Thuật toán có những tính chất nào?
RankBrain là một thuật toán công cụ tìm kiếm dựa trên máy học, giúp Google xử lý kết quả tìm kiếm và cung cấp kết quả tìm kiếm phù hợp hơn cho người dùng.

Ngày nay, các thuật toán được sử dụng hàng tỷ lần mỗi ngày cho nhiều nhiệm vụ khác nhau. Dưới đây là một số cách thuật toán khác nhau được sử dụng.

  • Thuật toán giúp điều khiển đèn giao thông.
  • Máy tính sử dụng các thuật toán để chuyển đổi dữ liệu (ví dụ: chuyển đổi số thập phân thành nhị phân ).
  • Tìm kiếm của Google sử dụng thuật toán Pagerank, RankBrain, … để sắp xếp các kết quả được tìm kiếm.
  • Mã hóa dữ liệu và giải mã thông tin và giữ an toàn cho dữ liệu là một thuật toán.
  • GPS sử dụng các thuật toán tìm kiếm đồ thị để tìm đường tốt nhất đến một điểm đến.
  • Điện thoại thông minh, Wi Fi và giao tiếp không dây sử dụng các thuật toán để giao tiếp.
  • Phát hiện thư rác e-mail sử dụng các thuật toán để lọc ra những e-mail xấu.
  • Nén dữ liệu để nhận thông tin nhanh hơn (ví dụ: video của YouTube) sử dụng các thuật toán.

Thuật toán đầu tiên ra đời khi nào?

Bởi vì một công thức nấu ăn có thể được coi là một thuật toán, thuật toán đầu tiên có thể quay ngược lại với ngôn ngữ viết. Tuy nhiên, nhiều người nhận thấy thuật toán Euclid tìm ước số chung lớn nhất là thuật toán đầu tiên. Thuật toán này được mô tả lần đầu tiên vào năm 300 trước Công nguyên

Ada Lovelace được ghi nhận là lập trình viên máy tính đầu tiên và là người đầu tiên phát triển thuật toán cho máy.

Biểu diễn thuật toán như thế nào?

Lưu đồ (Flowchart) là một biểu diễn đồ họa của một thuật toán. Các lập trình viên thường sử dụng lưu đồ như một công cụ lập kế hoạch chương trình để giải quyết một vấn đề.

Thuật toán là gì? Thuật toán có những tính chất nào?
Lưu đồ các bước của thuật toán giải phương trình

Lưu đồ sử dụng các ký hiệu được kết nối giữa chúng để chỉ ra luồng thông tin và quá trình xử lý. Quá trình vẽ một lưu đồ cho một thuật toán được gọi là “lưu lượng”.

25 thuật toán hàng đầu mà mọi lập trình viên nên biết

Kiến thức tốt về các thuật toán tiêu chuẩn cũng quan trọng không kém việc lựa chọn cấu trúc dữ liệu phù hợp. Sau đây là danh sách 25 thuật toán hàng đầu mà mọi lập trình viên và sinh viên khoa học máy tính nên biết.

  1. Thuật toán tìm kiếm nhị phân
  2. Thuật toán tìm kiếm đầu tiên theo chiều rộng (BFS)
  3. Thuật toán tìm kiếm đầu tiên theo chiều sâu (DFS)
  4. Thuật toán Sắp xếp Hợp nhất
  5. Thuật toán Quicksort
  6. Thuật toán Kruskal
  7. Thuật toán Floyd Warshall
  8. Thuật toán Dijkstra
  9. Thuật toán Bellman Ford
  10. Thuật toán Kadane
  11. Thuật toán Lee
  12. Thuật toán lấp đầy lũ
  13. Thuật toán phát hiện chu kỳ của Floyd
  14. Thuật toán tìm Union
  15. Thuật toán sắp xếp tôpô
  16. Thuật toán KMP
  17. Thuật toán sắp xếp chèn
  18. Thuật toán sắp xếp lựa chọn
  19. Thuật toán sắp xếp đếm
  20. Thuật toán sắp xếp đống
  21. Thuật toán Kahn’s Topological Sort
  22. Thuật toán nén mã hóa Huffman
  23. Thuật toán chọn nhanh
  24. Thuật toán bỏ phiếu cho đa số Boyer – Moore
  25. Thuật toán Euclid

Video về thuật toán là gì?

https://www.youtube.com/watch?v=MvUeOEBpN0M

Kết luận

Hy vọng bài toán trên đây giúp bạn hiểu thuật toán là gì cùng với những thông tin liên quan, để xác định mục tiêu cho bản thân. Chúc các bạn thành công!

Đăng bởi: THPT Ngô Thì Nhậm

Chuyên mục: Tổng hợp

thuật toán là gì? Thuật toán có tính chất, vai trò, phân loại ra sao?

Thuật toán – một thuật ngữ nghe quen thuộc trong kỹ thuật, trong cuộc sống, đặc biệt là trong lĩnh vực công nghệ khoa học. Khái niệm thuật toán là gì? Thuật toán có tính chất, vai trò, phân loại ra sao? Những thông tin trong bài viết sau đây của trường THPT Ngô Thì Nhậm sẽ giúp bạn hiểu rõ hơn nhé! Thuật toán là gì? Thuật toán là gì? Học thuật toán làm quái gì? Thuật toán hay giải thuật (tiếng anh là Algorithm) có khá nhiều định nghĩa phức tạp. Bạn có thể đọc ở nhiều nguồn để hiểu thêm về nó. Cá nhân tôi định nghĩa dễ hiểu rằng, thuật toán là “thuật” (phương pháp) để giải quyết 1 bài toán. Nói dễ hiểu hơn, mỗi một bài toán giống như một chiếc hòm chứa đựng kho báu (kết quả, đáp án), và chiếc chìa khoá để mở cái hòm đó chính là “giải thuật”. Nếu dùng sai chìa khoá, bạn vẫn có thể mở được hòm, nhưng mà sẽ mất nhiều thời gian, hoặc mở được hòm thì kho báu ở bên trong bị méo mó, không toàn vẹn. Sử dụng đúng chìa khoá, sẽ giúp bạn lấy được kho báu 1 cách dễ dàng, nhanh chóng. Tất nhiên mỗi chiếc hòm sẽ luôn cần loại chìa khoá khác nhau, giống như một bài toán luôn có những giải thuật xác định. Không có chiếc chìa khoá nào mở được tất cả các hòm, cũng như không có giải thuật nào giải được toàn bộ các bài toán. Thuật toán thực ra cũng đơn giản, không phải cái gì đó phức tạp. Nó là những phương pháp, những cách mà người ta yêu cầu mình làm đúng theo những quy trình như vậy thì nó sẽ ra được kết quả tối ưu. Phương pháp này có thể đến từ nhiều nguồn khác nhau, có thể là một nhà khoa học họ sáng chế ra, cũng có thể là một nhóm người nào đó hoặc kinh nghiệm truyền nhiều năm, khi mà mình áp dụng đúng quy cách như vậy thì mình sẽ có những kết quả tốt hơn là những cái gì đó mình tự làm. Thuật toán khác gì với cách lập trình thông thường? Nếu không biết về thuật toán thì có thể lập trình được không? Top 10 thuật toán dành cho lập trình viên mới nhất Bạn không biết thuật toán, bạn vẫn có thể lập trình và cũng có thể lập trình giỏi, tuy nhiên nếu bạn biết thuật toán bạn sẽ có thêm những phương pháp hay hơn. Tôi ví dụ thuật toán đơn giản như vậy, tôi cho bạn dãy số, và tôi yêu cầu bạn hãy tìm một con số mà tôi đưa có nằm trong dãy số đó không? Nếu như bạn không học thuật toán thì rất đơn giản, bạn cứ so sánh mỗi số một lần miễn sao bạn tìm được con số có nằm trong dãy số này hay không. Còn người khi học thuật toán, họ sẽ nghĩ khác, thứ nhất họ sẽ nghĩ những con số mà người ta đưa ra liệu nó có lớn hay không, tại vì nếu như người ta đưa lớn quá sẽ gây hiện tượng tràn số và nếu như mình phải làm thêm thao tác cộng, trừ, nhân, chia. Số lượng người ta đưa ra bao nhiêu cũng ảnh hưởng đến việc sử dụng thuật toán, ví dụ người ta đưa ra 10 số, 20 số thì làm dễ, còn người ta đưa 1 tỷ số hoặc 10 tỷ số thì việc tìm kiếm đó nó rất không khả thi nếu mình tìm bình thường, như vậy thì mình phải áp dụng thêm thuật toán vào, bằng cách mình có thể sắp xếp trước những con số đó lại và khi mình sắp xếp như vậy thì mình sẽ tốn thời gian cho việc sắp xếp đó nhưng sau đó mình tìm kiếm rất là nhanh. Cuối cùng thời gian tìm kiếm rất là nhanh, dù là 1 tỷ số hay 10 tỷ số thì tìm kiếm trong vòng 1s cũng ra kết quả được. Còn nếu mình không áp dụng thuật toán, mình cứ làm hoài, cứ so sánh hoài, rồi khi người ta tăng lên thì thời gian chạy rất là lâu. Tại sao cần dùng thuật toán? Thuật toán là gì? Tính chất, Vai trò và Cách phân loại thuật toán Lập trình chính là để yêu cầu, chỉ thị máy thực hiện, giải quyết 1 công việc, bài toán cụ thể nào đó của cuộc sống. Mỗi bài toán thực tế sẽ có cách giải quyết khác nhau. Am hiểu và sử dụng đúng thuật toán, sẽ giúp bạn giải quyết một cách dễ dàng, cùng với độ chính xác cao trong thời gian ngắn nhất. Bỏ qua thuật toán sắp xếp các số trong dãy số nguyên hay thuật toán tìm số nguyên tố đi nhé, bài đó chỉ dùng để học và minh hoạ về thuật toán thôi. Ở đây, mình muốn giới thiệu với các bạn những thuật toán có tính ứng dụng khá lớn trong các sản phẩm/hệ thống phần mềm hiện tại nhé: Đầu tiên là thuật toán tìm đường đi ngắn nhất. Đại khái cho bạn một danh sách các đường đi giữa các địa điểm, hãy tìm đường đi ngắn nhất (về khoảng cách) hoặc chi phí tối thiểu khi đi từ điểm X đến điểm Y. Bạn biết thuật toán này dùng ở đâu rồi chứ? Hiện tại tôi nghĩ, bạn có thể sẽ biết nó xuất hiện trong các phần mềm chỉ đường và ứng dụng liên quan tới ngành giao thông vận tải (ví dụ google map, grab, uber, giao hàng nhanh, ….), nhưng bạn có biết nó còn dùng ở đâu nữa không? Xin nói với các bạn rằng, trong các hệ thống mạng, viễn thông người ta cũng dùng thuật toán này để định hướng đường truyền và tín hiệu. Cuộc điện thoại từ 1 người ở thành phố Hà Nội gọi cho 1 người ở thành phố Hồ Chí Minh đi qua các cột thu phát sóng, dữ liệu internet từ máy tính của bạn đi tới máy chủ của nhà cung cấp mạng cũng phải sử dụng thuật toán này để đạt được tốc độ tối đa. Tiếp theo, một thuật toán khá nổi tiếng khác là thuật toán tìm kiếm. Bạn có thể nhìn thấy nó ở khá nhiều sản phẩm phần mềm hiện tại, điển hình như Google. Bạn có thể nghĩ rằng, tìm kiếm khá là đơn giản, khi bạn lần lượt soi vào từng ô, từng dòng dữ liệu xem có thứ mà mình tìm kiếm hay không? Nhưng hãy đặt địa vị, bạn có hàng tỷ tỷ món đồ dùng được vứt lộn xộn trong 1 căn nhà, bạn sẽ mất bao nhiêu lâu để tìm được món đồ mà bạn mong muốn. Hãy biết chắc chắn rằng, việc Google trả ra được kết quả mà bạn yêu cầu tìm kiếm trong vòng 1 vài giây là vô cùng khó. Điều ấy yêu cầu 1 thuật toán cực mạnh, và vẫn liên tục cần cải tiến cho đến ngày hôm nay. Các thuật toán mã hoá được sử dụng để mã hoá thông tin, được sử dụng nhiều trong việc truyền nhận và lưu trữ giữ liệu, giúp bảo vệ thông tin cá nhân và tổ chức khỏi các cuộc tấn công hay khai thác. Bỏ qua những thuật toán cao siêu như bên trên vì bạn ít có cơ hội làm những sản phẩm như vậy, trong quá trình làm phần mềm, bạn cũng có thể sẽ gặp các bài toán hay vấn đề nhỏ yêu cầu bạn phải chọn đúng giải thuật để giải, ví dụ như: Hãy tìm kiếm 1 cái máy tính có giá từ X->Y, đáp ứng tối đa các tiêu chí của người dùng chỉ trong 1 cái click chuột Hãy đưa ra các bài viết hoặc sản phẩm mà người dùng quan tâm dựa trên lịch sử truy cập của họ Khi bạn lập trình đủ lâu và đủ nhiều, tôi nghĩ chắc chắn bạn sẽ gặp nhiều bài toán khó hơn tôi. Trong quá trình phát triển sản phẩm CodeLearn, tôi và những đồng đội cũng đôi lúc phải giải quyết những bài toán kiểu như thế này: Hãy tính toán và sắp xếp thứ hạng của người dùng dựa trên lịch sử học và làm bài Đếm số lượng truy cập của người dùng trong 1 khoảng thời gian để dự đoán tấn công Đưa ra gợi ý các bài tập mà người dùng nên làm dựa vào lịch sử truy cập và thao tác của họ trên hệ thống Tất nhiên những bài toán trên là không khó với tập dữ liệu và người dùng nhỏ. Nhưng hãy thử tưởng tượng, khi hệ thống có hàng nghìn hàng vạn người cùng truy cập và bạn phải trả về kết quả là cực kì nhanh, bạn sẽ làm như thế nào để đảm bảo điều đó? Thực tế đã trả lời chúng tôi rằng, khi chọn đúng giải thuật, tốc độ xử lí có thể tăng lên từ hàng chục tới hàng trăm lần. Và tôi nghĩ rằng, một ngày nào đó, chúng tôi vẫn sẽ phải nâng cấp thuật toán để giải quyết bài toán với lượng dữ liệu và người dùng lớn hơn. Phân loại thuật toán cac-loai-thuat-toan Các loại thuật toán Dựa vào nhiều tiêu chí đa dạng khác nhau, thuật toán được phân chia thành nhiều loại, nhiều yếu tố, cụ thể như sau: Phân loại theo tính năng Đối với việc phân chia dựa vào tính năng, thuật toán được phân chia thành các loại cơ bản sau: Thuật toán tìm kiếm: là loại thuật toán áp dụng để tìm kiếm các dữ liệu, thông tin trong 1 tập hợp và bao gồm các phân tử khác nhau. Thuật toán sắp xếp được biết đến để sắp xếp các thứ tự trong từng phân tử của 1 tập hợp theo cách khoa học, đáp ứng được yêu cầu logic. Thuật toán đồ thị là dạng thuật toán sử dụng để xử lý các vấn đề liên quan đến bài có sử dụng đồ thị. Phân loại theo cách thức thực hiện Cách phân loại thứ hai đó là theo cách thức thực hiện. Cách phân loại này chia thuật toán thành 2 loại chính đó là: Thuật toán chia để trị: nói cách dễ hiểu hơn, nó sẽ chia bài toán lớn thành các phần nhỏ, chia vấn đề lớn thành những vấn đề nhỏ để xử lý và giải quyết dần. Thuật toán tham lam: Đây là dạng thuật toán thay đổi trạng thái của bài toán thông qua những hành động cụ thể. Nó giúp người giải quyết có thể tiếp cận vấn đè từ từ để tìm ra hướng giải quyết nhanh chóng và hiệu quả hơn. Đó là những loại thuật toán cơ bản được chia theo từng tiêu chí riêng mà chúng ta có thể tham khảo. Tính chất của thuật toán tinh-chat-cua-thuat-toan Tính chất của thuật toán Thuật toán có những tính chất nào? Đâu là đặc trưng tiêu biểu cơ bản của thuật toán? Thuật toán có 5 tính chất cơ bản sau đây: Tính chính xác Tính chính xác là tính chất tiêu biểu, đầu tiên khi nhắc đến thuật toán. Nó là một trong những yếu tố quan trọng hàng đầu đảm bảo kết quả cũng như thao tác thực hiện chính xác, hiệu quả và khả thi hơn trong các bài toán và công thức. Tính rõ ràng minh bạch Tính chất thứ 2 của thuật toán là sự rõ ràng, minh bạch. Tính chất này được thực hiện trên nguyên tắc lệnh. Các câu lệnh trong thuật toán đưa ra rõ ràng, dễ hiểu và được sắp xếp theo trình tự nhất định. Tính khách quan Tính khách quan là đặc trưng của thuật toán, bởi nó được thực hiện bởi hệ thống máy tính hay con người cũng đều phải đưa ra kết quả giống nhau, duy nhất, chỉ 1 kết quả. Kết quả sẽ được đưa ra bởi 2 phương pháp này không tương đồng thì cần xem xét lại bởi điều đó chứng tỏ thuật toán sai hoặc vô lý. Tính phổ dụng Tính phổ dụng cũng là đặc trưng tiêu biểu của thuật toán, nó đòi hỏi tính ứng dụng cao. Nó không chỉ dùng để giải quyết duy nhất 1 bài toán mà còn có khả năng giải quyết được những bài toán tương tự. Tính kết thúc Thuật toán nhất định không thể thiếu tính kết thúc. Bởi nó là tập hợp hữu hạn vì thế, luôn có điểm kết thúc, điểm kết thúc chính là kết quả đã tìm ra phù hợp. Các thuật toán được sử dụng ở đâu trong cuộc sống thực? Từ ‘thuật toán‘ thoạt nghe có vẻ đáng sợ, nhưng nó thực sự là một khái niệm đơn giản. Mọi người sử dụng thuật toán mọi lúc trong thói quen hàng ngày của họ để hoàn thành công việc, chẳng hạn như pha cà phê hoặc soạn thảo văn bản. Các thuật toán nằm ở trung tâm của máy tính. Nếu quan sát môi trường xung quanh, chúng ta có thể tìm thấy một số thuật toán đang hoạt động để giải quyết các vấn đề trong cuộc sống hàng ngày của chúng ta: Mạng truyền thông xã hội, ứng dụng GPS, bộ máy tìm kiếm của Google, nền tảng thương mại điện tử, hệ thống đề xuất của YouTube hoặc Netflix, v.v. các ứng dụng được cung cấp bởi thuật toán. Thuật toán là gì? Thuật toán có những tính chất nào? RankBrain là một thuật toán công cụ tìm kiếm dựa trên máy học, giúp Google xử lý kết quả tìm kiếm và cung cấp kết quả tìm kiếm phù hợp hơn cho người dùng. Ngày nay, các thuật toán được sử dụng hàng tỷ lần mỗi ngày cho nhiều nhiệm vụ khác nhau. Dưới đây là một số cách thuật toán khác nhau được sử dụng. Thuật toán giúp điều khiển đèn giao thông. Máy tính sử dụng các thuật toán để chuyển đổi dữ liệu (ví dụ: chuyển đổi số thập phân thành nhị phân ). Tìm kiếm của Google sử dụng thuật toán Pagerank, RankBrain, … để sắp xếp các kết quả được tìm kiếm. Mã hóa dữ liệu và giải mã thông tin và giữ an toàn cho dữ liệu là một thuật toán. GPS sử dụng các thuật toán tìm kiếm đồ thị để tìm đường tốt nhất đến một điểm đến. Điện thoại thông minh, Wi Fi và giao tiếp không dây sử dụng các thuật toán để giao tiếp. Phát hiện thư rác e-mail sử dụng các thuật toán để lọc ra những e-mail xấu. Nén dữ liệu để nhận thông tin nhanh hơn (ví dụ: video của YouTube) sử dụng các thuật toán. Thuật toán đầu tiên ra đời khi nào? Bởi vì một công thức nấu ăn có thể được coi là một thuật toán, thuật toán đầu tiên có thể quay ngược lại với ngôn ngữ viết. Tuy nhiên, nhiều người nhận thấy thuật toán Euclid tìm ước số chung lớn nhất là thuật toán đầu tiên. Thuật toán này được mô tả lần đầu tiên vào năm 300 trước Công nguyên Ada Lovelace được ghi nhận là lập trình viên máy tính đầu tiên và là người đầu tiên phát triển thuật toán cho máy. Biểu diễn thuật toán như thế nào? Lưu đồ (Flowchart) là một biểu diễn đồ họa của một thuật toán. Các lập trình viên thường sử dụng lưu đồ như một công cụ lập kế hoạch chương trình để giải quyết một vấn đề. Thuật toán là gì? Thuật toán có những tính chất nào? Lưu đồ các bước của thuật toán giải phương trình Lưu đồ sử dụng các ký hiệu được kết nối giữa chúng để chỉ ra luồng thông tin và quá trình xử lý. Quá trình vẽ một lưu đồ cho một thuật toán được gọi là “lưu lượng”. 25 thuật toán hàng đầu mà mọi lập trình viên nên biết Kiến thức tốt về các thuật toán tiêu chuẩn cũng quan trọng không kém việc lựa chọn cấu trúc dữ liệu phù hợp. Sau đây là danh sách 25 thuật toán hàng đầu mà mọi lập trình viên và sinh viên khoa học máy tính nên biết. Thuật toán tìm kiếm nhị phân Thuật toán tìm kiếm đầu tiên theo chiều rộng (BFS) Thuật toán tìm kiếm đầu tiên theo chiều sâu (DFS) Thuật toán Sắp xếp Hợp nhất Thuật toán Quicksort Thuật toán Kruskal Thuật toán Floyd Warshall Thuật toán Dijkstra Thuật toán Bellman Ford Thuật toán Kadane Thuật toán Lee Thuật toán lấp đầy lũ Thuật toán phát hiện chu kỳ của Floyd Thuật toán tìm Union Thuật toán sắp xếp tôpô Thuật toán KMP Thuật toán sắp xếp chèn Thuật toán sắp xếp lựa chọn Thuật toán sắp xếp đếm Thuật toán sắp xếp đống Thuật toán Kahn’s Topological Sort Thuật toán nén mã hóa Huffman Thuật toán chọn nhanh Thuật toán bỏ phiếu cho đa số Boyer – Moore Thuật toán Euclid Video về thuật toán là gì? Kết luận Hy vọng bài toán trên đây giúp bạn hiểu thuật toán là gì cùng với những thông tin liên quan, để xác định mục tiêu cho bản thân. Chúc các bạn thành công!

Nội dung bài viết được đăng tải bởi thầy cô trường thpt Ngô Thì Nhậm (trước đây là trường trung học phổ thông Sóc Trăng). Cấm sao chép dưới mọi hình thức.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button