#Topic
1

Giới thiệu về lớp học + cách luyện thuật toán trên Leetcode

Hình thức: Video **Nội dung:** - Giảng viên giới thiệu về lớp học Leetcode, từ nội dung đến cách thức lập trình trên Leetcode. **Chi tiết:** - Giới thiệu về Lớp học Leetcode - Lời chào từ giảng viên - Một số chú ý của lớp học - Ngôn ngữ lập trình chính của khóa học - Hướng dẫn công cụ lập trình - Hướng dẫn làm bài tập - Hướng dẫn sử dụng Leetcode **Bài tập:** Bài tập làm quen với Leetcode.

2

Đào sâu vào phân tích thuật toán

Hình thức: Video

Phân tích thuật toán là một trong những kỹ năng quan trọng để đánh giá tốc độ của dòng code mà chúng ta viết.

Trong bài này chúng ta cùng tìm hiểu khái niệm BigO, cách tìm BigO của một thuật số thuật toán phổ thông.

Chi tiết:

  • Giới thiệu về buổi học BigO
  • Thuật toán và BigO
  • Đào sâu vào phân tích thuật toán
  • O(1)
  • Mối quan hệ tuyến tính
  • Mối quan hệ bậc hai
  • Mối quan hệ Logarit
  • Cách rút gọn BigO
  • Luyện tập đánh giá độ phức tạp
  • Chứng minh công thức BigO
  • Độ phức tạp bài tập Two Sum
3

Chuỗi - String

Hình thức: Video

Chuỗi là một trong những cấu trúc dữ liệu vô cùng quan trọng giúp lưu trữ văn bản.

Trong bài học này chúng ta cùng tìm hiểu cách tiếp cận một bài thuật toán liên quan tới chuỗi.

Chi tiết nội dung:

  • Vì sao xử lý chuỗi quan trọng?
  • Đảo ngược chuỗi sử dụng vòng For
  • Đảo ngược chuỗi sử dụng 2 con trỏ
  • Leetcode 345 - Đảo ngược nguyên âm trong chuỗi
  • Chuỗi Palindrome
  • Khái niệm chuỗi con và dãy con
  • Kỹ thuật đếm

Các dạng bài Leetcode thường gặp:

  • Đảo ngược chuỗi
  • Chuỗi Palindrome
  • Phát hiện nguyên âm
  • Bài toán đếm sử dụng mảng đếm
4

Chữa bài tập phân tích thuật toán

Hình thức: Zoom

Nội dung: Giảng viên giải đáp thắc mắc về bài tập phân tích thuật toán cũng như lý thuyết bài tập chuỗi.

5

Mảng - Array

Mảng trong Python giúp chúng ta lưu trữ nhiều kiểu dữ liệu liền nhau theo thứ tự.

Chi tiết:

  • Giới thiệu về mảng
  • Kỹ thuật sử dụng tổng dồn / tích dồn
  • Ma trận
  • Xoay ma trận với độ phức tạp không gian thêm O(1)

Một số dạng Leetcode hay gặp:

  • Bài tập tìm 2 hoặc 3 phần tử có tổng bằng K cho trước
  • Làm việc với ma trận 2 chiều
  • Các bài toán tổng dồn / tích dồn
  • Bài tập phần tử lặp lại, phần tử biến mất và phép tối ưu sao cho độ phức tạp không gian thấp.
6

Hai con trỏ - Two Pointers

Kỹ thuật 2 con trỏ là một trong những kỹ thuật điển hình để tìm ra mảng con/ chuỗi con thỏa mãn một điều kiện cho trước.

Chi tiết:

  • Giới thiệu kỹ thuật hai con trỏ
  • Cách phát hiện những bài toán có thể áp dụng hai con trỏ
  • Bài toán tìm mảng con có tổng bằng K
  • So sánh thuật toán thường và hai con trỏ

Một số dạng Leetcode hay gặp:

  • Chuỗi con / Mảng con thỏa mãn một điều kiện cho trước
  • Chuỗi con / Mảng con ngắn/ dài nhất thỏa mãn một điều kiện cho trước
7

Chữa bài tập Chuỗi + Mảng

No content
8

Ngăn xếp và Hàng đợi - Stack & Queue

Ngăn xếp có rất nhiều ứng dụng trong tiền xử lý trong trí tuệ nhân tạo.

Các hệ thống chat real time sử dụng hàng đợi để xây dựng cơ chế truyền tải tin nhắn.

Trong bài học này chúng ta cùng rút ra một số quy luật khi gặp dạng bài Leetcode này.

  • Dạng bài kiểm tra chuỗi
  • Dạng bài duỗi / nén chuỗi
  • Dạng bài tìm phần tử trước và sau các phần tử trong mảng thỏa mãn một điều kiện cho trước

Video | Slide | Notebook

9

Đệ quy

Cùng tìm cách học đệ quy một cách dễ hình dung nhất.

Chi tiết:

  • Giới thiệu đệ quy
  • Đệ quy chiều xuôi
  • Đệ quy chiều ngược
  • Quy tắc đệ quy
10

Chữa bài hai con trỏ + ngăn xếp

Chữa các bài tập

  • Hai con trỏ: Leetcode 845 + 3 + 1234
  • Ngăn xếp: Leetcode 856 + 739 + 503
11

Thuật toán sắp xếp - Giải thuật tham lam

Giải thuật tham lam

Đôi khi chúng ta sử dụng giải thuật giam lam trong lập trình mà không hề hay biết.

Ví dụ mua chanh là một trong ví dụ dễ hiệu để mô tả thuật toán này. Khi học xong thuật toán này bạn có thể xử lý được những dạng bài Leetcode như sau:

  • Các bài toán tối ưu sắp xếp công việc và thời gian
  • Các bài tạo chuỗi / mảng theo một điều kiện cho trước

Video | Slide | Notebook

12

Đống - Heap

Heap là một cấu trúc dữ liệu đặc biệt được thiết kế để tối ưu tính toán một số bài toán cụ thể sau.

  • Bài toán tìm K phần tử thỏa mãn một điều kiện với chi phí thấp nhất
  • Bài toán sắp xếp dựa trên trọng số

Video | Slide | Notebook

13

Đồ thị - Graph

Nếu bạn có thắc mắc mạng xã hội làm sao có thể đề xuất bạn chung cho bạn, thì đồ thị chính là một trong những mấu chốt mà bạn cần học.

Trong bài học này chúng ta sẽ cùng sử dụng đồ thị để giải một số bài tập thú vị:

  • Bài tập tìm chủ làng
  • Bài tập trồng hoa

Video | Slide | Notebook

14

Chữa bài đệ quy + sắp xếp + giải thuật tham lam

Chữa bài Leetcode

  • Sắp xếp + tham lam: 1333 + 252 + 56 + 253 + 1710 + 121
15

Thuật toán BFS

Tìm đường ngắn nhất trong đồ thị là một trong những dạng bài tập có rất nhiều câu hỏi Leetcode liên quan.

Khi bạn học kỹ các dạng bài sau bạn sẽ hiểu tường tận được thuật toán này

  • Tìm đường thỏa mãn một điều kiện K cho trước
  • Kiểm tra đường
  • Các bài toán tìm đường trong ma trận

Video | Slide | Notebook

16

Thuật toán DFS

Bên cạnh thuật toán tìm đường ngắn nhất, thuật toán tìm đường DFS hữu ích trong một số bài toán cụ thể khi bạn có thể lợi dụng tính chất của đệ quy để viết code ngắn gọn hơn.

Tuy nhiên để kiểm soát được thuật toán đệ quy cần có một cách tiếp cận chặt chẽ. Bạn sẽ học được kỹ năng đó trong bài học này.

  • Bài toán liên quan đến tìm diện tích một vùng trong ma trận
  • Tìm đường thỏa mãn một điều kiện K cho trước
  • Bài toán kiểm tra chu trình trong đồ thị
  • Dạng bài tô màu đồ thị

Video | Slide | Notebook

17

Chữa bài Heap + Đồ thị

Chữa bài Heap: 692 + 1054 + 767 + 857

Chữa bài đồ thị: 1042

18

Thuật toán Dijkstra

Nếu bạn thắc mắc tính năng tìm đường trên Google Maps đã từng hoạt động như thế nào, thì thuật toán Dijkstra chính là câu trả lời cho bạn.

Video | Slide | Notebook

19

Cấu trúc dữ liệu Union Find

Một cấu trúc dữ liệu giúp ta có thể phân cụm các phần tử có kết nối với nhau trong đồ thị.

Đây là một trong những cấu trúc mạnh mẽ giúp giải quyết nhiều bài toán thú vị bao gồm

  • Bài toán tìm nhóm / kết nối thừa

Video | Slide | Notebook

20

Chữa bài tập BFS + DFS

No content
21

Toán học

Làm việc với các phép tính toán lớn yêu cầu bạn cần hiểu một số định luật cơ bản.

Một số dạng Toán sẽ giải quyết

  • Các bài toán liên quan tới phép chia có dư
  • Bài toán liên quan đến đồng hồ
  • Bài toán đồng biến nghịch biến của hàm số

Video | Slide | Notebook

22

Cây - Tree

Một trong web chúng ta sử dụng hàng ngày được lưu trữ dưới dạng cây. Hiểu được cấu trúc này bạn sẽ vượt qua rất nhiều thử thách hóc búa từ các công ty công nghệ lớn.

Các dạng bài sẽ giải quyết trong bài học này

Bài toán duyệt/tạo/thay đổi cây Bài toán liên quan đến khoảng cách trong cây

Video | Slide | Notebook

23

Tìm kiếm nhị phân - Binary Search

Một kỹ thuật tìm kiếm loại trừ hiệu quả trong một số bài toán tối ưu mà bạn cần quan tâm.

Các dạng bài sẽ giải quyết:

  • Bài toán tối ưu theo điều kiện K cho trước (Trọng lượng tàu ít nhất để vận chuyển hàng trong D ngày)
  • Bài toán tìm kiếm theo một điều kiện K cho trước

Video | Slide | Notebook

24

Chữa bài Dijkstra + Union Find

Bài Dijkstra: 743

Bài Union Find: 684 + 1319 + 1579

25

Cây tìm kiếm nhị phân - Binary Search Tree

Dạng cây rất hay bắt gặp trong các bài phỏng vấn. Trong bài này chúng ta cùng tìm hiểu các thao tác cơ bản trên cây này nhé.

Video | Slide | Notebook

26

Danh sách liên kết - Linked List

Nếu bạn muốn xóa một phần tử khỏi mảng trong thời gian ngắn thì danh sách liên kết chính là một cấu trúc dữ liệu có thể bạn cần.

Sử dụng danh sách liên kết để giải quyết một số bài toán sau:

  • Thay đổi node trong danh sách liên kết
  • Tạo/duyệt danh sách liên kết

Video | Slide | Notebook

27

Chữa bài toán + gợi ý các bài cây

Chữa các bài tập toán bao gồm:

1344 + 1217 + 1716 + 360

Gợi ý các bài liên quan tới cây.

28

Quy hoạch động cơ bản - Knapsack

Tìm ra lựa chọn tối ưu trong nhiều lựa chọn khác nhau là mục tiêu của thuật toán này. Tuy nhiên các bài toán ứng dụng được thuật toán này đôi khi ẩn sâu trong nhiều dạng khác nhau mà cần một vài biến đổi trước khi áp dụng được ngay.

Trong bài học này chúng ta sẽ đề cập đến những dạng mà có thể quy về bài toán Knapsack quen thuộc.

Video | Slide | Notebook

29

Ứng dụng quy hoạch động trong trí tuệ nhân tạo

Chúng ta hoàn toàn có thể ứng dụng lập trình quy hoạch động trong một phần bài toán nhận diện âm thanh.

Cùng khám phá ứng dụng này nhé.

Video | Slide | Notebook

30

Chữa bài cây nhị phân + Tìm kiếm nhị phân

No content