Як чітко сформулювати обчислювальну задачу?


20

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

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

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

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


Уточнення

Щоб зробити питання більш конкретним, припустимо, що вони знають основні термінології з математики / CS, такі як набори, функції, графіки, списки тощо на рівні студента 1-го / 2-го курсу студента CS (що стосується людей, які в мене є розум). Наприклад, вони прочитали такий вступний підручник, як Ахо та Уллман (хоча вони, можливо, не зрозуміли його повністю).


2
Я думаю, що це хороше питання, але я не знаю, чи є відповідь хороша. Мені здається, що це щось на зразок запитання "Чи існує спосіб, коли ми можемо навчити когось, хто не є вченим-комп’ютером, мислити, як комп'ютер?" І відповідь на це - «так, зробіть їх інформатиком». Однак, деякі дослідники програмної інженерії, можливо, займалися подібними дослідженнями.
jmite

3
Крім того, я думаю, що саме для цього є певні випадки використання. Якщо хтось не розуміє, як правильно сформулювати свою проблему, перелічіть декілька сценаріїв того, що вони хотіли б виконати даній програмі, та очікувану поведінку у кожному конкретному випадку. Потім програміст розробляє специфікацію з цього. Це сказало, що я теоретична людина, а не інженер, тому, якщо я помиляюся, сміливо виправляйте мене.
jmite

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

1
Зважаючи на це, я вважаю, що для цього потрібен певний спосіб мислення, який не легко здобути, особливо дорослі. Я намагався змусити людей відмовитися від технічних речей і пояснити проблему якомога простіше, що стосується повсякденних предметів. Проблема полягає в тому, що вони зазвичай забудуть якесь обмеження, або вони зроблять це звуком як операція, яка O (N) у їхній фактичній системі є O (1) тощо. Тож я закінчу щось дуже близьке до жорсткого визначення неправильної проблеми.
svinja

2
певним чином, те, що просять, суперечить, тому що чітко формулювати проблеми - це саме одна з основних засвоєних навичок, яка відокремлює мирян від фахівців / професіоналів ...
vzn

Відповіді:


3

Хороший ресурс про / для цього, досить відомий науковцями, але не настільки відомий поза межами фахівців, - це Математична література Дональд Е. Кнут, Трейсі Л. Ларрабі та Пол М. Робертс. є опублікована книга, відео з лекціями та набір конспектів. він більше написаний з точки зору людей, які намагаються освоїти математичну писемність, наприклад, для створення паперів, але всі поради дуже застосовні до випадків, коли миряни намагаються точно сформулювати проблеми. математичне письмо, хоча грізне навчання - це науковий підхід до жорсткого визначення / формулювання - і, як деталі книги, вирішення , наприклад, за допомогою алгоритмів або доказів - обчислювально-алгоритмічні проблеми.

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


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

yw; Ви кажете, що це дві різні речі, і в словах / фразах вони є, але & я кажу, що вони [запозичити фразу програмного забезпечення] "щільно пов'язані"
vzn

3

щойно наткнувся на цей приємний / охайний, незвичний, відносно новий / невідомий реферат на своїй домашній сторінці Еммануела Віола , професора CS в Північно-Східному університеті), очевидно, не опублікованого в інших місцях. 41pp. він починається з дуже базових математичних понять, наприклад, імплікації, а потім поширюється на всі такі важкі теми, як теорема Ерд-Секереса і теорія Рамзі .


0

Купіть книгу "Алгоритми та структури даних" від Роберта Лафора.

У цій книзі кожен алгоритм пояснюється як історія, дуже схожа на поезію. Потім дайте людині версію алгоритму Lafore, а пізніше версію CLRS.

Можливо, так, людина отримає відчуття, як перекласти від інтуїтивного опису до суворого.

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