Thuật toán có quan trọng hay không? (Dành cho cả sinh viên và người đi làm)

Em hiểu rồi.
Cảm ơn anh đã giải thích cặn kẽ và những lời khuyên của anh.

Nhân tiện ở post này, em xin phép anh Đạt được chia sẻ hướng học CTDL & GT cho bạn nào quan tâm.

Cấu trúc dữ liệu

  • Beginner: Linked List, Stack, Queue, Binary Search Tree.

  • Intermediate: Heap, Priority Queue, Huffman Tree, Union Find, Tries, Hash Table, Tree Map.

  • Proficient: Segment Tree, Binary Indexed Tree, Suffix Array, Sparse Table, Lowest Common Ancestor, Range Tree.

  • Expert: Suffix Automaton, Suffix Tree, Heavy-Light Decomposition, Treap, Aho-Corasick, K-d tree, Link-Cut Tree, Splay Tree, Palindromic Tree, Rope, Dancing Links, Radix Tree, Dynamic Suffix Array.

Giải thuật/ thuật toán

  • Searching(Linear search, Binary search, Ternary search)
  • Sorting (Bubble sort, Insertion sort, Merge sort, Quick sort, Radix sort, …)
  • Các giải thuật tham lam
  • Giải thuật đồ thị(BFS, DFS, Luồng cực đại, Cây khung nhỏ nhất, Đường đi ngắn nhất,…)
  • Giải thuật string(KMP, Z, String search, …)
  • Quy hoạch động

Các bạn có thể tham khảo nguồn hướng dẫn + thực hành luôn ở đây
DS: https://www.hackerearth.com/practice/data-structures
Algo: https://www.hackerearth.com/practice/algorithms

DS & Algo: https://www.geeksforgeeks.org/

Lộ trình học CTDL & GT phục vụ ôn thi ACM/ICPC, nhưng ai cũng có thể follow: https://github.com/Hieunv1996/ACM-ICPC-Preparation

Nếu bạn muốn đọc tiếng Việt thì có thể tham khảo 2 series của mình, mình vẫn đang viết tiếp :smiley: :
DS: https://blog.luyencode.net/cau-truc-du-lieu/
Algo: https://blog.luyencode.net/thuat-toan/

Các tài liệu bổ sung:

19 Likes

Em cảm ơn anh ạ. Hóa ra LinkdIn hay ho vậy mà em chả bao giờ dùng

Dạ, em mới làm được có hơn 30 bài thôi ạ!

vậy thêm tầm 270 bài nữa là tuyệt vời!

1 Like

Đạt nói đúng rồi,
Cách đây hơn 2 tháng rất ngạc nhiên là mình được Recruiter của Google APAC ( Asian Pacific ) gọi mời phỏng vấn cũng thông qua Linkedin họ bảo tìm và thấy Skill là cái họ đang cần cho chi nhánh ở Đài Bắc.
Thú thật mình là người làm our source lâu nay nên về thuật toán hết sức mai một. Nên khi được mời phỏng vấn minh vui nhưng hết sức không tự tin mặc dù là người mê lập trình. Và cungx thực hành nhiều về thuật toán khi còn là sinh viên. Nhưng 5 6 năm rồi không có đụng tới.
Mình bỏ ra 2 tuần (có lẽ không đủ) để ôn lại và làm thêm về thuật toán cộng với Practice Interview trên https://www.pramp.com/#/
Mình failed ở vòng thứ 2 với 1 bài toán khá đơn giản về cây nhị phân nhưng cũng rất vui vì ít ra profile của mình cũng được họ chú ý tới bằng cách nào đấy.
Về thuật toán đặc biệt các bạn là học sinh giỏi Tin hoặc chuyên tin từ lớp 12 thì mình có lời khuyên là hãy tiếp tục duy trì và phát huy nó rèn luyện từng ngày đừng để mai một như mình.
Theo mình không phải ai cũng có tốt chất giỏi thuật toán… nên không phải cứ học là giỏi. Nhưng cần cù bù thông minh tuy không giỏi nhưng sẽ giúp bạn rất nhiều đặc biệt nếu bạn muốn xuất ngoại làm cho những công ty tốt.
Chúc các bạn thành công

11 Likes

Anh Đạt ôn và luyện Algorithm theo nguồn nào vậy anh? :smiley:

3 Likes

Anh ôn cơ bản từ nhiều nguồn

  • Từ bạn bè
  • Từ document online

Nhưng chủ yếu nhất vẫn là Leetcode + một nhóm bạn cùng tiến :smiley:

5 Likes

Thuật toán nó là phương pháp giải quyết vấn đề.
Không có thuật toán tốt thì:
Không giải quyết được vấn đề->không viết được chương trình.
Giải quyết được nhưng không tối ưu-> chương trình chạy chậm, viết mất nhiều code, tốn nhiều thời gian…

3 Likes

my idol khi nào ra vlog về thuật toán anh ơi …:smiley:

Để có thể học tốt thuật toán thì mình cần phải chuẩn bị những gì ạ? Muốn nắm vững thuật toán phải có kiến thức về Toán và Đại số tốt đúng không ạ? Em vẫn chưa được học môn này, mong các anh giải đáp ạ

1 Like

Em cần chuẩn bị thời gian và quyết tâm :smiley:

Không hẳn, phần lớn các thuật toán không cần dùng toán và đại số. Chủ yếu là mình phải có kiến thức cơ bản về ngôn ngữ lập trình, các kiểu dữ liệu, đệ quy, … là ổn rồi.

Mà nhanh nhất là em cứ lên Leetcode tìm mấy bài dễ dễ làm trước là được.

5 Likes

@Quang.Andrei Chào bạn, nếu bạn muốn chuyên sâu về các lĩnh vực đặc trưng như Computer Graphics, Data Science,… thì kiến thức Đại số là cần thiết nhé bạn.
Bạn có biết người ta gọi “Toán học là ngôn ngữ của vũ trụ” (có thể hiểu là ngôn ngữ của Chúa). Nếu bạn muốn trở thành thần thì nên học ngôn ngữ của Chúa.

1 Like

Hi anh
Em thấy anh có nói có một người bạn tốt chỉ anh cách học thuật toán hiệu quả. Anh có thể chia sẻ cách của bạn đó không ạ?

Bạn anh không chỉ anh cách học hiệu quả, chỉ hướng dẫn anh giải bài thôi :slight_smile:

3 Likes

Mình đang làm các video hướng dẫn giải thuật ở đây, hi vọng có thể giúp đỡ các bạn luyện giải thuật.

6 Likes

Giải thuật tham lam thì dev có áp dụng nhiều không ạ

Nếu cậu làm ở domain gặp nhiều vấn đề cần giải thuật đó để giải quyết, thì có :smile:
Cơ mà giải thuật đó là giải thuật cơ bản, do đó, cậu nên học kỹ nó, để tới lúc khi cậu gặp vấn đề, cậu có hướng để xây dựng giải pháp.

Hope it helps!

1 Like

Thấy bài viết này cũng hay mặc dù cách đây cũng 3 năm rồi, mình thì thấy có mấy công ty nó cũng hỏi thuật toán khi đi phỏng vấn nhưng mấy câu hỏi đó quá dễ (chả khác gì lập trình cơ bản) so với các problems trên Codeforce, leetcode và Hacker Rank… Thay vào đó họ lại hỏi nhiều hơn vào công nghệ, oop, và cách tổ chức code v…v. Tôi thì thích học thuật toán hơn mà mấy cái thứ linh tinh khác.

Quá oke luôn. Giải thuật hay ác mà

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?