Khóa học thuật toán - công cụ:
- IDE Code Block hoặc VS code
Nội dung:
- Đánh giá độ phức tạp thuật toán
- Phân tích hình học 2D
- Toán học logic
- Kỹ thuật tìm kiếm trên mảng 1 chiều
- Kỹ thuật tìm kiếm nhị phân
- Kỹ thuật 2 con trỏ
- Kỹ thuật tổng tiền tố
- Quy hoạch động cơ bản
- Quy hoạch động nâng cao
- Sinh nhị phân
- Sinh hoán vị - tổ hợp
- Bài toàn xác suất
- Đồ thị cơ sở
- Duyệt đồ thị DFS - BFS
- Thành phần liên thông
- DSU
- Giải thuật vét cạn
- Math
- Luyện tập tổng hợp
mình đang thiết kế để dạy mấy thằng cu mới lên đại học, chương trình thế này ổn k nhỉ
Chương trình ổn hay ko luôn phụ thuộc vào đối tượng người học là ai. Nó có thể có lý với người này nhưng lại ko có lý với người khác. Mà mấy thằng cu lên ĐH cũng có this có that. Cho nên bước đầu tiên là phải test trình độ của bọn nó, cái gì đã tốt và cái gì đang thiếu.
Cái đầu tiên nên dạy theo mình là tư duy mô hình hóa vấn đề và giải quyết ở high level, là thứ bọn Tây nó rất chú trọng nhưng ở VN thì gần như là ko dạy.
Ví dụ dạy học sinh cách suy ra kết quả của bài toán bằng cách tổng hợp kết quả của những bài toán tương tự nhỏ hơn. Có tư duy đấy rồi bọn nó tự suy ra quy hoạch động.
Hay như discrete structure mình được học ở Tây thì những thứ như graph, topology, circle v.v... bạn đề cập dù có trong nội dung môn học đấy nhưng lại ko phải mục tiêu chính của môn học này. Mục tiêu cơ bản của môn đấy là tại sao lại nghĩ tới việc lấy graph làm model cho problem để đưa ra solution, chẳng hạn thế.
Nhìn dưới góc độ đó thì Dijkstra có thể tự suy ra cách implement từ BFS. Hay bài toán xếp hậu chẳng hạn, nếu modeling problem bằng cách coi mỗi state của bàn cờ là 1 đỉnh, mỗi lần đặt thêm 1 quân hậu là 1 cạnh, thì problem này hoàn toàn có thể giải bằng BFS.
Chứ nếu như ko có tư duy ấy, thì Dijkstra là 1 bài, Dijkstra thay đổi 1 tí kiểu như tìm đường đi ngắn nhất nhưng phải qua ít nhất 4 đỉnh chẳng hạn có khi thành bài mới. Xếp hậu là 1 bài mà mã đi tuần là 1 bài khác, trong khi nếu đã có tư duy thì kể cả có là 1 quân quái thai nhảy zigzag thì vẫn là nó, vẫn implement bằng BFS thôi. Ngay như trong cái list bạn đưa mấy cái thuật toán sinh để mà chạy được thì cũng vẫn ... BFS. Mọi thứ vẫn chỉ là thằng A, chỉ đơn giản 1 cái là A quay phải, 1 cái là A quay trái hay A trồng cây chuối, ví dụ thế.
Mình nghĩ có tư duy ở high level rồi thì mới dạy đến kỹ thuật cụ thể vì như thế ko cần dạy nhiều mà sau đấy người học có thể tự học tự nâng cao trình độ. Cho nên, nếu dạy cho người mới mình sẽ dạy như sau.
1) Tư duy quy nạp
2) Lý thuyết đồ thị và cách mô hình hóa
3) Các thể loại mô hình hóa khác.
Bước tiếp theo là dạy đến các cách biểu diễn phổ biến của các thể loại trên trong tin học (có thể biểu diễn bằng Array, List v.v...) cũng như cách implement các thuật toán cơ bản.
Cuối cùng mới dạy kỹ thuật cụ thể, đầu tiên chắc là đệ quy.
Sau đó có thể là 2 con trỏ, tìm kiếm nhị phân v.v...
Cuối cùng mới tới đánh giá độ phức tạp. Bởi đơn giản nếu ko đưa được ra solution thì lấy gì mà đánh giá. Đánh giá và tối ưu theo cá nhân mình nên đứng cuối.