Share Khóa Học – Cấu trúc dữ liệu và giải thuật Thực chiến
Giảng viên: Hoàng Văn Công
Nội dung khóa học
Phần 1: Giới thiệu
Bài 1: Hướng dẫn xem video trên Unica
Bài 2: Giới thiệu khoá học
Bài 3: Nội dung của khoá học
Bài 4: Cách học của khoá học [QUAN TRỌNG]
Bài 5: Tham gia group giải bài tập [QUAN TRỌNG]
Bài 6: Hướng dẫn chạy và debug với Visual Studio Code
Bài 7: Hướng dẫn chạy và debug với IntelliJ
Bài 8: Cách làm bài và nộp bài trên LeetCode
Bài 9: Tham gia group Discord
Phần 2: Array and String | Mảng và Chuỗi
Bài 10: Duyệt mảng
Bài 11: Thêm/Chèn phần tử vào mảng
Bài 12: Xoá phần tử trong mảng
Bài 13: Kỹ thuật 2 con trỏ: Xoá phần tử trong mảng
Bài 14: Kỹ thuật 2 con trỏ: Thêm phần tử vào mảng
Bài 15: List và Array List trong Java
Bài 16: Làm việc với mảng 2 chiều
Bài 17: Giới thiệu về String, Character và char
Bài 18: Thực hành với String và Character
Bài 19: Làm quen với StringBuilder
Phần 3: Sorting (1) | Các thuật toán sắp xếp (Phần 1)
Bài 20: Giới thiệu
Bài 21: Bubble Sort | Sắp xếp nỏi bọt
Bài 22: Insertion Sort | Sắp xếp chèn
Bài 23: Selection Sort | Sắp xếp chọn
Bài 24: Bài toán tìm số lớn thứ 3
Phần 4: Recursion | Đệ quy
Bài 25: Giới thiệu về đệ quy | Định nghĩa đệ quy
Bài 26: Đặc điểm của đệ quy
Bài 27: Thực hành 1: Tính giai thừa (phần 1)
Bài 28: Thực hành 1: Tính giai thừa (phần 2)
Bài 29: Thực hành 2: Tính số Fibonacy (phần 1)
Bài 30: Thực hành 2: Tính số Fibonacy (phần 2)
Bài 31: Một số bài toán khác
Bài 32: Phân loại đệ quy (phần 1)
Bài 33: Phân loại đệ quy (phần 2)
Bài 34: Ưu điểm và nhược điểm của đệ quy
Bài 35: Tối ưu hoá đệ quy
Bài 36: Khử đệ quy
Bài 37: Nên sử dụng đệ quy khi nào?
Bài 38: Hai cách cài đặt Đệ quy
Phần 5: Binary Search | Tìm kiếm nhị phân
Bài 39: Giới thiệu về Binary Search
Bài 40: Cài đặt Binary Search bằng vòng lặp
Bài 41: Cài đặt Binary Search bằng đệ quy
Bài 42: Đánh giá thuật toán
Phần 6: Sorting (2) | Các thuật toán sắp xếp (phần 2)
Bài 43: Merge Sort: Ý tưởng
Bài 44: Merge Sort: Cài đặt
Bài 45: Merge Sort: Testing
Bài 46: Quick Sort: Ý tưởng
Bài 47: Quick Sort: Cài đặt
Bài 48: Sử dụng thư viện sắp xếp trong Java
Phần 7: Độ phức tạp của thuật toán
Bài 49: Giới thiệu về Space Complexity
Bài 50: Giới thiệu về Time Complexity
Bài 51: Big O notation
Bài 52: Các độ phức tạp cơ bản
Bài 53: Thực hành 1: Giải thuật tìm kiếm tuần tự
Bài 54: Thực hành 2: Giải thuật Sắp xếp nổi bọt
Bài 55: Thực hành 3: Giải thuật Fibonaci
Bài 56: Thực hành 4: Giải thuật tìm kiếm nhị phân
Bài 57: Thực hành 5: Thuật toán Merge Sort
Bài 58: Thực hành 6: Thuật toán Quick Sort
Phần 8: Linked List | Danh sách liên kết
Bài 59: Giới thiệu Linked List
Bài 60: Cài đặt Linked List
Bài 61: Thêm phần tử vào đầu
Bài 62: Thêm phần tử vào cuối
Bài 63: Thêm phần tử vào giữa
Bài 64: Xoá phần tử ở đầu
Bài 65: Xoá phần tử ở cuối
Bài 66: Xoá phần tử ở giữa
Bài 67: Bài toán đảo ngược một Linked List (Sử dụng vòng lặp)
Bài 68: Bài toán đảo ngược một Linked List (Sử dụng đệ quy)
Phần 9: Stack and Queue | Ngăn xếp và Hàng đợi
Bài 69: Giới thiệu Stack & Queue
Bài 70: Các thao tác cơ bản với Stack & Queue
Bài 71: Tạo interface cho Stack và Queue
Bài 72: Cài đặt Stack với Mảng
Bài 73: Cài đặt Queue với Mảng
Bài 74: Cài đặt Stack với Linked List
Bài 75: Cài đặt Queue với Linked List
Bài 76: Stack trong Java
Bài 77: Queue trong Java
Phần 10: Hash Table | Set and Map
Bài 78: Giới thiệu về Hash Table
Bài 79: Design a Hash Function
Bài 80: Collision và cách xử lý
Bài 81: Ứng dụng của Hash Table
Bài 82: Design a Hash Set
Bài 83: Implement a HashSet (phần 1)
Bài 84: Implement a HashSet (phần 2)
Bài 85: Design a Hash Map
Bài 86: Implement a HashMap (phần 1)
Bài 87: Implement a HashMap (phần 2)
Bài 88: HashSet in Java
Bài 89: HashMap in Java
Phần 11: Tree | Cây
Bài 90: Giới thiệu về Tree, Binary Tree, Binary Search Tree
Bài 91: Xây dựng cây BST
Bài 92: Thêm một node vào cây BST (Vòng lặp)
Bài 93: Thêm một node vào cây BST (Đệ quy)
Bài 94: Xoá một node khỏi cây BST
Bài 95: Tìm kiếm trên cây BST
Bài 96: Duyệt cây theo 3 thứ tự (Lý thuyết)
Bài 97: Duyệt cây theo 3 thứ tự (Implement)
Bài 98: Bài toán tính chiều cao cây
Bài 99: Bài toán tính tổng trên cây
Phần 12: Graph | Đồ thị
Bài 100: Giới thiệu về Đồ thị
Bài 101: Giới thiệu về DFS – Tìm kiếm theo chiều sâu
Bài 102: Cài đặt DFS với Stack
Bài 103: Cài đặt DFS với đệ quy
Bài 104: Cài đặt BFS với Queue
Bài 105: Ứng dụng DFS: Tính số miền liên thông
Bài 106: Thuật toán Dijkstra (Tìm đường đi ngắn nhất): Lý thuyết
Bài 107: Thuật toán Dijkstra (Tìm đường đi ngắn nhất): Cài đặt
Phần 13: Heap | Đống
Bài 108: Giới thiệu về Heap
Bài 109: Biểu diễn Heap
Bài 110: Các thao tác với Heap
Bài 111: Khởi tạo Heap
Bài 112: Thêm phần tử vào Heap
Bài 113: Xóa phần tử ở Root
Bài 114: Xóa phần tử ở vị trí bất kỳ
Bài 115: Test trên HackerRank
Bài 116: Heap trong Java
Bài 117: Cách sử dụng và bài tập
Phần 14: Các CTDL và giải thuật NÂNG CAO
Bài 118: Bit Manipulation – Các thao tác xử lý với Bit
Bài 119: Backtracking – Thuật toán quay lui
Bài 120: Dynamic Programming – Quy Hoạch Động
Bài 121: Trie / Prefix Tree – Cây tiền tố
Bài 122: Tổng kết