thắc mắc dạy algorithm chương trình ntn ổn k các bác

AwesomeBoy

Member
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ỉ
 
Lấy cuốn Giải thuật và Lập Trình của thầy Lê Minh Hoàng là xong...sách đấy dạy bọn cấp 3 thi HSG, mới lên ĐH mà học ko vào nổi nữa thì thôi
 
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ỉ
ủa giờ mới thấy còm bên topic kia hứa tặng 1 củ...có tặng thật ko để mình feedback :shame: :shame: :shame:
 
Nên có phần về set, map và xử lý string ở đầu bác ạ. Nắm chắc cái này thì mới dễ phần sau được.
Với em thấy quy hoạch động hơi khó nếu học sớm. Xếp sau phần sinh - quay lui là đẹp. cho độ khó tăng dần :D
 
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ỉ
Dạy discrete math trước rồi mới dạy đánh giá độ phức tạp thuật toán chứ nhỉ nếu dạy DSA :angry:
Còn công cụ thì dùng Dev-C++ của Embarcadero cho nó nhanh gọn lẹ, dễ dùng không phải setup nhiều :byebye:
 
Dạy discrete math trước rồi mới dạy đánh giá độ phức tạp thuật toán chứ nhỉ nếu dạy DSA :angry:
cái độ phức tạp nó easy lắm

đếm số vòng for lồng nhau, hết
còn cái log 2 thực ra là chia nhị phân nên có hàm log,

e chỉ dạy đúng 2 cái này
 
Nên có phần về set, map và xử lý string ở đầu bác ạ. Nắm chắc cái này thì mới dễ phần sau được.
Với em thấy quy hoạch động hơi khó nếu học sớm. Xếp sau phần sinh - quay lui là đẹp. cho độ khó tăng dần :D
vâng nhưng em có định dạy 1 buổi đầu
phân biệt set, map, khi nào dùng
collidion (hay hit... va chạm) trong hashmap

dynamic dạy 1 D và 2 D
 
cái độ phức tạp nó easy lắm

đếm số vòng for lồng nhau, hết
còn cái log 2 thực ra là chia nhị phân nên có hàm log,

e chỉ dạy đúng 2 cái này
Còn đánh giá độ phức tạp đệ quy, hai con trỏ, ... chứ có phải mỗi đếm cái vòng lặp với cả chặt nhị phân là xong đâu thím :beat_brick:

Còn nếu dạy level để đi thi mấy cái lập trình thi đấu thì bỏ qua toán rời rạc cũng được
 
Còn đánh giá độ phức tạp đệ quy, hai con trỏ, ... chứ có phải mỗi đếm cái vòng lặp với cả chặt nhị phân là xong đâu thím :beat_brick:

Còn nếu dạy level để đi thi mấy cái lập trình thi đấu thì bỏ qua toán rời rạc cũng được
Để tôi tìn hiểu chứ xưa mình chjr biết vậy à
 
Còn đánh giá độ phức tạp đệ quy, hai con trỏ, ... chứ có phải mỗi đếm cái vòng lặp với cả chặt nhị phân là xong đâu thím :beat_brick:

Còn nếu dạy level để đi thi mấy cái lập trình thi đấu thì bỏ qua toán rời rạc cũng được


def binary_search(arr, target):
low = 0
high = len(arr) - 1

while low <= high:
mid = (low + high) // 2

if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1

return -1

# Example usage
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7

result = binary_search(arr, target)

if result != -1:
print(f"Element {target} found at index {result}.")
else:
print(f"Element {target} not found in the array.")

ví dụ nhìn cái logN, có gì khó khăn đâu bác, em trình độ cũng bt bác chỉ giáo thêm vowis, complexity of algorithm follows these calculations
 
Còn đánh giá độ phức tạp đệ quy, hai con trỏ, ... chứ có phải mỗi đếm cái vòng lặp với cả chặt nhị phân là xong đâu thím :beat_brick:

Còn nếu dạy level để đi thi mấy cái lập trình thi đấu thì bỏ qua toán rời rạc cũng được
toán rời rạc tôi thấy có gì nhỉ , mấy cái graph , topology, circle, thuật toán distra nữa ok k bác . em trình cũng bt thôi nhưng dạy cho mấy đứa em sớm k chúng nó vô đại học tạch môn thì chết nhục. Mặc dù trong công việc chả mấy khi động chạm mấy cái này(trừ khi em hỏi khi interview)
 
def binary_search(arr, target):
low = 0
high = len(arr) - 1

while low <= high:
mid = (low + high) // 2

if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1

return -1

# Example usage
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7

result = binary_search(arr, target)

if result != -1:
print(f"Element {target} found at index {result}.")
else:
print(f"Element {target} not found in the array.")

ví dụ nhìn cái logN, có gì khó khăn đâu bác, em trình độ cũng bt bác chỉ giáo thêm vowis, complexity of algorithm follows these calculations

Còn 1 cái nữa là space complexity

Ví dụ:
DFS: O(b * d)
BFS: O(b^d)

Mặc dù thời gian chạy vẫn là O(|V| + |E|), nhưng 1 số trường hợp dùng BFS sẽ dẫn đến MLE
Ngoài ra 1 số thuật toán dùng 2 con trỏ, nhìn qua sẽ tưởng O(n^2), nhưng tính kỹ sẽ là O(n)

Thường mấy cái code nhanh mà k cầu kì lắm thì k học đến toán rời rạc k sao, nhưng động đến đồ thị thì nên
 
Dạy discrete math trước rồi mới dạy đánh giá độ phức tạp thuật toán chứ nhỉ nếu dạy DSA :angry:
Còn công cụ thì dùng Dev-C++ của Embarcadero cho nó nhanh gọn lẹ, dễ dùng không phải setup nhiều :byebye:
Code Block cũng chả cần setup đâu, download zip về giải nén, mở lần đầu nó hỏi GNU GCC click phát xong bấm Ok là xong
https://www.fosshub.com/Code-Blocks.html?dwl=codeblocks-20.03mingw-nosetup.zip
 
def binary_search(arr, target):
low = 0
high = len(arr) - 1

while low <= high:
mid = (low + high) // 2

if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1

return -1

# Example usage
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7

result = binary_search(arr, target)

if result != -1:
print(f"Element {target} found at index {result}.")
else:
print(f"Element {target} not found in the array.")

ví dụ nhìn cái logN, có gì khó khăn đâu bác, em trình độ cũng bt bác chỉ giáo thêm vowis, complexity of algorithm follows these calculations
python ngôn ngữ rác học làm gì
 
anh e thấy ntn, mình đang soạn

1719745923505.png
 
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.
 
Last edited:
Back
Top