Чи існує теорія відповіді на "найпростішу програму для вирішення проблеми"?


10

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

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

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

Я думаю, що теорія повинна принаймні визначати відношення "просте" чи "простіше, ніж".


Зараз я переконаний, що мені слід заглянути в Складність Колмогорова. Однак я хотів би пояснити, що було у мене на думці, коли я ставив запитання.

Коли я вдосконалюю програму, я намагаюся зменшити непотрібні з'єднання між різними частинами програми (можливо, повторно розділяючи частини, щоб було менше або слабкіше з'єднання). Оскільки з’єднання скорочуються, програма відчуває себе "простішим". Звідси вибір слова "простий", коли я формулюю питання. Цілком ймовірно, що розмір програми також зменшується, але це хороший побічний ефект, а не головна мета. Навмисно, процес вдосконалення не може тривати назавжди. Є момент, на якому я повинен зупинитися. Якщо, лише розглядаючи "структуру" (вибачте за інше невизначене поняття) або "відношення", я можу переконати себе, що більше нічого не можна зробити?

Тут міститься кращий опис мого поняття складності.

Олаф Спорнс (2007) Складність . Академія , 2 (10): 1623



4
Можливо, вас зацікавить концепція логічної глибини Беннета. Лі та Вітаній присвятили книгу 7.7 у своїй книзі про складність Колмогорова.
Мартін Шварц

2
@YuNing: Що ви розумієте під "найпростішим", якщо не розміром?
Роб

1
@Yu Ning: А як же бути, а не найпростішою найменшою програмою для отримання випуску, це машина Тюрінга з найкращою мінімальною довжиною опису - так, щоб було баланс між "малою" та "структурою"?
Росс Снайдер

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

Відповіді:


16

Ця проблема вивчається в Алгоритмічній теорії інформації. Те, що ви визначаєте, називається складністю Колмогорова-Хайтіна.

http://en.wikipedia.org/wiki/Kolmogorov_complexity

І здається, що поняття простоти, яке вам потрібно, можна формалізувати через поняття міри складності, яке формалізується аксіомами Блума.

http://en.wikipedia.org/wiki/Blum_axioms

Здається також, що можна узагальнити складність Колмогорова, щоб вжити інших заходів щодо складності. Дивіться посилання нижче. (Стаття Вікіпедії про складність Колмогорова стосується цього питання.)

Бургін1990- Узагальнена складність колмогорова та інші заходи подвійної складності Кібернетика та системний аналіз Том 26, Число 4, 481-490


Як каже @Jukka Suomela, питання трохи не визначене. Тому мені цікаво, що я навряд чи зможу отримати повну відповідь на запитання. Однак, оскільки ця відповідь є досить інформативною і є важливою частиною питання, я все-таки позначаю її як відповідь.
Yuning

До речі, чи можете ви далі вказати на застосування теми, зокрема, якщо у вас є формальна специфікація програми, чи може вона знайти найменший розмір із специфікації?
Yuning

1

Відповідь на перше питання - Так , є теорія, це алгоритмічна теорія інформації, і вони називаються Елегантними програмами (за Григорієм Чайтіном).

Для другого питання про те, "чи я отримую найпростішу програму"?

Відповіді немає , тому що це незаперечне питання, довести, що програма - це елегантна програма, неможливо.

Я поставив відповідь, щоб додати згадку про елегантні програми .


-1

Існують різні види підходу, щоб вирішити, що таке простий код, а що ні.

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

На мій досвід, наша команда працювала в системі, і ми знайшли "просту" процедуру в Oracle (не більше 50 рядків) ... і ми намагалися це зрозуміти, на повне розуміння знадобилося 2 місяці (і кілька зустрічей). це не за складністю коду, а за логікою, що стоїть за кожною змінною.

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

Отже "Найпростіша програма для вирішення проблеми?" можна розділити на:

а) простота коду (чіткий код), але це занадто суб'єктивно.

б) надскладність функції, якщо у мене проблема X, то я повинен вирішити задачу DX (Delta X), щоб вирішити її, де DX має тенденцію до X.

Наприклад, якщо моя проблема (одна) "очистити яблуко", і я повинен це зробити на PHP (і мові),

якщо мені дуже пощастило і PHP має функцію function_peel_apple (), то це найпростіший код, коли-небудь X = 1 DX = 1, просто зателефонуйте на функцію, і це все !.

Навпаки, якщо мені не так пощастило, але існують функції function_peel () і function_get_apple (), то X = 1 (одна проблема) і DX = 2 (дві задачі).

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

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