Я заздалегідь прошу вибачення за те, що даю занадто багато деталей, але я збираюся суперечити людям.
Про 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)=q⋅2⋅(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|)