Емпіричні результати в роботі CS


31

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


26
Коротка відповідь полягає в тому, що "інформатика" - це багато речей. Деякі частини на зразок (деяких) ШІ насправді є наукою. Інші частини є інженерними, а теоретична сторона - це (прикладна) математика. Частини HCI більше схожі на мистецтво. Інформатика - це широкий намет.
Аарон Рот

6
Якщо у вас є докази, навіщо вам навіть потрібні емпіричні результати?
Ар'ябхата

2
@Moron: Як довести, що алгоритм реалізований без його реалізації?
Юкка Суомела

8
Теоретичний CS схоже на математичну фізику, що також уникає емпіричних результатів. Якщо ви хочете щось подібне до експериментальної фізики, ви можете подивитися на дослідження в галузі програмного забезпечення, перевірки програм, систем баз даних тощо
Ярослав Булатов

4
причіпки: « науковий метод»?
Каве

Відповіді:


21

Математика також є наукою, і вам доведеться довго шукати, щоб знайти опубліковані емпіричні результати в цій галузі (хоча, мабуть, вони повинні бути деякі). Є й інші наукові сфери, де «леми та докази» оцінюються за досвідом, наприклад, квантова фізика. Зважаючи на це, більшість наук змішують теорію та практику (з різними співвідношеннями), і інформатика не є винятком.

Інформатика має коріння в математиці (див. Біографію Тьюрінга, наприклад, http://en.wikipedia.org/wiki/Alan_Turing ), і тому такі багато результатів (як правило, охрещені як у галузі "теоретичної інформатики") складаються в докази що комп’ютери в деяких обчислювальних моделях можуть вирішити певну проблему в заданому обсязі операцій (наприклад, конференції, такі як FOCS, STOC, SODA, SoCG тощо). Тим не менш, багато інших результатів інформатики пов'язані із застосуванням цих теорій до практичного життя шляхом аналізу експериментальних результатів (наприклад, таких конференцій, як WADS, ALENEX тощо).

Часто припускають, що ідеал - це хороший баланс між теорією та практикою, як у "Природознавстві", де спостереження за експериментами спонукає до породження нових теорій, які, в свою чергу, пропонують нові експерименти, щоб підтвердити або утвердити ці: як таких багато конференції намагаються прийняти як експериментальні, так і теоретичні результати (наприклад, ESA, ICALP, LATIN, CPM, ISAAC тощо). Підполе "Алгоритми та структури даних" в інформатиці може зазнати дисбалансу в тому сенсі, що "Теоретичні" конференції, як правило, більш високо оцінені, ніж експериментальні. Я вважаю, що це не вірно в інших підполях інформатики, таких як HCI або AI.

Сподіваюся, що це допомагає?


Дякую, це справді дуже допомагає. Мене останнім часом цікавить теорія графів, і в роботах, які я читав, майже жодна з них не мала коду чи експериментальних результатів. Ось чому я запитав. Коли ви займаєтеся чистою математикою, ви не можете дати експериментальних результатів, отже, докази є все. Але в графічній теорії не так важко кодувати свій алгоритм і давати корисні експериментальні результати! Візьмемо проблему MST. Поточні впровадження галузі - це Prim / Kruskal та Boruvska, але в документах описані більш потужні алгоритми, але вони не використовуються, оскільки ніхто їх ніколи не кодував.
Тото

1
Так, ви могли реалізувати алгоритми з теорії графів. Але для багатьох цікавих проблем в теорії графів, тобто, принаймні, твердий, це було б марно, оскільки лише дуже малі входи були б (прийнятно) обчислені через експоненціально-часову складність алгоритмів. NP
Матьє Шапель

1
@ toto Звичайно, те, що ви говорите, стосується деяких проблем, але для проблеми MST ви можете побачити результати (можливо дещо застарілі) впровадження деяких потужних алгоритмів у books.google.com/…
Abel Molina,

1
@toto. Це не єдина причина, чому використовуються більш старі алгоритми. Для точки зору TCS завжди краще, ніж O ( n log n ) . Але big-oh може приховати велику константу, що робить алгоритм непрактичним на практиці. Така робота спрямована на людей з TCS, і кодування алгоритму не забезпечить жодної вигоди або навіть збентежить читача. O(n)O(nlogn)
chazisop

24

Добре реалізувати алгоритми - це вміння, яке використовує інший набір інструментів, ніж просто доведення теорем. Багато алгоритмів, виявлених теоретичним співтовариством, справді були реалізовані на практиці (хоча я хотів би, щоб теоретичне співтовариство брало більшу роль у цьому процесі). Фізика не просить одних і тих же дослідників робити теорію та експериментувати, хоча очікується, що дві групи спілкуються. Чому б не розраховувати побачити такий самий розрив у інформатиці?

ДОБАВЛЕНО У РЕДАКТУ:

Розширюючи мій коментар у відповідь на питання Суреша про те, що я маю на увазі під «роллю» вище, в Bell Labs і AT&T Labs, дослідників алгоритмів рекомендували спілкуватися з людьми, що знаходяться в стадії розробки. Я цього не робив так багато, як, мабуть, мав, але я дістав хоч один папір із цього, і, думаю, було б добре для цієї галузі, якби в університетах і практиків було більше спілкування між людьми в теорії . Це не означає, що я думаю, що кожен, хто придумав алгоритм, повинен його кодувати (навіть якщо це практично).

З іншого боку, алгоритми кодування (або кодування їх учнями), які, на вашу думку, можуть бути практичними, можуть бути корисними для адаптації їх практиками. Розглянемо один приклад. У 1977 та 1978 рр. Лемпель та Зів написали дві технічні праці щодо нових алгоритмів стиснення даних. Усі їх ігнорували. У 1984 році Велч написав набагато менш технічний документ, який дещо покращив його ефективність і дав результати невеликого дослідження, порівнюючи його ефективність з іншими методами стиснення даних. Він був опублікований у журналі, прочитаному рядом програмістів, а алгоритм був заданий кількома рядками псевдокоду. Метод був швидко адаптований у багатьох місцях, врешті-решт, це призвело до сумнозвісної суперечки щодо інтелектуальної власності.

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


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

10
Я кажу, що теоретики повинні більше спілкуватися з практикуючими. Якщо подивитися на історію фізики, погані речі починають відбуватися, коли теоретики перестають спілкуватися з експерименталістами. Насправді я думаю, що зараз у нас є достатня кількість спілкування між двома групами, але не завадило б мати ще трохи.
Пітер Шор

3
Я не буду узагальнювати, але думаю, що багато дослідників просто не можуть кодувати / не люблять, і вони швидше дозволяють практичну роботу виконувати одному зі своїх студентів. Так буває зі мною та моїм наставником.
Тото

The tension associated to formal specification versus practical computation goes far back in STEM history. Sometimes formal specification leads (von Neumann's "On the theory of stationary detonation waves" [1948] versus subsequent computational simulations) and sometimes practical computation leads (Bowditch's "New American Practical Navigator" [1807] versus Gauss' "Disquisitiones generales circa superficies curvas" [1827]). The greatest mathematicians (Gauss and von Neumann in the examples cited above) have often combined formal specifications with practical computations.
John Sidles

3
The history of Lempel-Ziv, and looking at posts on StackOverflow, have just led me to formulate a very simple precept which might help get algorithms theorists come up with implemented vy practitioners: If you think your algorithm might be practical, put pseudocode in your paper.
Peter Shor

17

One research area that uses empirical methods and methods of Theoretical Computer Science is the field called "Experimental Algorithmics" or "Algorithm Engineering". Like Chris mentioned, high performance computing relies heavily on this as modern systems have complex cache and latency issues that we have a hard time modeling.

Gerth Brodal and Peter Sanders are good examples of researchers who maintain a foot in both the "proof" and "empirical" realms.

--Update 1/20/2013-- I would also mention a great presentation by Robert Sedgewick.


4
Both ALENEX and ESA encourage applied algorithms work, and there's also a conference (SAE) on this topic.
Suresh Venkat

What is SAE? That TLA is ungoogleable. Do you have a URL for it?
Peter Boothe

5
SAE is a typo for SEA, the Symposium on Experimental Algorithms.
David Eppstein

1
You can also do Algorithm Engineering in a more rigorous way, i.e. refine theoritcal models so they fit reality but stil do precise analyses. It's hard, though.
Raphael

@Raphael You would have to model a sphere around each VonNeuman compute node and explicitly put and get memory objects with a latency cost proportional to the distance; random access is O(CubeRoot(n)), the diameter of the memory sphere, speed of light is your best case latency.
Chad Brewbaker

12

This depends on the discipline you are in; as Jeremy states, there is a spectrum of theory vs. practice.

Topics like complexity tend to be weighted towards the theory side, as often the goal is to find a boundary for the space or runtime. Implementing an algorithm in C++ and then running it a bunch of times isn't going to prove that a problem is NP-complete.

As a polar opposite, high-performance computing (with conferences like Supercomputing) are all empirical; no one would ever submit a proof to an HPC publication as there is too much variability with regard to memory hierarchy and kernel overhead.

So what seems like the same question (How long does something take to run?) will be approached two completely different ways depending on the goals, techniques, community, etc. See Poul-Henning Kamp's You're Doing It Wrong for an example of the dissonance.


10

In programming languages research many ideas for new programming language constructs or new type checking mechanisms stem from theory (perhaps informed by experience in practice, perhaps not). Often a paper is written about such mechanisms from a formal/theoretical/conceptual perspective. That's relatively easy to do. Next comes the first hurdle: implementing the new constructs in the context of an existing compiler and experimenting with it, in terms of efficiency or flexibility. This too is relatively easy.

But can we then say that the programming construct constitutes an advance to the science of programming? Can we say that it makes writing programs easier? Can we say that it makes the programming language better?

The answer is no. A proper empirical evaluation involving scores of experienced programmers over large periods of time would be needed to answer those kinds of questions. This research is hardly ever done. The only judge of the value of a programming language (and its constructs) is the popularity of the language. And for programming language purists, this goes against what our hypotheses tell us.


7

Perhaps I'm missing the motivation for your question but there are many examples of empirical results motivating research, algorithms and other results.

MP3 use psychoacoustic to optimize the algorithm for human encoding.

Plouffe gives an account of discovering the BBP spigot algorithm for the digits of π where he recounts the use of whatever Integer Relation Algorithm Mathematica was using to discover the formula.

Along the same line, Bailey and Borwein are big proponents of experimental mathematics. See "The Computer as Crucible: An Introduction to Experimental Mathematics", "Computational Excursions in Number Theory" amongst others. One might argue that this is more experimental Mathematics but I would argue that at this level the discussion the distinction is semantic.

Phase transitions of NP-Complete problems are another area where empirical results are heavily used. See Monasson, Zecchina, Kirkpatrick, Selman and Troyansky and Gent and Walsh for starters, though there are many, many more (see here for a brief survey).

Though not quite on the level of Theoretical Computer Science or Mathematics, there is a discussion here about how the unix utility grep's average case runtime beats optimized worst case algorithms because it relies on the fact that it's searching human readable text (grep does as bad or worst on files with random characters in them).

Even Gauss used experimental evidence to give his hypothesis of the Prime Number Theorem.

Data mining (Bellkor's solution to the Netflix Prize to make a better recommendation system) might be argued to be a theory completely based on empirical evidence. Artificial Intelligence (genetic algorithms, neural networks, etc.) relies heavily on experimentation. Cryptography is in a constant push and pull between code makers and code breakers. I've really only named a few and if you relax your definition of empirical, then you could cast an even wider net.

My apologies for being so scattered in answering your question but I hope I've given at least a few examples that are helpful.

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