Еквівалентність визначень Колмогорова-Складність


20

Існує багато способів визначення Колмогорова-Складності , і зазвичай всі ці визначення вони еквівалентні аж до постійної добавки. Тобто, якщо K1 і K2 є функціями складності колмогорова (визначеними різними мовами або моделями), то існує константа c така, що для кожного рядка x , |K1(x)K2(x)|<c . Я вважаю, це тому, що для кожної функції складності Колмогорова K і для кожного x це виконуєтьсяK(x)|x|+c , для деякої постійноїc .

Мене цікавлять наступні визначення для K , засновані на машинах Тьюрінга

  1. кількість станів : Визначте K1(x) як мінімальне число q таке, що TM із q станами виводить x на порожній рядок.
  2. K2(x)xMMK2(x)=min|M|Mx

Чи еквівалентні та ? Яке відношення між ними, і яке краще розуміє поняття складності Колмогорова, якщо вони не рівнозначні.K1K2

Особливо, що мене - це швидкість збільшення з , яка, здається, не є надлінійною (або принаймні лінійною при постійній такою, що , а не ). Розглянемо найпростіший TM, який видає - той, що просто кодує як частину його станів і функцій переходів. відразу бачимо, що . Однак кодування тієї ж машини набагато більше, і я отримую тривіальну межу -.K2xC>1K2<C|x||x|+cx K 1 ( x ) | х | + 1 K 2 ( x ) | х | журнал | х |xxK1(x)|x|+1K2(x)|x|log|x|


Існує більше машин з n станами, а їх середній розмір становить щонайменше n 2 , тому навряд чи вони відрізняються лише постійною добавкою. 2n2nn2
Каве

1
Добре відома межа, що для деяких фіксованих c не залежно від x . Це тому, що ми можемо кодувати х у мову, що не містить префіксу, просто подвоївши кожен біт x, а потім закінчивши 01 . Це займає 2 | х | + 2 біта для зображення x . Таким чином, оскільки K 2 визначається в термінах універсальної машини без префіксу, K 2 ( x )K2(x)c+2|x|cxxx012|x|+2xK2 для деяких фіксованих c . Це можна вдосконалити за допомогою більш розумного способу кодування x у вільну мову префікса. K2(x)2|x|+2+ccx
Карл Маммерт

Я не бачу як. Здається, що або задано як частину кодування (як необроблені дані), або ви повинні побудувати x за допомогою свого стану машини. Перший варіант, здається, обман, і я не бачу, як він може бути порівнянним з другим варіантом (який має на увазі K 1 )xxK1
Ran G.

@Ran G .: Ключовим моментом є теорема інваріантності, описана на en.wikipedia.org/wiki/Invariance_theorem . Якщо я можу описати будь-яку ефективну систему, що має темпи зростання тоді універсальна машина Тьюрінга (як ви описуєте для K 2 ) буде відповідати цьому в межах постійної добавки. Універсальна машина є один , який приймає M є введенням і повертає результат , M , якщо M привали. 2|x|K2MMM
Карл Маммерт

Відповіді:


6

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

Про K(x)K(x)+c

Той факт, що як правило, походить від перекладача мови опису №2 на мову опису №1, а не з перекладу з програм №2 в програми №1.K1(x)K2(x)+c

Наприклад, і ви отримуєте цю нерівність просто так:KC(x)KPython(x)+cpy2c

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

Тоді ваша константа буде чимось на зразок 528 + 490240688, де 528 - це кількість біт для цього коду, а 490240688 - це розмір офіційного інтерпретатора Python, написаний в C. Звичайно, вам потрібно лише інтерпретувати те, що можливо в Ваша мова опису для Python, щоб Ви могли зробити краще, ніж 69 Мб :-)cpy2c528+490240688528490240688

Важливо те, що ви можете записувати програму Python лінійно у свій код C. Наприклад, мова, де потрібно вставити "BANANA" між кожним символом, не є дуже хорошою програмою опису, а властивість тоді не відповідає дійсності. (Якщо мова опису дозволяє вам записувати дані в окремий файл або в блок, ця проблема зникає)

Чому ваш є хибнимK1(x)=q

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

Отже, жоден і K 2 , ймовірно, не еквівалентний, але це в основному вина К 1 . Я думаю, що ми можемо довести, що для всіх a > 0 існує c a така, що K 1 ( x ) a | х | + c a . Звичайно, будь-якого a < 1 достатньо, щоб спростувати той факт, що K 1 не є дійсною функцією, оскільки це означатиме, що ми можемо кодувати більше всіх 2 n можливих рядків довжиниK1K2K1a>0caK1(x)a|x|+caa<1K12n в a n + c a біт.nan+ca

Але розмір неймовірно щільно пов'язаний при будівництві машин Тьюрінга. Ідея полягає в тому, що в блоці станів є b 2 b способів знайти переходи для кожного стану, і це краще, ніж у звичайних способах 2 b можна заповнити b бітів. Потім ви можете зберігати в кожному блоці журналу 2 b біт інформації. (не 2 журнал 2 b, тому що вам потрібно входити та виходити з блоку так чи інакше)bb2b2bblog2b2log2b

Так, так ... З блоками розміром ви могли б довести K 1 ( x ) a | х | + c a . Але я вже занадто багато писав про те, чому кількість станів не є дійсною функцією складності Колмогорова. Якщо ви хочете, щоб я докладно розробив, я.21/aK1(x)a|x|+ca

Тепер про K2

Наївна описова мова відповідає приблизно (тобто log 2 q для кожного наступного стану та деталі про запис і завершення).K2(x)=q2(log2q+2)log2q

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

Однак якщо ви зберігаєте той самий ви можете скористатися тією ж методикою, яку я використовував у попередній частині, щоб зберегти кілька біт, але я, здається, застряг у K 2 ( x ) a | х | журнал | х | + c (для будь-якого a > 0 ) .. можливо менше, ніж log | х | , навіть, але отримати O ( | x | ) здається важким. (І я думаю, що це має бути | x | , навіть не O ( |K2K2(x)a|x|log|x|+ca>0log|x|O(|x|)|x| .)O(|x|)


ви стверджуєте, що не є функцією складності колгорогова? Це дуже дивно для мене, оскільки K 1 - це фактично визначення, яке використовується в деякому курсі введення в обчислюваність, який я колись брав (не те, що він нічого не говорить про його правильність). K1K1
Ран Г.

Добре той факт, що досить тривожно. Врахуйте це: є2nможливих слів зnбітів, і ви можете їх кодувати за допомогою1K1(x)12|x|+c2nnбіт? Це означає, що2n=O(2 112n+c(кодування має бути ін'єктивним)2n=O(212n)
jmad

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