Làm thế nào / khi nào tính toán được sử dụng trong Khoa học máy tính?


95

Nhiều chương trình khoa học máy tính yêu cầu hai hoặc ba lớp tính toán.

Tôi đang tự hỏi, làm thế nào và khi nào tính toán được sử dụng trong khoa học máy tính? Nội dung CS của bằng cấp về khoa học máy tính có xu hướng tập trung vào các thuật toán, hệ điều hành, cấu trúc dữ liệu, trí tuệ nhân tạo, công nghệ phần mềm, v.v. Có khi nào tính toán hữu ích trong các lĩnh vực này hoặc các lĩnh vực khác của Khoa học máy tính không?


6
Chúng tôi không có chính sách nghiêm ngặt cho các câu hỏi trong danh sách, nhưng có một sự không thích chung . Cũng xin lưu ý điều này và cuộc thảo luận này ; bạn có thể muốn cải thiện câu hỏi của mình để tránh những vấn đề được giải thích ở đó. Nếu bạn không chắc chắn cách cải thiện câu hỏi của mình, có lẽ chúng tôi có thể giúp bạn trong Trò chuyện Khoa học Máy tính ?
Raphael

42
Bạn dường như phạm sai lầm phổ biến khi cho rằng nội dung của mỗi khóa học phải phù hợp (cho mọi con đường sự nghiệp). Đôi khi chỉ là về việc đào tạo bạn cách suy nghĩ theo những cách nhất định.
Raphael

8
Có lẽ sẽ hữu ích nếu câu hỏi này có thể làm rõ liệu bạn chỉ hỏi về việc sử dụng trong Khoa học Máy tính hay tất cả các cách sử dụng cho các sinh viên đang lấy bằng Comp Sci. Ít nhất là tại Mỹ, một tỷ lệ rất lớn sinh viên tốt nghiệp Comp Sci trở thành kỹ sư phần mềm trải rộng trên mọi lĩnh vực kỹ thuật có thể tưởng tượng được. Nhiều trong số các lĩnh vực này yêu cầu hiểu tính toán cho các mục đích khác nhau. Không phải tất cả sinh viên tốt nghiệp CS sẽ sử dụng Giải tích trong công việc của họ, nhưng nhiều người chắc chắn sẽ (có lẽ nhiều hơn những người nghĩ họ sẽ làm trong năm thứ nhất.)
thiệu lại vào

1
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Raphael

Đối với tôi nó rất hữu ích cho cảm giác "đánh giá cao và nhẹ nhõm sau này khi tìm hiểu về phương pháp số" . Khi làm việc với dữ liệu rời rạc đến từ các phép đo thực, thay vì các hàm liên tục từ toán học lý thuyết, thật nhẹ nhõm khi tích hợp chỉ là một tổng và đạo hàm chỉ là một phép trừ, thay vì các công thức quá phức tạp chúng ta cần rất nhiều thời gian và công sức để học trong các lớp học tính toán của chúng tôi trước đây!
vsz

Câu trả lời:


110

Tôi có thể nghĩ về một vài khóa học sẽ cần tính toán, trực tiếp . Tôi đã sử dụng khuôn mặt táo bạo cho các ngành học thường bắt buộc đối với bằng Khoa học Máy tính và chữ nghiêng cho những ngành thường là tùy chọn.

  • Computer Graphics Processing / hình ảnh, và ở đây bạn cũng sẽ cần phải phân tích Geometry và Linear Algebra, nặng nề ! Nếu bạn đi xuống con đường này, bạn cũng có thể muốn nghiên cứu một số Hình học vi phân (có tính toán đa biến như một điều kiện tiên quyết tối thiểu). Nhưng bạn sẽ cần tính toán ở đây ngay cả đối với những điều rất cơ bản: thử tìm kiếm "Biến đổi Fourier" hoặc "Wavelets", chẳng hạn - đây là hai công cụ rất cơ bản cho những người làm việc với hình ảnh.
  • Tối ưu hóa , chủ yếu phi tuyến tính, trong đó Giải tích đa biến là ngôn ngữ cơ bản được sử dụng để phát triển mọi thứ. Nhưng ngay cả lợi ích tối ưu hóa tuyến tính từ tính toán (đạo hàm của hàm mục tiêu là hoàn toàn quan trọng)
  • Xác suất / Thống kê . Chúng không thể được nghiên cứu nghiêm túc nếu không có Giải tích đa biến.
  • Học máy , sử dụng nhiều số liệu thống kê (và do đó, tính toán đa biến)
  • Khai thác dữ liệu và các đối tượng liên quan, cũng sử dụng nhiều Thống kê;
  • Robotics , nơi bạn sẽ cần mô hình hóa các chuyển động vật lý của robot, vì vậy bạn sẽ cần phải biết các dẫn xuất một phần và độ dốc.
  • Toán học và Kết hợp rời rạc ( vâng ! , Bạn có thể cần Giải tích để đếm rời rạc!) - nếu bạn đủ nghiêm túc về việc tạo các hàm, bạn sẽ cần biết cách tích hợp và tạo ra các công thức nhất định. Và điều đó rất hữu ích cho Phân tích thuật toán (xem cuốn sách của Sedgewick và Flajolet, "Phân tích thuật toán"). Tương tự, Taylor Series và giải tích có thể hữu ích trong việc giải quyết một số loại quan hệ lặp lại, được sử dụng trong phân tích thuật toán.
  • Phân tích thuật toán , nơi bạn sử dụng khái niệm giới hạn ngay từ đầu (xem ký hiệu Landau, "chút o " - được xác định bằng cách sử dụng giới hạn)

Có thể có những người khác - đây chỉ là trên đỉnh đầu của tôi.

Và, bên cạnh đó, một người được hưởng lợi gián tiếp từ khóa học Giải tích bằng cách học cách suy luận và giải thích các lập luận với sự chặt chẽ về kỹ thuật. Điều này có giá trị hơn sinh viên thường nghĩ.

Cuối cùng - bạn sẽ cần Giải tích để, tương tác với những người từ Khoa học và Kỹ thuật Chính xác khác. Và không có gì lạ khi Nhà khoa học Máy tính không chỉ cần nói chuyện mà còn làm việc cùng với Nhà vật lý hoặc Kỹ sư.


34
Có lẽ bạn đã có một trải nghiệm khác nhau, nhưng tôi thấy tính toán khá vô dụng khi học cách suy luận và giải thích lập luận chặt chẽ. Nó được dạy bởi vẹt và mô hình phù hợp khá giống như đại số và hình học trung học. Mặt khác, đó là điều kiện tiên quyết đối với một số lớp toán cao hơn đã dạy các kỹ năng này, vì vậy tôi cho rằng nó không hoàn toàn vô dụng.
tsleyon

6
Tôi hoàn toàn có thể liên quan đến điểm cuối cùng (lợi ích gián tiếp). Làm việc trên lý thuyết ngôn ngữ lập trình, tôi hiếm khi sử dụng tính toán trực tiếp. Có lẽ ứng dụng trực tiếp nhất là trong các mô hình tính toán xác suất (ví dụ như các miền sức mạnh xác suất Plotkin & Jones). Tuy nhiên, khóa học tính toán của tôi chủ yếu là về việc chứng minh mọi thứ, và điều này rất, rất có giá trị. Một hoặc hai khóa học tính toán là IMHO cần thiết trong mọi chương trình CS nghiêm túc, cùng với một số môn toán khác (toán rời rạc, logic, đại số tuyến tính, phân tích số, ... và có thể là các thể loại, cấu trúc liên kết, đại số, ...).
chi

3
Dưới đây là một ví dụ về cách tôi cần tính toán trong đồ họa máy tính: chức năng nội suy mượt mà sẽ về cơ bản tất cả có dạng f(0) = 0, f(1) = 1, f'(0) = f'(1) = 0, và bạn có thể thêm bất kỳ ràng buộc khác mà bạn quan tâm, ví dụ f'(0.5) = 1. Cách đây ít lâu tôi đã sử dụng điều này để rút ra một số đa thức nội suy khác nhau để làm mịn hình ảnh.
porglezomp

3
Robotics có lẽ có thể được mở rộng sang bất kỳ loại mô hình vật lý nào (mà tôi đoán cũng bao gồm CG, về mặt ánh sáng, vì vậy hãy gọi nó là mô hình vật lý động học). Điều này bao gồm gia tốc / vận tốc, nảy / lò xo / biến dạng, bộ điều khiển PID, âm học, trọng lực ...
metao

2
Tôi sẽ vô địch theo cách gián tiếp theo cách này: tốt hơn bất kỳ lớp nào họ tham gia trước đây, Giải tích dạy cho sinh viên rằng họ không thể đơn giản đếm số lượng vấn đề và ước tính số lượng công việc sẽ tham gia.
candied_orange

20

Điều này hơi khó hiểu, nhưng tính toán xuất hiện trong các loại dữ liệu đại số. Đối với bất kỳ loại đã cho, loại bối cảnh một lỗ của nó là đạo hàm của loại đó. Xem bài nói chuyện tuyệt vời này để biết tổng quan về toàn bộ chủ đề. Đây là thuật ngữ rất kỹ thuật, vì vậy hãy giải thích.

Các kiểu dữ liệu đại số

Bạn có thể đã bắt gặp các bộ dữ liệu được gọi là các loại sản phẩm (nếu không, đó là vì chúng là sản phẩm của cartesian gồm hai loại). Chúng tôi sẽ thực hiện điều này theo nghĩa đen và sử dụng ký hiệu:

ab

Để biểu thị một tuple, trong đó b là cả hai loại. Tiếp theo, bạn có thể bắt gặp các loại tổng, đây là các loại có thể là một loại hoặc loại khác (được gọi là công đoàn , biến thể hoặc là loại Hoặc (loại) trong Haskell). Chúng tôi cũng sẽ lấy cái này theo nghĩa đen và sử dụng ký hiệu:ab

a+b

Đây là những tên như vậy vì nếu một loại N một giá trị và một loại bN b giá trị, sau đó loại một + bN một + N b giá trị.aNabNba+bNa+Nb

Các loại này trông giống như các biểu thức đại số bình thường và trên thực tế, chúng ta có thể điều khiển chúng như vậy (đến một điểm).

Một ví dụ

Trong các ngôn ngữ chức năng, định nghĩa chung của một danh sách (được nêu trong Haskell ở đây) là:

data List a = Empty 
            | Cons a List

Điều này nói rằng một danh sách trống hoặc một bộ giá trị và một danh sách khác. Chuyển đổi nó thành ký hiệu đại số, chúng ta nhận được:

L(a)=1+aL(a)

Trong đó đại diện cho một loại với một giá trị (còn gọi là loại đơn vị). Bằng cách chèn nhiều lần, chúng ta có thể đánh giá điều này để có được định nghĩa cho L ( a ) :1L(a)

L(a)=1+aL(a)
L(a)=1+a(1+aL(a))
L(a)=1+a+a2(1+aL(a))
L(a)=1+a+a2+a3(1+aL(a))
L(a)=1+a+a2+a3+a4+a5...

xn

Định nghĩa này nói rằng một danh sách là một đơn vị, hoặc một bộ của một mục, hoặc một bộ gồm hai mục, hoặc ba, v.v., đó định nghĩa của một danh sách!

Bối cảnh một lỗ

Bây giờ với bối cảnh một lỗ: bối cảnh một lỗ là những gì bạn nhận được khi bạn 'lấy giá trị' của một loại sản phẩm. Hãy cho một ví dụ:

a2aa+a2a

Lấy một giá trị trong 3-tuple cho 2-tuple, nhưng có ba biến thể khác nhau:

(a,a,_)
(a,_,a)
(_,a,a)

3a2a3

Ví dụ cuối cùng của chúng tôi, hãy sử dụng một danh sách:

Nếu chúng tôi lấy biểu thức ban đầu của chúng tôi cho một danh sách:

L(a)=1+aL(a)

Chúng tôi có thể sắp xếp lại để có được:

L(a)=11a

(Nhìn bề ngoài, điều này có vẻ như vô nghĩa, nhưng nếu bạn lấy chuỗi taylor của kết quả này, bạn sẽ có được định nghĩa mà chúng tôi đã đưa ra trước đó.)

Bây giờ nếu chúng ta phân biệt điều này, chúng ta sẽ nhận được một kết quả thú vị:

L(a)a=(L(a))2

Do đó, một danh sách đã trở thành một cặp danh sách. Điều này trong thực tế có ý nghĩa: hai danh sách được tạo ra tương ứng với các yếu tố trên và dưới lỗ hổng trong danh sách ban đầu!


Điều này là tuyệt vời sâu sắc. Cảm ơn.
D. Ben Knoble

12

Phương pháp số. Có tồn tại các vấn đề tính toán cồng kềnh, duy nhất cho các ứng dụng cụ thể và chúng cần các giải pháp nhanh hơn con người thực tế có thể giải quyết mà không cần chương trình. Ai đó phải thiết kế một thuật toán sẽ tính toán giải pháp. Không phải đó là điều duy nhất ngăn cách các lập trình viên với các nhà khoa học sao?


3
Với tính chất "danh sách" của câu hỏi này, mọi câu trả lời nên cố gắng đưa ra bức tranh đầy đủ. Bạn có chắc chắn muốn khẳng định rằng các phương thức số là ví dụ duy nhất ?
Raphael

Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Raphael

12

Tự động hóa - Tương tự như robot, tự động hóa có thể yêu cầu định lượng rất nhiều hành vi của con người.

Tính toán - Tìm giải pháp cho bằng chứng thường yêu cầu tính toán.

Visualizations - Bằng cách sử dụng các thuật toán tiên tiến đòi hỏi tính toán như cos, sin, pi, và e. Đặc biệt là khi bạn tính toán vectơ, trường va chạm và chia lưới.

Phân tích hậu cần và rủi ro - Xác định liệu một nhiệm vụ có thể thực hiện được không, rủi ro liên quan và tỷ lệ thành công có thể xảy ra.

Bảo mật - Hầu hết bảo mật có thể được thực hiện mà không cần tính toán; tuy nhiên, nhiều người muốn giải thích thích nó trong các biểu thức toán học.

AI - Những điều cơ bản của AI có thể được sử dụng mà không cần tính toán; tuy nhiên, tính toán hành vi nâng cao, trí thông minh / trí tuệ và các giá trị phức tạp dựa trên việc ra quyết định.

Tính toán y tế - Trực quan hóa hầu hết các dữ liệu sức khỏe đòi hỏi phải tính toán như đọc EKG.

Khoa học & Kỹ thuật - Khi làm việc với gần như bất kỳ ngành khoa học nào khác đòi hỏi phải tính toán: Không gian vũ trụ, Chiêm tinh, Sinh học, Hóa học hoặc Kỹ thuật.

Nhiều người trong lập trình có thể đi toàn bộ sự nghiệp của họ mà không cần sử dụng tính toán; tuy nhiên, nó có thể chứng minh vô giá nếu bạn sẵn sàng thực hiện công việc. Đối với tôi nó đã được hiệu quả nhất trong tự động hóa, hậu cần và trực quan hóa. Bằng cách xác định các mẫu cụ thể, bạn có thể chỉ cần bỏ qua mẫu, bắt chước mẫu hoặc phát triển một phương thức ưu việt cùng nhau.


7
πe

3
exp(x)f(x)=f(x)f(0)=1f(x)=g(x)g(x)=f(x)f(0)=0g(0)=1

2
@DavidR Richby: Ví dụ: làm thế nào để bạn thực hiện các chức năng đó, giả sử, một vi điều khiển không có FPU? Nếu bạn biết một số tính toán, bạn ngay lập tức biết một câu trả lời hay: chuỗi sức mạnh.
Nate Eldredge

6

Thực tế là có rất ít cơ hội bạn sẽ sử dụng phép tính. Tuy nhiên, hầu như mọi ngành khoa học khác đều sử dụng phép tính và bạn đang làm việc với bằng cấp khoa học. Có những kỳ vọng nhất định về ý nghĩa của một văn bằng khoa học đại học và một trong những điều đó là bạn biết tính toán. Ngay cả khi bạn sẽ không bao giờ sử dụng nó.

Không sao nếu bạn làm kém trong tính toán, nhưng hãy chắc chắn rằng bạn đã bỏ chút công sức vào toán học rời rạc. Có rất nhiều vấn đề lập trình trong thế giới thực, trong đó toán học rời rạc xuất hiện và sự thiếu hiểu biết về các nguyên tắc của nó có thể làm bạn bối rối trước các lập trình viên khác.


9
Đoạn đầu tiên của bạn là hoàn toàn sai và giáp với lý thuyết âm mưu. Có rất nhiều lĩnh vực khoa học máy tính, nơi tính toán là hữu ích (xem các câu trả lời khác cho danh sách vô tận của chúng). Chắc chắn, có thể tránh tất cả các khu vực đó nhưng thật sai lầm khi tuyên bố rằng việc bỏ tính toán sẽ không có tác động vượt quá điểm số.
David Richerby

4
Tùy thuộc vào chương trình cấp bằng của bạn, bạn có thể hoàn thành một văn bằng mà không bao giờ sử dụng phép tính và tôi chắc chắn nghĩ rằng các chuyên ngành CS không cần nhiều như chúng ta có. Nhưng làm việc kém trong đó sẽ khóa bạn ra khỏi một số lĩnh vực thú vị nhất của khoa học máy tính. Có nhiều thời gian để trở thành một nhà phát triển web sau khi bạn tốt nghiệp; Trong khi ở trường, tại sao không cố gắng thúc đẩy bản thân một chút?
tsleyon

3
@tsleyon Nếu bạn muốn trở thành một nhà phát triển web, hãy tiết kiệm tiền và thời gian cần thiết để lấy bằng CS.
Raphael

8
@ScottB Bạn dường như nhầm lẫn giữa khoa học máy tính với lập trình.
David Richerby

3
@ScottB Ai đang nói CS = math + lập trình? Bản thân tôi đã ủng hộ quan điểm hạn chế này từ lâu. Nhưng bạn cũng có nó ngược: toán học là không thể thiếu đối với CS, giống như đối với vật lý. Chúng tôi cần nó, ngay cả khi chúng tôi không muốn thực hành nó. (Điều đó nói rằng, đây không phải là nơi cho cuộc thảo luận này. Vui lòng tham gia với chúng tôi trong Trò chuyện Khoa học Máy tính nếu bạn muốn tiếp tục.)
Raphael

4

Nhiều người đã cung cấp các ứng dụng trong CS. Nhưng đôi khi bạn sẽ tìm thấy Giải tích khi bạn ít mong đợi nhất:

Dẫn xuất biểu thức chính quy reexamined

Nếu bạn biết automata pdf này có thể đáng đọc.


Tôi không thấy bất kỳ phép tính vi phân nào ở đó; Tôi thấy từ "đạo hàm", nhưng tôi không thấy bất cứ điều gì giống với phép tính vi phân truyền thống.

2
Nó được gọi là "đạo hàm chính thức", và theo một cách nào đó, nó có liên quan đến Giải tích. Bạn cũng sẽ thấy điều này được thực hiện với Hàm tạo, một số công thức liên quan đến các cấu trúc rời rạc và các khu vực khác mà bạn không thực sự có "hàm trơn".
Jay

@Jay: Điều quan trọng không phải là tên. Làm thế nào để hiểu tính toán giúp với nó?
Christian

2
Nó được giải thích trong trang Wikipedia này . Đạo hàm chính thức là một phép toán trên các phần tử của cấu trúc phân tích có chứa đa thức, và nó chính thức là "khá giống" quy tắc thông thường để phân biệt đa thức, tuy nhiên - khác với những gì học sinh nhìn thấy trong Giải tích - đa thức không phải là thực; chúng có thể là đa thức trên một "vòng" tùy ý (một cấu trúc đại số khác). Và có những ứng dụng thực tế của công cụ phái sinh chính thức - tôi đã thấy ít nhất một (Mã hóa đại số - không thể nhớ chi tiết).
Jay

4

Một số ví dụ cụ thể hơn:

  • Giải tích được sử dụng để rút ra quy tắc delta , đây là điều cho phép một số loại mạng thần kinh 'học hỏi'.
  • Tính toán có thể được sử dụng để tính toán biến đổi Fourier của hàm dao động, rất quan trọng trong phân tích tín hiệu.
  • Giải tích được sử dụng mọi lúc trong đồ họa máy tính, đây là một lĩnh vực rất tích cực khi mọi người liên tục khám phá các kỹ thuật mới. Để có một ví dụ cơ bản, hãy xem phương trình kết xuất của Kajiya
  • Giải tích rất quan trọng trong lĩnh vực hình học tính toán, điều tra đường cong và mô hình hóa bề mặt.

3

Đối với những câu trả lời xuất sắc khác, tôi thêm điểm này: sự nghiêm ngặt trong kiểm tra .

Khi tạo các trường hợp thử nghiệm cho một số ứng dụng, tôi đã phải sử dụng phép tính để dự đoán thời gian chạy dự kiến, kích thước bộ nhớ và chọn tham số tối ưu khi điều chỉnh cấu trúc dữ liệu. Điều này bao gồm hiểu lỗi làm tròn dự kiến, vv

Mặc dù số liệu thống kê được đề cập trong các câu trả lời khác, tôi muốn đề cập cụ thể đến các thuật toán Monte-carlo , chẳng hạn như thuật toán tối ưu hóa và một số thuật toán truyền phát thanh đạm dựa trên các nguyên tắc toán học bao gồm phép tính.

Các ngành cụ thể nơi tôi đã làm việc khi yêu cầu tính toán bao gồm:

  • Tài chính (tạo ra một nền tảng giao dịch)

  • Bảo hiểm (tích hợp số chính sách bảo hiểm trong các kịch bản giả định để tính toán tổn thất chính sách dự kiến)

  • Hậu cần (tối ưu hóa việc hợp nhất các tuyến giao thông vận tải)

  • Xử lý tín hiệu


3

Giải tích - phần không thể thiếu - được sử dụng trực tiếp trong CS làm nền tảng để suy nghĩ về tổng kết. Nếu bạn làm việc thông qua bất kỳ phần nào trong phần Toán học cụ thể của Knuth về tổng kết, bạn sẽ nhanh chóng nhận ra các quy ước phổ biến để tính toán: hiểu một số trường hợp liên tục cung cấp cho bạn các công cụ để xem xét rời rạc.

Nhiều cách sử dụng nghiên cứu CS của bạn liên quan đến các hệ thống lập trình theo dõi sự thay đổi, hoặc trong một số trường hợp, cố gắng dự đoán tương lai. Toán học xung quanh các hệ thống này bắt nguồn từ các phương trình vi phân và đại số tuyến tính, và phương trình vi phân là ... phép tính. Có những giáo viên như Gibert Strang ủng hộ việc di chuyển nhanh hơn vào phần phương trình vi phân, nhưng nó vẫn là một tập hợp con của phép tính. Khi thay đổi phụ thuộc vào thay đổi trong bất kỳ hệ thống nào, nó bắt đầu không ổn định (và ổn định) theo những cách vừa không trực quan vừa được hiểu rất rõ. Để hiểu lý do tại sao hệ thống tuyến tính hợp lý của bạn hoạt động theo cách phi tuyến tính, bạn cần có các công cụ tính toán hoặc bạn cần phát minh lại chúng cho không gian vấn đề của bạn.

Và cuối cùng, CS thường yêu cầu đọc và hiểu công việc của người khác, và tính toán là lần đầu tiên tiếp xúc với rất nhiều từ vựng, quy ước và lịch sử được chia sẻ.


"Nhiều cách sử dụng nghiên cứu CS của bạn liên quan đến các hệ thống lập trình theo dõi sự thay đổi, hoặc trong một số trường hợp, cố gắng dự đoán tương lai" - Tôi không nghĩ đây là đại diện cho các khóa học nghiên cứu về CS.
Raphael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.