Як / коли використовується обчислення в інформатиці?


95

У багатьох програмах з інформатики потрібні два чи три уроки обчислення.

Мені цікаво, як і коли використовується обчислення в інформатиці? Вміст CS в галузі інформатики, як правило, зосереджується на алгоритмах, операційних системах, структурах даних, штучному інтелекті, інженерії програмного забезпечення тощо. Чи бувають випадки, коли обчислення корисне в тих чи інших областях інформатики?


6
У нас немає суворої політики щодо списку питань, але існує загальна неприязнь . Зверніть увагу також на це та на цю дискусію; ви можете вдосконалити своє питання, щоб уникнути пояснених там проблем. Якщо ви не знаєте, як покращити своє запитання, можливо, ми можемо допомогти вам у чаті з інформатики ?
Рафаель

42
Ви, здається, помиляєтесь, вважаючи, що зміст кожного курсу повинен бути відповідним (для кожного шляху кар'єри). Іноді йдеться лише про те, щоб навчити тебе думати певними способами.
Рафаель

8
Напевно, було б корисно, якби це запитання могло уточнити, запитуєте ви лише про використання у власній галузі комп'ютерних наук або про всі види використання для студентів, які отримують ступінь Comp Sci. Принаймні, тут, у США, дуже великий відсоток випускників Comp Sci стають інженерами-програмістами, які розповсюджуються майже на кожну інженерну область, яку можна уявити. Багато з цих доменів потребують розуміння обчислення для різних цілей. Не всі CS-студенти використовуватимуть обчислення у своїх робочих місцях, але багато хто, безумовно, буде (мабуть, більше, ніж хто думає, що під час першого курсу).
reirab

1
Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Рафаель

Для мене це було дуже корисно для почуття "вдячності та полегшення пізніше, коли дізнаваюся про числові методи" . Під час роботи з дискретними даними, отриманими від реальних вимірювань, замість безперервних функцій з теоретичної математики, таке полегшення було таким, що інтеграція - це лише сума, а похідна - це лише віднімання, замість надто складних формул нам потрібно було стільки часу і сил навчитися раніше на наших уроках з обчислення!
vsz

Відповіді:


110

Я можу придумати кілька курсів, які потребували б обчислення безпосередньо . Я використовував сміливе обличчя для звичайних обов'язкових дисциплін для ступеня інформатики, а курсив - як правило, факультативні.

  • Комп'ютерна графіка Обробка / зображення, і тут ви також повинні Аналітична геометрія і лінійна алгебра, сильно ! Якщо ви підете цією стежкою, ви також можете вивчити деяку диференціальну геометрію (яка має багатоваріантний обчислення як мінімальну необхідну умову). Але вам знадобиться обчислення навіть для дуже простих речей: спробуйте пошукати "Перетворення Фур'є" або "Хвилетки", наприклад - це два дуже фундаментальних інструменти для людей, які працюють із зображеннями.
  • Оптимізація , в основному, нелінійна, де багатофакторний обчислення є основною мовою, яка використовується для розробки всього. Але навіть лінійна оптимізація отримує користь від обчислення (похідна цільової функції абсолютно важлива)
  • Імовірність / Статистика . Їх неможливо серйозно вивчити без багатовимірного обчислення.
  • Машинне навчання , яке використовує статистику (і, отже, багатовимірне обчислення)
  • Обмін даними та супутні теми, які також використовують багато статистики;
  • Роботика , де вам потрібно буде моделювати фізичні рухи робота, тому вам потрібно знати часткові похідні та градієнти.
  • Дискретна математика та комбінаторика ( так! Вам може знадобитися обчислення для дискретного підрахунку!) - якщо ви досить серйозно ставитесь до створення функцій, вам потрібно знати, як інтегрувати та виводити певні формули. І це корисно для аналізу алгоритмів (див. Книгу Седжевіка та Флайолета, «Аналіз алгоритмів»). Аналогічно, серія Тейлора та обчислення можуть бути корисними для вирішення певних видів співвідношень рецидивів, які використовуються в аналізі алгоритму.
  • Аналіз алгоритмів , де ви використовуєте поняття межі з самого початку (див. Позначення Ландау, "мало " - це визначається за допомогою межі)o

Можуть бути й інші - це просто вгорі моєї голови.

Окрім цього, від курсу обчислення побічно виграєш, навчившись міркувати та пояснювати аргументи з технічною суворістю. Це цінніше, ніж зазвичай думають студенти.

Нарешті - вам знадобиться обчислення для того, щоб добре взаємодіяти з людьми з інших точних наук та техніки. І не рідкість, що вченому-комп’ютеру потрібно не лише розмовляти, а й працювати разом з фізиком або інженером.


34
Можливо, у вас був інший досвід, але я вважав, що обчислення дуже марне для того, щоб навчитися міркувати та жорстко пояснювати аргументи. Це викладалось із поєднання роти та зразків, як алгебри та геометрії середньої школи. З іншого боку, це було необхідною умовою для кількох старших класів по математиці , які зробили викладати ці навички, так що я припускаю , що це було не зовсім марно.
цлейсон

6
Я можу повністю стосуватися останнього моменту (непрямі вигоди). Працюючи над теорією мов програмування, я рідко використовував обчислення безпосередньо. Мабуть, найбільш пряме застосування було в імовірнісних обчислювальних моделях (наприклад, імовірнісні силовідомени Plotkin & Jones). І все-таки мій курс обчислення здебільшого стосувався доказування речей, і це було дуже і дуже цінно. Один чи два обчислювальні курси - це ІМХО, необхідні у кожній серйозній програмі CS, разом із деякою більш математикою (дискретна математика, логіка, лінійна алгебра, чисельний аналіз, ... і, можливо, категорії, топологія, алгебра, ...).
чі

3
Ось приклад того , як мені потрібно було обчислення в комп'ютерній графіці: Гладкі функції інтерполяції будуть в основному все бути в формі f(0) = 0, f(1) = 1, f'(0) = f'(1) = 0і ви можете додати будь-які інші обмеження , ви піклуєтеся про, наприклад f'(0.5) = 1. Нещодавно я використав це для отримання декількох інтерполяційних поліномів для згладжування зображень.
porglezomp

3
Робототехніка, ймовірно, може бути розширена на будь-який вид фізичного моделювання (що, мабуть, також охоплює CG, з точки зору освітлення, тому назвемо це кінетичне моделювання фізики). Сюди входять прискорення / швидкість, відскоки / пружини / деформації, PID-контролери, акустика, гравітація ...
metao

2
Я буду опосередковано вказувати таким чином: краще, ніж будь-який клас, який вони беруть раніше, Calculus навчає студентів, що вони не можуть просто порахувати кількість проблем і підрахувати, яка робота буде задіяна.
candied_orange

20

Це дещо незрозуміло, але обчислення з'являється в алгебраїчних типах даних. Для будь-якого типу тип похідних цього типу є одним з його отворів. Дивіться цю чудову розмову для огляду всієї теми. Це дуже технічна термінологія, тому давайте пояснимо.

Алгебраїчні типи даних

Можливо, ви натрапили на кортежі, які називаються видами продукції (якщо ні, це тому, що вони є декартовим продуктом двох типів). Ми будемо розуміти це буквально і використовувати позначення:

ab

Представити кортеж, де і обидва типи. Далі, можливо, ви натрапили на типи сум ( це типи, які можуть бути або одним типом, або іншим (відомі як об'єднання , варіанти , або як тип або в Хаскелі). Ми також будемо розуміти це буквально і використовувати позначення:ab

a+b

Вони називаються такими, як вони є, тому що якщо тип має значення а тип має значення , то тип має значення .aNabNba+bNa+Nb

Ці типи виглядають як звичайні алгебраїчні вирази, і ми, власне, можемо ними маніпулювати (до певної міри).

Приклад

У функціональних мовах загальним визначенням списку (наведене тут у Haskell) є таке:

data List a = Empty 
            | Cons a List

Це говорить про те, що список є порожнім або кордоном значення та іншим списком. Перетворюючи це в алгебраїчне позначення, ми отримуємо:

L(a)=1+aL(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

Це визначення тоді говорить, що список є або одиницею, або кордоном одного елемента, або кортежем з двох предметів, або з трьох тощо, що є визначенням списку!

Контексти з одним отвором

Тепер до контексту з одним отвором: контекст з одним отвором - це те, що ви отримуєте, коли ви «виймаєте значення» з типу продукту. Наведемо приклад:

Для простого 2-кортежа, який є однорідним, , якщо ми виймаємо значення, ми просто отримуємо 1-кортеж, . Але є два різних контексти одного отвору цього типу: а саме перше і друге значення кортежу. Отже, оскільки це будь-яке з них, ми могли б написати, що це , що, звичайно, . Ось тут і грає диференціація. Підтвердимо це ще одним прикладом:a2aa+a2a

Виведення значення з 3-х кортезів дає 2-кортежні, але є три різні варіанти:

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

Залежно від того, куди ми поставимо отвір. Це дає нам що справді є похідною . Існує доказ цього взагалі тут .3a2a3

Для нашого останнього прикладу скористаємось списком:

Якщо взяти наш оригінальний вираз для списку:

L(a)=1+aL(a)

Ми можемо переставити, щоб отримати:

L(a)=11a

(На поверхні це може здатися нісенітницею, але якщо взяти цей телорізовий ряд, ви отримаєте визначення, яке ми отримали раніше.)

Тепер, якщо ми розмежуємо це, ми отримаємо цікавий результат:

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

Таким чином, один список став парою списків. Це насправді має сенс: два складені списки відповідають елементам над і під діркою в оригінальному списку!


Це було напрочуд проникливе. Дякую.
D. Ben Knoble

12

Числові методи. Існують громіздкі проблеми з численням, які є унікальними для конкретних програм, і вони потребують рішення швидше, ніж людина може вирішити без програми. Хтось повинен розробити алгоритм, який буде обчислювати рішення. Хіба це не єдине, що відокремлює програмістів від вчених?


3
Враховуючи характер "списку" цього питання, кожна відповідь повинна намагатися дати повну картину. Ви впевнені, що хочете стверджувати, що числові методи - єдиний екземпляр?
Рафаель

Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Рафаель

12

Автоматизація - Подібно до робототехніки, автоматизація може вимагати кількісного визначення великої кількості поведінки людини.

Розрахунки. Пошук рішень для доказів часто вимагає обчислення.

Візуалізації - Використання розширених алгоритмів вимагає обчислення, таких як cos, sine, pi та e. Особливо, коли ви обчислюєте вектори, поля зіткнення та мережу.

Логістика та аналіз ризиків - Визначення можливості виконання завдання, ризику та можливої ​​успішності.

Безпека - Більшість безпеки може здійснюватися без обчислення; проте багато людей, які хочуть пояснень, віддають перевагу саме математичним виразам.

AI - основи ШІ можна використовувати без обчислення; однак, обчислення передової поведінки, розуму рої / розуму вулів та складних цінностей на основі прийняття рішень.

Медичні розрахунки. Візуалізація більшості даних про здоров'я потребує обчислення, наприклад, показника ЕКГ.

Наука та інженерія - для роботи з майже будь-якою іншою науковою дисципліною потрібно обчислити: аерокосмічний, астрологічний, біологічний, хімічний або інженерний.

Багато людей з програмування можуть пройти всю свою кар’єру, не використовуючи обчислення; однак це може виявитись безцінним, якщо ви готові виконати роботу. Для мене це було найбільш ефективно в автоматизації, логістиці та візуалізації. Визначаючи конкретні зразки, ви можете просто проігнорувати візерунок, імітувати шаблон або розробити чудовий метод разом.


7
Як обчислюються cos, sine, та ? πe
Девід Річербі

3
Ну, можна визначити унікальним рішенням при , і аналогічно sin, cos може бути визначено як унікальна пара функцій, що задовольняє , з відповідними граничними умовами (я думаю, і має працювати). f ( x ) = f ( x ) f ( 0 ) = 1 f ( x ) = g ( x ) g ( x ) = - f ( x ) f ( 0 ) = 0 g ( 0 ) = 1exp(x)f(x)=f(x)f(0)=1f(x)=g(x)g(x)=f(x)f(0)=0g(0)=1
Кріс Тейлор

2
@DavidRicherby: Приклад: як ви реалізуєте ці функції, скажімо, на мікроконтролері без FPU? Якщо ви знаєте деяке обчислення, ви одразу знаєте гарну відповідь: серія потужності.
Нейт Елдредж

6

Справа в тому, що існує дуже мало шансів, що ви коли-небудь використаєте обчислення. Однак практично в будь-якій іншій науковій дисципліні НЕ використовується обчислення, і ви працюєте над науковим ступенем. Є певні очікування того, що має означати ступінь університетської науки, і одна з таких речей - це те, що ви знаєте обчислення. Навіть якщо ви ніколи не будете ним користуватися.

Це добре, якщо ви погано займаєтесь обчисленням, але обов'язково докладіть певних зусиль до дискретної математики. Існує маса проблем програмування в реальному світі, коли дискретна математика починає грати, а незнання її принципів може бентежити вас перед іншими кодерами.


9
Ваш перший абзац абсолютно неправильний і межує з теорією змови. Існує достатньо областей інформатики, де обчислення корисно (див. Інші відповіді для нескінченних списків). Звичайно, можна уникнути всіх цих областей, але дуже оманливо стверджувати, що викидання числення матиме нульовий вплив поза межами класів.
Девід Річербі,

4
Залежно від програми вашого ступеня, ви можете закінчити ступінь, не використовуючи числення, і я, безумовно, думаю, що спеціальності CS не потребують стільки, скільки ми отримуємо. Але погана робота в ньому позбавить вас від деяких найцікавіших напрямків інформатики. Після закінчення навчання є багато часу, щоб бути веб-розробником; знаходячись у школі, чому б не спробувати трохи підштовхнути себе?
цлейсон

3
@tsleyson Якщо ви хочете бути веб-розробником, заощадите гроші та час, необхідний для отримання ступеня CS.
Рафаель

8
@ScottB Ви, мабуть, плутаєте інформатику з програмуванням.
Девід Річербі

3
@ScottB Хто говорить CS = математика + програмування? Я сам протягом багатьох років виступаю проти цього обмеженого погляду. Але у вас це є і назад: математика є невід'ємною частиною CS, як і фізиці. Він нам потрібен , навіть якщо ми не хочемо цього практикувати . (Це означає, що це не місце для цієї дискусії. Будь ласка, приєднуйтесь до нас у чаті з інформатики, якщо ви хочете продовжити.)
Рафаель

4

Багато людей вже надавали додатки в CS. Але іноді ви знайдете обчислення, коли найменше очікуєте:

Похідні регулярної експресії були переглянуті

Якщо ви знаєте автомати, цей PDF-файл, можливо, варто прочитати.


Я не бачу диференціального числення там; Я бачу слово "похідне", але не бачу нічого подібного до традиційного диференціального числення.

2
Це називається "формальною похідною", і воно певним чином пов'язане з обчисленням. Ви також побачите це з використанням функцій генерації, деяких формул, пов'язаних з дискретними структурами та інших областей, де у вас фактично немає "гладкої функції".
Джей

@Jay: Важливим не є ім'я. Як розуміння числення допомагає в цьому?
Крістіан

2
Це пояснюється на цій сторінці Вікіпедії . Формальна похідна - це операція над елементами анальгебраїчної структури, що містить поліноми, і формально це «зовсім як» звичайне правило для диференціювання многочленів, однак - інакше, ніж те, що бачить студент в обчисленні, - поліноми не надмірні; вони можуть бути поліномами над довільним "кільцем" (інша алгебраїчна структура). І є практичне застосування формальної похідної - я бачив принаймні одне (алгебраїчний криптоаналіз - не пам'ятаю деталей).
Джей

4

Ще кілька конкретних прикладів:

  • Обчислення використовується для отримання правила дельти , саме це дозволяє деяким типам нейронних мереж «вчитися».
  • Обчислення може бути використане для обчислення перетворення Фур'є коливальної функції, що дуже важливо в аналізі сигналів.
  • Обчислення використовується весь час у комп'ютерній графіці, що є дуже активним полем, оскільки люди постійно відкривають нові методи. Для фундаментального прикладу ознайомтесь з рівнянням візуалізації Каджі
  • Обчислення важливе в галузі обчислювальної геометрії, дослідження кривої та моделювання поверхні.

3

До цих інших відмінних відповідей я додаю цей момент: суворість у тестуванні .

Створюючи тестові приклади для деяких додатків, мені довелося скористатися обчисленням, щоб передбачити очікуваний час роботи, розміри пам'яті та вибрати оптимальні параметри при налаштуванні структур даних. Сюди входить розуміння очікуваної помилки округлення тощо.

Хоча статистика згадується в інших відповідях, я хотів би конкретно згадати алгоритми Монте-Карло , такі як алгоритми оптимізації та деякі економічні алгоритми потокової передачі , які базуються на математичних принципах, що включають обчислення.

Конкретні галузі, в яких я працював, де потрібно було обчислити, включають:

  • Фінанси (створення торгової платформи)

  • Страхування (чисельна інтеграція страхових полісів у сценарії "що-якщо" для розрахунку очікуваних втрат від полісу)

  • Логістика (оптимізація консолідації транспортних маршрутів)

  • Обробка сигналів


3

Обчислення - цілісна частина - використовується безпосередньо в КС як основа для роздумів про підсумовування. Якщо ви працюєте через будь-яку частину конкретної секції математики Кнута щодо підбиття підсумків, ви швидко розпізнаєте звичайні для числення умовності: розуміння деяких безперервних випадків дає вам інструменти для розгляду дискретного.

У багатьох сферах використання Вашого вивчення CS стосуються системи програмування, які відстежують зміни, або в деяких випадках намагаються передбачити майбутнє. Математика навколо цих систем укорінена в диференціальних рівняннях та лінійній алгебрі, а диференціальні рівняння - це ... числення. Є вчителі на кшталт Гіберта Странга, які виступають за те, щоб швидше перейти до частини диференціальних рівнянь, але це все ж підмножина підрахунку. Коли зміна залежить від зміни в будь-якій системі, вона починає бути нестабільною (і стабільною) способами, які є неінтуїтивними та дуже добре зрозумілими. Щоб зрозуміти, чому ваша розумна лінійна система веде себе нелінійними способами, вам або потрібні інструменти обчислення, або вам потрібно переосмислити їх для свого проблемного простору.

І нарешті, CS часто вимагає читання та розуміння роботи інших людей, а обчислення - це перше опромінення багатьох спільних словника, конвенцій та історії.


"У багатьох сферах використання вашого вивчення CS пов'язані системи програмування, які відстежують зміни, або в деяких випадках намагаються передбачити майбутнє" - я не вважаю, що це є репрезентативним для найбільш великих курсів досліджень CS.
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.