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.
Thuật toán có quan trọng hay không? (Dành cho cả sinh viên và người đi làm)
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 :
DS: https://blog.luyencode.net/cau-truc-du-lieu/
Algo: https://blog.luyencode.net/thuat-toan/
Các tài liệu bổ sung:
- Giải thuật và lập trình - thầy Lê Minh Hoàng
- Introduction to Algorithms - bản tiếng Việt
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!
Đạ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
Anh Đạt ôn và luyện Algorithm theo nguồn nào vậy anh?
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
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…
my idol khi nào ra vlog về thuật toán anh ơi …
Để 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 ạ
Em cần chuẩn bị thời gian và quyết tâm
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.
@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.
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
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.
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ó
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!
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à