E đang ở đầu năm 2 chưa có hiểu nhiều, nên nhiều chô các ac nói em vẫn hơi mơ hồ. hơn nữa học trong trường đến lúc làm việc rất khác, hiện tại em chưa thể tìm được hướng đi riêng cho mình chỉ biết làm những gì trong khả năng thôi ak. Nhưng cảm ơn ac đã cho em những điều mà có lẽ không thể tìm thấy trên sách vở ak
Toán rời rạc cần thiết như thế nào cho tư duy lập trình?
Ồ cái này cũng hay, bm lại hết haha
Mình đang học cái này…
Thầy nói nó giúp ích trong việc đơn giản hơn việc đặt điều kiện khi code và là phần cốt lõi khi học lập trình robot
theo mình thấy thì một kỹ sư nói chung đều phải nên biết tối thiểu là vận dụng mức cơ bản môn này… còn thể CNTT ít đụng đến nhưng mà các nghành kỹ thuật khác thì cực kỳ quan trọng… và chiều vừa phải nghiền môn lý thuyết thông tin với cả đống kiến thức về cái này
Hình như bạn đang học ở KHTN phải ko?
Mình đang học lớp CNTN14 của khoa CNTT.
Theo mình thấy thì việc bỏ sức ra để học về TRR là ko cần thiết, như anh Đạt nói, bạn cứ code là được, còn nếu ko biết gì thì cứ gg, hỏi những đứa bên CNTT (thực ra thì chưa có nhiều đứa áp dụng được). Bạn nói là bạn học điện tử viễn thông, thì những cái cao siêu, trừu tượng học làm gì cho phí thời gian. Bên Tài năng 14 có rất nhiều cao thủ lập trình cho phần cứng đấy, có cả admin những những website lớn về lập trình andruino, có cả CLB về robotics, có cả những đứa đã từng đạt giải Nhất Quốc gia Itel Isef (đề tài là lập trình máy móc - mấy cái này mình ko rành lắm nên ko biết sử dụng thuật ngữ đã đúng chưa nữa) … Bạn tham gia mấy cái đó chắc hiệu quả hơn đấy
Đạt cũng muốn nhấn mạnh lại một điểm là câu hỏi ở đây liên quan đến “tư duy lập trình” chứ không phải là “tư duy giải thuật”.
Nếu các bạn muốn học giải thuật, học tốt toán rời rạc và xác xuất thống kê. Bản thân Đạt hưởng lợi từ xác xuất thống kê hơn là toán rời rạc. Giải thuật của Đạt cũng không được tốt cho lắm, có thể do toán thống kê chăng?
Nếu các bạn muốn có tư duy lập trình, lập trình nhiều vào.
năm 2 em cũng học toán rời rạc am,f không biết nó như thế nào đây
Mình có học một vài môn bên đtvt, ở những môn cơ sở họ học rất nhiều thứ liên quan đến đại số bool - một phần của toán rời rạc để thiết kế mạch logic. Khi một môn nào đó được đưa vào chương trình, người dạy đều có mục tiêu của nó hết (Trừ mấy môn bên chính trị). Không có môn nào là không cần thiết đâu, có thể không cần đào sâu nhưng cần nắm được những gì được dạy, không chỉ học để qua môn.
Còn nói về tư duy lập trình á, thật ra mọi người khi học nhập môn lập trình đều học toán rới rạc hết á mà không nhận ra và không được chỉ ra thẳng nó vốn xuất phát từ toán thôi, các phép and, or, not, tổ hợp (set), thuật toán đồ thị, phép ánh xạ (map), mảng, ma trận… chỉ là cách nhìn mọi người không nhận thấy mà thôi.
Bạn học Hệ CSDL chưa? Nếu đã học rồi mà vẫn chưa biết TRR ứng dụng vào đâu thì nên học lại cho kỹ. IT là chỉ cần coding coding cho đến khi thành thạo thôi sao? Đừng nói là TRR có những môn nhìn vào chẳng ăn nhập vào với ngành nhưng nó giúp bạn nhìn nhận và giải quyết vấn đề 1 cách nhanh chóng hơn.
Bạn nói đúng, chỉ code không thôi thì dù có code chăm chỉ, 10 năm cũng chỉ là beginner. Phải có tư duy mới lập trình giỏi được: đặc biệt là thuật toán, thuật toán phải thật sự tốt.
Nên anh em có gắng học thuật toán, không có thuật toán thì như rắn không đầu vậy, suy nghĩ cái gì cũng không ra, cái gì cũng mắc.
Mình đinh theo mảng Big Data thì vai trò của môn này như thế nào các tiền bối?
hư cấu 2>3 ông anh chứng minh cho em xem đi anh
minh moi biet do. chuan bi hoc TRR r
Anh Hai lớn hơn anh Ba :))
Chuyện học toàn thì tùy vào mục đích của bạn. Nếu như bạn muốn làm 1 số ngành chuyên sâu hoặc đi theo hướng nghiên cứu thì nên tập trung học tốt toán rời rạc
Lúc trước mình học các phần sau:
- Lý thuyết tập hợp: hỗ trợ gián tiếp cho tư duy khi viết SQL, đại khái là giúp bạn tưởng tượng tốt hơn
- Lý thuyết ma trận: dùng cho xử lý ảnh, machine learning, nếu như mình nhớ ko lầm thì hình như có liên quan đến cả mấy thuật toán mã hóa. Theo mình nhớ là ma trân dùng rất nhiều.
- Lý thuyết đồ thị: dùng cho các bài toán tìm đường, ra quyết định…
- Lý thuyết tổ hợp: google mấy bài xử lý chuỗi là thấy ngay
Còn một số phần nữa nói về đệ quy, backtracking (bài toán 8 hậu, con mã đi tuần), mình không nhớ cái này được xếp vào phần nào, nhưng cũng được ứng dụng nhiều.
Về ứng dụng trong công việc, mình đi làm outsource hơn 2 năm (phần lớn là web, data nhiều nhưng vấn đề không quá phức tạp) , ngoài lý thuyết tập hợp ra thì chưa ứng dụng tí toán rời rạc nào hết . Cơ mà mình để ý bên Tây họ rất khoái dùng mấy giải thuật đệ quy (recursive)
Nguồn: Kinh nghiệm cá nhân và wikipedia
Song ánh và đơn ánh
- Số số nguyên bằng số phân số
- Số thực nhiều hơn số nguyên
- Mọi đường tròn không suy biến đều có cùng số số điểm (equinumerous)
lí thuyết tập hợp
Em thấy Toán Rời Rạc hay mà
Ví dụ tìm phần tử thứ n của dãy Fibonaci, thông thường người ta phải lặp(hoặc đệ quy) đến phần tử thứ (n-1), tốn khá nhiều thời gian và tài nguyên. Thay vào đó ta có thể xây dựng một công thức và tìm phần tử thứ n trong 1 nốt nhạc chỉ bằng 1 phép toán, rõ ràng là tiện lợi hơn nhiều.
O(logn) (phép nhân ma trận) chứ không phải 1 đâu vì không tính đúng được số thập phân.
“0 là lớn nhất, 1 là bé nhất”
Cho e xin keyword để tìm hiểu về phương pháp này với ạ.
Hôm nay rảnh rỗi, mình đi chứng minh 2 < 3 chơi, có 2 cách: ánh xạ và tiên đề Peano.
Theo định nghĩa số tự nhiên theo cardinality: cho số tự nhiên n, tập X := { x ∈ N : 1 ≤ x ≤ n } thì |X| := n. Do đó, nếu cho tập A = { 1, 2 } thì |A| = 2, tương tự tập B = { 1, 2, 3 }, có |B| = 3.
Thiết lập một đơn ánh (injection) f: A -> B, có 3 khả năng cho f:
- f(1) = 1, f(2) = 2 hoặc f(1) = 2, f(2) = 1: 3 ∈ B nhưng không có x ∈ A để f(x) = 3.
- f(1) = 1, f(2) = 3 hoặc f(1) = 3, f(2) = 1, 2 ∈ B nhưng không có x ∈ A để f(x) = 2.
- f(1) = 2, f(2) = 3 hoặc f(1) = 3, f(2) = 2, 1 ∈ B nhưng không có x ∈ A để f(x) = 1.
Trong cả 3 trường hợp đều có 1 phần tử trong B không được f chỉ tới, hay f không là toàn ánh (surjection). Vì f đơn ánh nhưng không toàn ánh, nên |A| < |B|. Thế cardinality của A và B, được 2 < 3.
Cách khác đàng hoàng hơn, dùng hệ tiên đề Peano, xem successor operator là s: N -> N (s(0) = 1, s(1) = 2, s(2) = 3,…)
2 là số tự nhiên, vì 2 = s(1) = s(s(0))
3 là số tự nhiên, vì 3 = s(2)
Theo định nghĩa phép cộng: 2 + 1 = 2 + s(0) = s(2 + 0) = s(2).
Mà 3 = s(2), nên 3 = 2 + 1
Theo định nghĩa dấu >: Cho 2 số tự nhiên a, b, a > b khi và chỉ khi a = b + m, với m là một số tự nhiên khác 0. Do đó từ 3 = 2 + 1, suy ra 3 > 2.
Theo định nghĩa dấu < (a < b khi và chỉ khi b > a), suy ra kết luận 2 < 3.
P/s: đào mộ xíu