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

Tôi là một lập trình viên có trên 15 năm kinh nghiệm tay nghề. các năm tiên phong ( từ cấp 3 ), tôi học và làm nhiều về thuật toán. Cho đến cả khi ra trường, tôi cũng luôn nghiên cứu và điều tra và có đam mê với nó. Đồ án tốt nghiệp của tôi mang tính học thuật khá nhiều : “ Xây dựng quy mô ngôn từ cho tiếng Việt ”. Ra trường, tôi nung nấu dự tính đi du học và theo con đường nghiên cứu và điều tra. Tuy nhiên, sau quãng thời hạn đi làm 1 năm, tôi thấy thích làm loại sản phẩm / ứng dụng hơn là điều tra và nghiên cứu. Tôi chuyển hướng học về công nghệ tiên tiến, kĩ thuật hơn là thuật toán. Nói như vậy để bạn hiểu rằng, hiện tại tôi không còn là Fan Hâm mộ hay thần thánh hoá thuật toán nữa. Tuy nhiên, cá thể tôi cho rằng, thuật toán vẫn là thứ gì đó khá quan trọng vs đối lập trình viên. Sau này lúc đi dạy học hay xu thế san sẻ với các lập trình viên trẻ, cũng có khá nhiều người hỏi tôi có cần học giải thuật / thuật toán hay không ? Câu vấn đáp của tôi luôn luôn là có. Vì sao ?

Thuật toán là gì vậy?

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 hoàn toàn có khả năng đọ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 ” ( giải pháp ) để xử lý 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 tiềm ẩn kho tàng ( hiệu 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 hoàn toàn có khả năng mở được hòm, nhưng mà sẽ mất nhiều thời hạn, hoặc mở được hòm thì kho tàng ở bên trong bị méo mó, không toàn vẹn. Sử dụng đúng chìa khoá, sẽ hỗ trợ bạn lấy được kho tàng 1 phương pháp thuận tiện, nhanh gọn. 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ó các giải thuật xác lập. Không có chiếc chìa khoá nào mở được tổng thể các hòm, cũng như không có giải thuật nào giải được hàng loạt các bài toán .

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

Bạn đang đọc: Thuật toán là gì vậy? Học thuật toán làm quái gì?

Lập trình chính là để nhu yếu, thông tư máy thực thi, xử lý 1 việc làm, bài toán đơn cử nào đó của đời sống. Mỗi bài toán trong thực tiễn sẽ có phương pháp xử lý khác nhau. Am hiểu và sử dụng đúng thuật toán, sẽ hỗ trợ bạn xử lý một phương pháp thuận tiện, cùng với độ đúng chuẩn cao trong thời hạn 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 trình làng với các bạn các thuật toán có tính ứng dụng khá lớn trong các loại sản phẩm / mạng lưới hệ thống ứng dụng 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 phương pháp) 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ó khả năng 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ó khả năng 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ó khả năng 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, hỗ trợ 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 các thuật toán cao siêu như bên trên vì bạn ít có cơ hội làm các sản phẩm như vậy, trong quá trình làm phần mềm, bạn cũng có khả năng 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ư:

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

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ộtHã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à các đồng đội cũng đôi lúc phải giải quyết các 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 các 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 mạng lưới hệ thống có hàng nghìn hàng vạn người cùng truy vấn và bạn phải trả về tác dụng là cực kỳ nhanh, bạn sẽ làm như thế nào để bảo vệ điều đó ? Thực tế đã vấn đáp chúng tôi rằng, khi chọn đúng giải thuật, vận tốc xử lí hoàn toàn có khả năng 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 tăng cấp thuật toán để xử lý bài toán với lượng tài liệu và người dùng lớn hơn .

Và không học thuật toán được không?

Không phải là 1 Fan Hâm mộ của thuật toán, không thần thánh hoá thuật toán, n
ên tôi nghĩ rằng không học thuật toán vẫn làm được thậm chí còn làm tốt ứng dụng. Nếu các bạn không làm các bài toán có độ phức tạp cao, có tài liệu người dùng lớn, cần phải ra đáp án nhanh với độ đúng chuẩn cao, tôi nghĩ bạn vẫn hoàn toàn có khả năng xử lý được nhân tố với vốn thuật toán hạn chế. Hay ví dụ nếu bạn làm 1 website đa phần là nội dung, nếu bạn làm 1 ứng dụng điện thoại cảm ứng chỉ xử lí các logic thường thì, thuật toán không hỗ trợ ích nhiều cho bạn trong trường hợp ấy. Kể cả khi bạn làm các mẫu sản phẩm rất lớn, sử dụng các công nghệ tiên tiến rất mới và hot như AI, BigData hay Blockchain, dù không thành thạo thuật toán nào cả, bạn vẫn thiết kế xây dựng đc mạng lưới hệ thống. Trong trường hợp này, bạn chỉ cần hiểu rõ phương pháp sử dụng và ứng dụng của công nghệ tiên tiến, chứ không cần nằm hay hiểu rõ thuật toán bên trong công nghệ tiên tiến ấy .

Đặc biệt là, với 1 số phần mềm đơn giản có yêu cầu hay thay đổi, dẫn đến việc thay đổi code liên tục. Lúc này, thuật toán hay, code chạy nhanh không quan trọng bằng việc hiểu đúng yêu, tổ chức dữ liệu, thiết kế cấu trúc code, viết code sao cho dễ đọc, dễ hiểu và dễ bảo trì.

Tổng giám đốc điều hành – Wikipedia tiếng Việt

Rốt cuộc thì thuật toán quan trọng hay không?

Có 1 thực sự rằng, đa số các mẫu sản phẩm ứng dụng thời nay thành công xuất sắc mà không cần hay sử dụng rất ít thuật toán bên trong nó. Tuy nhiên các loại sản phẩm có hàm lượng thuật toán cao, trí tuệ lớn, thật sự tạo ra sự độc lạ và thành công xuất sắc lớn hơn các loại sản phẩm thông thường. Sản phẩm như Google thành công xuất sắc vì có thuật toán tìm kiếm can đảm và mạnh mẽ bậc nhất quốc tế. Sản phẩm như Facebook hay Youtube cũng phải sử dụng nhiều thuật toán như tìm kiếm, gợi ý người dùng, gợi ý nội dung, … Nhưng thuật toán lại không phải nhân tố cốt lõi quyết định hành động thành công xuất sắc của loại sản phẩm này. Do đó, việc học thuật toán, sự quan trọng của thuật toán phụ thuộc vào vào loại sản phẩm, ứng dụng mà bạn làm. Dù có giỏi hay không giỏi thuật toán, bạn vẫn hoàn toàn có khả năng thành công xuất sắc nếu vận dụng đúng kiến thức và kỹ năng, hiểu biết của mình vào nghành mà bạn làm. Cá nhân tôi luôn khuyên và nhắn nhủ các bạn lập trình viên hãy luôn học và rèn luyện thuật toán. Với tôi, thuật toán hỗ trợ bạn rèn luyện tư duy xử lý nhân tố, cùng với tâm lý về việc luôn tối ưu và làm loại sản phẩm một phương pháp tối ưu và tổng quát. Có các lúc, thực sự bế tắc trong việc làm ( không chỉ là lập trình ), tôi vẫn thường vào làm 1 số bài tập thuật toán để khai thông và thôi thúc sự tâm lý. Sau đó tôi thấy mình minh mẫn và xử lý việc làm cũ 1 phương pháp thuận tiện hơn .

Học thuật toán từ đâu? Như thế nào?

Nếu bạn học CNTT ở trong trường ĐH, tôi nghĩ bạn nên học tốt môn học này từ các thầy giáo và các bạn đồng trang lứa. Nếu không có điều kiện kèm theo ấy, tôi nghĩ rằng bạn nên tìm kiếm 1 cuốn sách dạy về giải thuật như thể cuốn “ Cấu trúc tài liệu và giải thuật ” của thầy Đinh Mạnh Tường . Nếu bạn giỏi tiếng Anh, hãy tìm kiếm các khoá học cơ bản trên mạng giống như là trang :

https://www.geeksforgeeks.org/fundamentals-of-algorithms/ 

Cùng Tìm Hiểu Các Chức Danh Giám Đốc Trong Công Ty

À ngoài các thì, nếu hoàn toàn có khả năng, hãy thử làm bài tập và học thử các khoá học tương quan tới thuật toán ở đường dẫn : https://hocdauthau.com/Learning/Detail/3477 hay https://hocdauthau.com/Learning/Detail/133067 . Bằng toàn bộ tâm lý cùng đam mê của tôi và tập sự, sẽ nỗ lực hỗ trợ các bạn học tốt thuật toán nếu các bạn cần và hứng thú với nó .

Giới thiệu: Quang Sơn

Quang Sơn là giám đốc hocdauthau.com - Kênh thông tin học đấu thầu, kiến thức tổng hợp, công nghệ, đời sống.

0 Shares
Share
Tweet
Pin