chào mọi người, mình có search cái tiêu đề ra 1 ví dụ rất hay là:
tính tổng 1 đến 1000 thì ở toán sẽ tư duy làm sao nhóm các số lại ra 1 công thức chung, áp dụng cho trường hợp tổng quát, còn ở tin sẽ tư duy dùng vòng for i đến 1000, cộng và gán.
vậy cho mình hỏi tư duy tin giống và khác tư duy toán ở những điểm mấu chốt nào?
nếu có thể cho mình thêm nhiều ví dụ minh họa nữa được không ạ!
thanks!
Sự khác nhau giữa tư duy giải thuật tin và tư duy giải toán?
ở đâu ra cái tư duy như vậy? tại sao không dùng công thức để tính và viết code dùng công thức đó?
ở cái vòng for while, nhờ năng lực tính toán máy tính, đó Bạn, mình cũng tư duy thế, tại sao ko dùng công thức thì nó là thiên về tư duy Toán, mình chỉ có ví dụ thế, đang cần nhiều ví dụ hơn, search google chưa có
Cái này gọi là code trâu đó bạn
này là bản năng chứ không phải tư duy lập trình
Đây là tư duy duy ý chí của bạn chứ không phải tư duy lập trình nhé.
Tư duy lập trình là làm sao tối ưu bộ nhớ, tối ưu tốc độ xử lý bằng cách áp dụng công thức toán học.
Còn cái ví dụ của bạn là “học sử dụng hàm for” chứ không phải là tư duy gì cả.
? tư duy bản năng, tư duy lập trình là hiểu và vận dụng câu lệnh lập trình , sử dụng máy móc để giải toán, còn tư duy toán là vận dụng kiến thức toán để giải quyết vấn đề.
bài toán kia mình ốp công thức là giải dc, nhưng có thể nhiều bài khác đâu có công thức, hoặc phải tìm ra?
việc nặng nhọc đã có máy tính làm.
tại sao ko làm?
cái mình hỏi, khi gặp nhiều bài toán, ko biết nên suy nghĩ theo hướng giải toán hay dùng câu lệnh trong tin để giải.
đáp số là như nhau ạ
Phải tư duy trước rồi mới code chứ thế này đâu gọi là tư duy, chỉ là paraphrase viết lại thôi.
- Bạn nói việc nặng thì cứ để máy tính làm. Bạn nghĩ tính 10^10 phép tính thì tốn bao lâu, trong khi áp dụng toán thì chỉ cần 10^5 phép tính
- Bạn nói nếu dùng toán thì dùng toán luôn, thì hỏi bạn có rảnh ngồi tính 10^5 phép tính hay không?
- Bạn có chấp nhận một phần mềm có chức năng tương đương nhưng lại cần phải mua một cái máy tính đắt gấp 10 lần mới chạy nổi, trong khi phần mềm khác chỉ cần một chiếc máy giá rẻ là được
Sự khác biệt là sử dụng công cụ thôi.
Tư duy toán học: dùng công thức toán học về hàm, về dãy số(cấp số cộng cấp số nhân), về thống kê…
Tư duy lập trình: dùng bộ tập lệnh cơ sở của ngôn ngữ(if/else, for…).
Để giải bài toán trên máy tính : kết hợp cả 2.
Ví dụ, bài toán tổ hợp:
Tính tổ hợp: dùng kiến thức toán học để tính.
Liệt kê tổ hợp: dùng kiến thức lập trình để làm.
Giả sử người lập trình ko có kiến thức về toán học. kiêu họ tính tổng từ 1->1000 họ sẽ làm gì?
Như mọi khi, tớ nghĩ khi cậu đưa ra câu hỏi về quan điểm, cậu thường có câu trả lời của chính cậu rồi.
Vì thế, cậu có thể đưa ra quan điểm của cậu trước được không?
Đã tư duy lại còn bản năng ???
À, em nhầm định chơi chữ
đúng là với số phép tính lớn thì ko thể để máy tính tính chay cộng dần dc, nhưng mình chỉ ví dụ minh họa thế để cho mọi người dễ hình dung, cái mình hỏi.
1 ví dụ khác là tính đạo hàm,
cho hàm: F(w), tìm w sao cho F’(w)=0, với các hàm F(w) phức tạp, để tìm ra nghiệm mà phương trình =0, bằng giải toán là rất khó, người ta cho w=w- learningRate*error.
nhờ có vòng lặp for, while mà cho w chạy được, để tìm ra w sao cho F’(w) =0, đó chính là tư duy Tin , nhờ sức mạnh máy tính.
Tư duy là nói về việc người ta dùng não suy nghĩ để tìm giải pháp cho một vấn đề.
Tư duy toán thì mục tiêu chính là nhanh, chính xác.
Tư duy lập trình thì ngoài nhanh và chính xác nó còn đề cao sự hiệu quả, đơn giản.
Hi @anon14394188
Theo mình thì tùy tình huống sẽ có cách giải quyết khác nhau, tuy duy tốt là chọn được giải pháp phù hợp.
Xét trường hợp cụ thể của bạn là tính tổng 1->1000
thì dùng vòng for
là phù hợp nhất. Còn nếu tính tổng 1-> hàng tỷ tỷ tỷ
thì sẽ có lựa chọn khác, ngay cả tư duy triết học nếu áp dụng vào làm tối ưu hơn, “có giá trị thương mại” thì mình vẫn áp dụng.
#Cua
Vậy mình có thể kết luận là cái ví dụ minh họa của bạn gây cho tất cả mọi người hiểu sai chủ đề mà bạn muốn thảo luận.
Mong bạn chú ý hơn trong những bài post sau.
Dựa trên 1 câu chuyện có thật: Đếm số lượng hình chữ nhật trên lưới m x n, mỗi ô là 1 ô 1 x 1.
- Đứa tư duy giải thuật:
def count_rect(m, n):
s = 0
for w in range(1, m+1):
for h in range(1, n+1):
s += (m-w+1)*(n-h+1)
chạy đoạn code trong đầu rồi viết ngược lại:
-
Đứa tư duy toán: mn(m+1)(n+1)
-
Đứa khác: google
đếm số lượng hình chữ nhật
?? ngay từ tiêu đề mình đã hỏi sự khác nhau giữa tư duy người làm tin và tư duy người làm toán là gì rồi? Bạn ko trả lời, cứ xoáy sâu vào cái ví dụ, mình còn mập mờ chỉ đưa được ví dụ đó thôi, và mình cũng cần tìm thêm nhiều ví dụ khác để làm rõ, mới đi nhờ các bạn đây, nếu Bạn có ví dụ khác thì cho tớ xin ạ
Người làm về Numerical Analysis (chuyên ngành Applied Mathamatics) xem topic này xong ngáo luôn.
Trong đầu nghĩ “Học vị của mình là Toán nhưng sao mình toàn tư duy người làm tin trong công việc??”
Ngay từ đầu mình đã trả lời rồi mà:
Tư duy giải toán thì đâu có bị bó buộc bởi tài nguyên hệ thống.
Lại nói về phép lặp, với thuần toán thì có thể hình dung đường tròn là một đa giác đều có cạnh bằng n, nhưng n tiến tới vô cùng. Trong khi đó, đường tròn với lập trình là một đa giác đều có n cạnh, nhưng n là số hữu hạn và đủ lớn để khi biểu diễn nó trên màn hình, mắt bạn không phân biệt được.
Mình không cho rằng học tin thì phải tách biệt với toán học, chẳng phải có khái niệm “thuật toán” đó sao?
Nếu có sự khác biệt nào đó mà bạn đang tìm kiếm thì nó là đây:
Toán học đi tìm chân lý, tin học đi tìm cách giải quyết vấn đề. - Ren’s quote, translated by Linh and edited by me