Cấu trúc dữ liệu & giải thuật qua ví dụ kinh điển – C++ nền tảng, nâng cao, phỏng vấn xin việc
Giới thiệu về khóa học
Giới thiệu về Cấu trúc dữ liệu và thuật toán:
Thực hiện một đề án tin học là chuyển bài toán thực tế thành bài toán có thể giải quyết trên máy tính. Một bài toán thực tế bất kỳ đều bao gồm các đối tượng dữ liệu và các yêu cầu xử lý trên những đối tượng đó. Vì thế, để xây dựng một mô hình tin học phản ánh được bài toán thực tế cần chú trọng đến hai vấn đề :
Tổ chức biểu diễn các đối tượng thực tế :
Các thành phần dữ liệu thực tế đa dạng, phong phú và thường chứa đựng những quan hệ nào đó với nhau, do đó trong mô hình tin học của bài toán, cần phải tổ chức , xây dựng các cấu trúc thích hợp nhất sao cho vừa có thể phản ánh chính xác các dữ liệu thực tế này, vừa có thể dễ dàng dùng máy tính để xử lý. Công việc này được gọi là xây dựng cấu trúc dữ liệu cho bài toán.
Từ những yêu cầu xử lý thực tế, cần tìm ra các giải thuật tương ứng để xác định trình tự các thao tác máy tính phải thi hành để cho ra kết quả mong muốn, đây là bước xây dựng giải thuật cho bài toán. Tuy nhiên khi giải quyết một bài toán trên máy tính, chúng ta thường có khuynh hướng chỉ chú trọng đến việc xây dựng giải thuật mà quên đi tầm quan trọng của việc tổ chức dữ liệu trong bài toán. Giải thuật phản ánh các phép xử lý , còn đối tượng xử lý của giải thuật lại là dữ liệu, chính dữ liệu chứa đựng các thông tin cần thiết để thực hiện giải thuật. Để xác định được giải thuật phù hợp cần phải biết nó tác động đến loại dữ liệu nào (ví dụ để làm nhuyễn các hạt đậu , người ta dùng cách xay chứ không băm bằng dao, vì đậu sẽ văng ra ngoài) và khi chọn lựa cấu trúc dữ liệu cũng cần phải hiểu rõ những thao tác nào sẽ tác động đến nó (ví dụ để biểu diễn các điểm số của sinh viên người ta dùng số thực thay vì chuỗi ký tự vì còn phải thực hiện thao tác tính trung bình từ những điểm số đó). Như vậy trong một đề án tin học, giải thuật và cấu trúc dữ liệu có mối quan hệ chặt chẽ với nhau, được thể hiện qua công thức :
Cấu trúc dữ liệu + Giải thuật = Chương trình
Với một cấu trúc dữ liệu đã chọn, sẽ có những giải thuật tương ứng, phù hợp. Khi cấu trúc dữ liệu thay đổi thường giải thuật cũng phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên trên một cấu trúc không phù hợp. Hơn nữa, một cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý trên đó có thể phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tư, giải thuật cũng dễ hiễu và đơn giản hơn.
Đây là khoá học rất nền tảng và là bước đệm để các bạn tiến sâu hơn trong nghề nghiệp lập trình của mình. Các bạn học tốt môn này, các bạn nắm được các tư duy thuật toản, tư duy giải thuật, các bạn sẽ là một lập trình viên giỏi. Các tư duy này giúp bạn vận dụng để giải quyết các công việc, các bài toán, các nghiệp vụ trong tất cả phần mềm sau này
Việc học Cấu trúc dữ liệu và Thuật toán giúp bạn có một cái nhìn chuyên sâu, tối ưu hoá được nhiều vấn đề trong lập trình. Việc tối ưu hoá là cực kì quan trọng để các bạn xây dựng các phần mềm chạy nhanh, hiệu quả.
Trong hầu hết các bài PHỎNG VẤN để tuyển chọn người tài, các công ty đều kiểm tra khả năng xử lý và tư duy của các bạn thông qua các trường hợp từ môn học này. Một lập trình nhanh nhạy, một ứng cử viên sáng giá cho một vị trí tại công ty phụ thuộc vào khả năng bạn xử lý các vấn đề, tư duy giải quyết vấn đề dựa vào các thuật toán, thuật giải và tối ưu chương trình.
Khoá học được trình bày rất chi tiết với hầu hết các thuật toán và giải thuật thường gặp trong thực tế qua nhiều ví dụ minh hoạ dễ hiểu và vận dụng
Các thuật toán được trình bày, minh hoạ trực quan qua hệ thống chúng tôi để các bạn học một cách dễ hiểu nhất.
Đề cương khóa học
Chương 1: Làm thế nào để trở thành một Lập trình chuyên nghiệp
Bài 1: Giới thiệu môn học
Bài 2: Chia sẻ kinh nghiệm học lập trình & Học nhanh, nhớ lâu – P1
Bài 2: Chia sẻ kinh nghiệm học lập trình & Học nhanh, nhớ lâu – P2
Bài 2: Chia sẻ kinh nghiệm học lập trình & Học nhanh, nhớ lâu – P3
Bài 3: Một số quan niệm Không đúng về lập trình
Bài 4: Thuật toán
Bài 5: Các phương pháp biểu diễn thuật toán – P1
Bài 5: Các phương pháp biểu diễn thuật toán – P2
Bài 5: Các phương pháp biểu diễn thuật toán – P3
Bài 5: Các phương pháp biểu diễn thuật toán – Bài tập tự luyện
Bài 6: Độ phức tạp của thuật toán + Bài tập tự luyện (7 bài)
Bài New: Mối liên hệ giữa CTDL và GT
Bài 7: Chuyển đổi dữ liệu bài toán sang dữ liệu chương trình & Nguyên tắc đặt biến, tổ chức dữ liệu – p1
Bài 8: Chuyển đổi dữ liệu bài toán sang dữ liệu chương trình & Nguyên tắc đặt biến, tổ chức dữ liệu – p2
Bài 9: Phân chia bài toán lớn thành các bài toán nhỏ
Bài 10: Kỹ thuật gỡ rối – Debug chương trình
CHƯƠNG 2: TỔNG QUAN VỀ C++
Link tải Visual studio 2015
Bài 11: Cài đặt phần mềm
Bài 12: Tạo chương trình “HellloWorld” C++ đầu tiên
Bài 13: Một số ví dụ C++ đầu tiên
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – Nhắc lại kiến thức
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – Bài tập 1
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – Bài tập 2
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – Bài tập 3
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – Bài tập 4
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập (switch-case)
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập (switch-case) – Bài tập 5
Bài 14: Ôn tập các lệnh điều kiện qua các bài tập – 10 bài tập tự luyện (chấm cộng điểm + có giải)
Bài 15: Ôn tập Vòng lặp & Bài tập – P1
Bài 16: Ôn tập Vòng lặp & Bài tập – p2
Bài 16: Ôn tập Vòng lặp & Bài tập – p3
Bài 16: Ôn tập Vòng lặp & Bài tập – p4
Bài 16: Ôn tập Vòng lặp While – P5
Bài 16: Ôn tập Vòng lặp Do-While – P6
Bài 16: Ôn tập Vòng lặp While – Bài tập – P7
Bài 16: Ôn tập Vòng lặp While – Do While – Bài -tập – P8
Bài 16: Ôn tập Vòng lặp lồng nhau – P9
Bài 16: Ôn tập Vòng lặp Bài tập vẽ hình sử dụng vòng lặp lồng nhau – P10
Bài 16: Ôn tập Vòng lặp Bài tập vẽ hình sử dụng vòng lặp lồng nhau – P11
Bài 17: Ôn tập Hàm & Bài tập – p1
Bài 18: Ôn tập Hàm & Bài tập – p2
Bài 19: Ôn tập Hàm & Bài tập – p3
Bài 20: Ôn tập Hàm & Bài tập – p4
Bài 21: Ôn tập Hàm & Bài tập – p5
Bài 21-6: Ôn tập Hàm & Bài tập – p6
Bài 21-7: Ôn tập Hàm & Bài tập – p7
Bài 21-8: Ôn tập Hàm & Bài tập – p8
Bài 21-9: Ôn tập Hàm & Bài tập – p9
Bài 21-10: Ôn tập Hàm & Bài tập – p10
Bài 21-11: Ôn tập Hàm & Vòng lặp – Bài tập tự luyện
CHƯƠNG 3: CON TRỎ VÀ MẢNG
Bài 22.1: Con trỏ – Cốt lõi về con trỏ
Bài 22.2: Con trỏ – Khái niệm Con trỏ
Bài 22.3: Con trỏ – Các biến Con trỏ
Bài 22.4: Con trỏ – Con trỏ trỏ đến con trỏ
Bài 22.5: Con trỏ – ĐỪNG NHẦM LẪN
Bài 22.6: Con trỏ – Bài tập con trỏ
Bài 22.7: Con trỏ – Bài tập con trỏ – tt
Bài 23: Con trỏ – Biến Tham chiếu
Bài 24: Con trỏ – Phép toán số học trên con trỏ
Bài 25: Con trỏ – Phép toán số học trên con trỏ – p2
Bài 26: Con trỏ – Cấp phát bộ nhớ động trong C – p1
Bài 26: Con trỏ – Cấp phát bộ nhớ động trong C – p2
Bài 26: Con trỏ – Cấp phát bộ nhớ động trong C++
Bài 26: Con trỏ – Các loại con trỏ đặc biệt
Bài 27: Mảng một chiều – Giới thiệu – tính chất – cú pháp
Bài 27.1: Mảng một chiều – Ví dụ minh họa
(Bổ sung thêm) – MẢNG – CHỈ CODE – KO THU ÂM
(Bổ sung thêm) – Mảng – Chiến lược Min – Max
(Bổ sung thêm) – Mảng – xử lý với mọi và tồn tại – Chỉ code
Bài 28: Mảng 2 chiều – Khai báo
Bài 29: Mảng 2 chiều – Truy xuất – Gán
Bài 30: Mảng 2 chiều – truyền mảng cho hàm
Bài 31: Mảng 2 chiều – Nhập dữ liệu cho mảng
Bài 32: Mảng 2 chiều – Xuất và Tìm kiếm phần tử
32.1: Mảng 2 chiều – Kiểm tra nguyên tố
32.2: Mảng 2 chiều – Kiểm tra nguyên tố – Cách 2
32.3: Mảng 2 chiều – Kiểm tra nguyên tố – Cách 3
32.4: Mảng 2 chiều – Tính tổng – p1
32.5 Mảng 2 chiều – Tính tổng – p2
32.6 – Mảng 2 chiều – End
CHƯƠNG 4: ÔN TẬP VỀ LỚP &, HƯỚNG ĐỐI TƯỢNG C++
Bài 33: Lập trình Hướng Đối Tượng phần 1
Bài 34: Lập trình Hướng Đối Tượng – Phần 2
Bài 35: Lập trình HĐT – Phần 3
Bài 36: Lập trình HĐT – Phần 4 – Coming soon
CHƯƠNG 5: CÁC THUẬT TOÁN SẮP XẾP
Bài 37: Giới thiệu các thuật toán sắp xếp
Bài 38: Demo thuật toán sắp xếp InterchangeSort
Bài 39: Cài đặt thuật toán InterchangeSort – phần 1
Bài 39: Cài đặt thuật toán InterchangeSort – phần 2
Bài 39: Chạy tay để hiểu rõ thuật toán InterchangeSort
Bài 40: Phân tích độ phức tạp thuật toán InterchangeSort
Bài 41: Bài tập tự luyện – Thuật toán InterchangeSort
Bài 42: Demo thuật toán sắp xếp Selection Sort (Chọn trực tiếp) – P1
Bài 42: Demo thuật toán sắp xếp Selection Sort (Chọn trực tiếp) – P2
Bài 43: Thuật toán sắp xếp Selection Sort (Chọn trực tiếp) – P3
Bài 44: Thuật toán sắp xếp Selection Sort (Chọn trực tiếp) – P4
Bài 45: Thuật toán sắp xếp Bubble Sort (Sắp xếp nổi bọt) – P1
Bài 46: Thuật toán sắp xếp Bubble Sort (Sắp xếp nổi bọt) – P2
Bài 47: Bài bổ sung NEW: Thuật toán Chèn trực tiếp – Insertion sort – P1
Bài 48: Bài bổ sung NEW: Thuật toán Chèn trực tiếp – Insertion sort – P2
Bài 49: Bài bổ sung NEW: Thuật toán Chèn trực tiếp – Insertion sort – P3
Bài bổ sung NEW: Thuật toán Shell sort – P1
Bài bổ sung NEW: Thuật toán Shell sort – P2
Bài bổ sung NEW: Thuật toán Shell sort – P3
Bài 50: Khái niệm cấu trúc cây (Tree) căn bản – Phần 1
Bài 51: Khái niệm cấu trúc Cây (Tree) căn bản – phần 2
Bài 52: Khái niệm Cây Nhị Phân căn bản
Bài 53.1 : Thuật toán HeapSort – Phần 1
Bài 53.2 : Thuật toán HeapSort – Phần 2
CHƯƠNG 6: ĐỆ QUY VÀ QUAY LUI
Bài 64: Đệ qui là gì, khái niệm
Bài 65: Minh hoạ đệ qui và bộ nhớ (trực quan)
Bài 66: Bài tập Fibonacci bằng Đệ Quy
Bài 67: Ưu nhược điểm của Đệ Quy – Câu hỏi phỏng vấn
Bài 68: Các loại đệ quy
Bài 69: Bài tập đệ qui – bài 1
Bài 70: Bài tập đệ qui – bài 2
Bài 71: Bài tập đệ qui – bài 3&4
Bài 72: Bài tập đệ qui – Tháp Hà Nội (HaNoi Tower)
Bài 73: Bài tập đệ qui – 15 bài tập tự luyện (Có chấm điểm)
CHƯƠNG 7: CÁC THUẬT TOÁN SẮP XẾP NÂNG CAO
Bài 74: Ý tưởng thuật toán sắp xếp QuickSort – Sắp xếp nhanh
Bài 75: Chạy tay thuật toán Quicksort – Sắp xếp nhanh
Bài 76: Minh họa động thuật toán Quicksort – sắp xếp nhanh
Bài 77: Cài đặt thuật toán Quicksort – Sắp xếp nhanh ( Đệ quy)
Bài 78: Giải thuật MergeSort – Sắp xếp trộn
CHƯƠNG 6: THUẬT TOÁN TÌM KIẾM – TÌM KIẾM TUYẾN TÍNH
Bài 1: Tìm kiếm tuyến tính – Phần 1
Bài 2: Tìm kiếm tuyến tính – Phần 2
CHƯƠNG 7: THUẬT TOÁN TÌM KIẾM – TÌM KIẾM NHỊ PHÂN
Tìm kiếm Nhị Phân
CHƯƠNG 10: CÁC THAO TÁC TRÊN CÂY NHỊ PHÂN TÌM KIẾM & CÂY AVL
Bài 1: Giới thiệu Cây Nhị Phân Tìm Kiếm & Phương pháp duyệt
Bài 2: Duyệt cây – P2
Bài 3: Duyệt cây – P3
Bài 4: Tạo cây
Bài 5: Tìm kiếm trên cây
Bài 6: Chèn phần tử x vào cây
Bài 7: Hủy phần tử có khóa x
Bài 8: Hủy phần tử
Bài 9: Cây AVL – Giới thiệu
Bài 10: Cây AVL – Phần 2
Bài 11: Cây AVL – Phần 3
Bài 12: Cây AVL – Phần 4
Bài 13: Cây AVL – Phần 5
Bài 14: Cây AVL – Phần 6
Bài 15: Cây AVL – Phần 7
Cây AVL – Phần cuối
CHƯƠNG 10: CÂY ĐỎ ĐEN
Bài 98: Giới thiệu
Bài 99: Ý tưởng thuật toán & demo
Bài 100: Các thao tác trên cây ĐỎ ĐEN
Bài 101: Phân tích và chạy tay thuật toán
Bài 102: MỘT SỐ BÀI TẬP
Bài 103: BÀI TẬP LUYỆN TẬP
CHƯƠNG 11: B TREE
0 phút
Bài 104: Giới thiệu
Bài 105: Ý tưởng thuật toán & demo
Bài 106: Các thao tác trên BTREE
Bài 107: Phân tích và chạy tay thuật toán
Bài 108: MỘT SỐ BÀI TẬP
Bài 109: BÀI TẬP LUYỆN TẬP
CHƯƠNG 12: TOÀN TẬP VỀ DANH SÁCH LIÊN KẾT – LINKED LIST
Bài 1: Giới thiệu về Danh sách liên kết – p1
Bài 2: Giới thiệu về Danh sách liên kết – p2
Bài 3: Khai báo – Danh sách liên kết
Bài 4: Khai báo – Tạo node mới – Danh sách liên kết
Bài 5: Danh sách liên kết đơn – Các thao tác cơ sở – P1
Bài 6: Danh sách liên kết đơn – Các thao tác cơ sở – P2
Bài 7: Danh sách liên kết đơn – Thêm sau phần tử q + duyệt list
Bài 8: Danh sách liên kết đơn – Tìm phần tử
Bài 9: Danh sách liên kết đơn – Xóa phần tử
Bài 10: Danh sách liên kết đơn – xóa sau node q
Bài 11: Danh sách liên kết đơn – Xóa node với khóa k
Bài 12: Danh sách liên kết đơn – Xóa toàn bộ list
Bài 13: Danh sách liên kết đôi – Khai báo – Tạo node mới
Bài 14: Danh sách liên kết đôi – Thêm vào đầu danh sách
Bài 15: Danh sách liên kết đôi – Thêm cuối danh sách
Bài 16: Danh sách liên kết đôi – Chèn sau phần tử q
Bài 17: DSLK Đôi – Chèn trước phần tử q
Bài 18: DSLK Đôi – Hủy đầu danh sách
Bài 19: DSLK Đôi – Hủy cuối danh sách
Bài 20: DSLK Đôi – Hủy phần tử có khóa k
Bài 21: Danh sách liên kết vòng
CHƯƠNG 14: DỰ ÁN 1 : TỪ ĐIỂN SỬ DỤNG CÂY NHỊ PHÂN TÌM KIẾM
Học Online: Tại đây