Сложность по Колмогорову: зачем вам больше байтов, чем сама строка?

13

Я читал статью Википедии о сложности Колмогорова ( благодаря этому вопросу ), в которой говорится:

Можно показать, что колмогоровская сложность любой строки не может быть более чем на несколько байтов больше, чем длина самой строки.

Зачем вам когда-либо что-то большее, чем сама строка, чтобы описать это?

loneboat
источник

Ответы:

13

Точное значение колмогоровской сложности зависит от языка, выбранного для представления строк. Этот язык должен быть завершен по Тьюрингу, поэтому представление всех строк как самих себя не вариант.

По принципу голубя, если существует хотя бы одна строка длиной не более , представление которой короче, чем она сама, то существует также как минимум одна строка длиной не более n , представление которой длиннее, чем она сама. (Представление является алгоритмом сжатия.)NN

У вас может быть язык описания, где каждая строка имеет представление, которое не более чем на один бит длиннее самого себя: начинайте каждое представление с бита, который указывает либо «печатать буквально», либо «интерпретировать». Не все языки описания настолько просты.

СС

Жиль "ТАК - прекрати быть злым"
источник
6

Рассмотренное здесь описание строки является входом для некоторой универсальной машины Тьюринга. Вы можете думать об этом как о программе на Си. Строка hello worldне сам по себе, сформировать программу C, но следующий один делает: int main(int argc, char *argv[]) { printf("hello world"); }. Как видите, накладные расходы постоянны, но не равны нулю.

Юваль Фильмус
источник
3
В качестве дополнительной тонкости, в C (или в идеализированном Turing-complete C) невозможно печатать произвольные строки с O (1) пробелами, поскольку некоторые символы в строковых литералах нуждаются в кавычках.
Жиль "ТАК - перестань быть злым"