В алгоритмической теории информации (подраздел компьютерной науки и математики ) колмогоровская сложность объекта, например фрагмента текста, — это длина кратчайшей компьютерной программы (на предопределенном языке программирования ), которая выдает объект в качестве выходных данных. Это мера вычислительных ресурсов, необходимых для задания объекта, и она также известна как алгоритмическая сложность , сложность Соломонова–Колмогорова–Чайтина , сложность размера программы , описательная сложность или алгоритмическая энтропия . Она названа в честь Андрея Колмогорова , который впервые опубликовал эту тему в 1963 году [1] [2] , и является обобщением классической теории информации.
Понятие сложности Колмогорова может быть использовано для формулировки и доказательства результатов невозможности, родственных диагональному аргументу Кантора , теореме о неполноте Гёделя и проблеме остановки Тьюринга . В частности, никакая программа P, вычисляющая нижнюю границу для сложности Колмогорова каждого текста, не может вернуть значение, существенно большее, чем собственная длина P (см. раздел § Теорема о неполноте Чайтина); следовательно, никакая отдельная программа не может вычислить точную сложность Колмогорова для бесконечного числа текстов. Сложность Колмогорова — это длина окончательно сжатой версии файла (т. е. всего, что можно поместить в компьютер). Формально это длина кратчайшей программы, из которой можно восстановить файл. Мы обсуждаем невычислимость сложности Колмогорова, какие формальные лазейки это нам оставляет, последние подходы к вычислению или приближению сложности Колмогорова, какие подходы проблематичны, а какие подходы жизнеспособны. [3]
Рассмотрим следующие две строки из 32 строчных букв и цифр:
abababababababababababababababab
, и4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
Первая строка имеет короткое описание на английском языке, а именно "write ab 16 times", которое состоит из 17 символов. Вторая строка не имеет очевидного простого описания (использующего тот же набор символов), кроме записи самой строки, т. е. "write 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7", которая состоит из 38 символов. Следовательно, можно сказать, что операция записи первой строки имеет "меньшую сложность", чем запись второй.
Более формально, сложность строки — это длина кратчайшего возможного описания строки в некотором фиксированном универсальном языке описания (чувствительность сложности относительно выбора языка описания обсуждается ниже). Можно показать, что сложность Колмогорова любой строки не может быть больше, чем на несколько байт больше длины самой строки. Строки, подобные примеру abab выше, чья сложность Колмогорова мала относительно размера строки, не считаются сложными.
Сложность Колмогорова может быть определена для любого математического объекта, но для простоты область действия этой статьи ограничена строками. Сначала мы должны указать язык описания для строк. Такой язык описания может быть основан на любом языке программирования, таком как Lisp , Pascal , или Java . Если P — это программа, которая выводит строку x , то P — это описание x . Длина описания — это просто длина P как строки символов, умноженная на количество бит в символе (например, 7 для ASCII ).
В качестве альтернативы мы могли бы выбрать кодировку для машин Тьюринга , где кодировка — это функция, которая сопоставляет каждой машине Тьюринга M битовую строку < M >. Если M — это машина Тьюринга, которая на входе w выводит строку x , то конкатенированная строка < M > w является описанием x . Для теоретического анализа этот подход больше подходит для построения подробных формальных доказательств и, как правило, предпочтителен в исследовательской литературе. В этой статье обсуждается неформальный подход.
Любая строка s имеет по крайней мере одно описание. Например, вторая строка выше выводится псевдокодом :
функция GenerateString2() возвращает "4c1j5b2p0cv4w1x8rx2y39umgw5q85s7"
тогда как первая строка выводится с помощью (гораздо более короткого) псевдокода:
функция GenerateString1() возвращает "ab" × 16
Если описание d ( s ) строки s имеет минимальную длину (т. е. использует наименьшее количество бит), оно называется минимальным описанием s , а длина d ( s ) (т . е. количество бит в минимальном описании) является сложностью Колмогорова s , обозначаемой K ( s ). Символически,
Длина кратчайшего описания будет зависеть от выбора языка описания; однако эффект смены языков ограничен (результат, называемый теоремой об инвариантности ).
Существует два определения сложности Колмогорова: простая и безпрефиксная . Простая сложность — это минимальная длина описания любой программы, и обозначается , а безпрефиксная сложность — это минимальная длина описания любой программы, закодированной в безпрефиксном коде, и обозначается . Простая сложность более интуитивна, но безпрефиксную сложность легче изучать.
По умолчанию все уравнения выполняются только до некоторой аддитивной константы. Например, на самом деле означает, что , то есть .
Пусть будет вычислимой функцией, отображающей конечные двоичные строки в двоичные строки. Это универсальная функция тогда и только тогда, когда для любого вычислимого мы можем закодировать функцию в "программе" , такой что . Мы можем думать о ней как о программном интерпретаторе, который принимает начальный сегмент, описывающий программу, за которым следуют данные, которые программа должна обработать.
Одна из проблем с простой сложностью заключается в том , что , поскольку интуитивно говоря, нет общего способа сказать, где разделить выходную строку, просто посмотрев на конкатенированную строку. Мы можем разделить ее, указав длину или , но это потребует дополнительных символов. Действительно, для любого существует такое, что . [4]
Обычно неравенства с простой сложностью имеют член , подобный с одной стороны, тогда как те же неравенства со сложностью без префикса имеют только .
Основная проблема с простой сложностью заключается в том, что в программу вкрадывается что-то лишнее. Программа не только представляет что-то своим кодом, но и представляет свою собственную длину. В частности, программа может представлять двоичное число до , просто используя свою собственную длину. Другими словами, это как если бы мы использовали символ завершения для обозначения того, где заканчивается слово, и поэтому мы используем не 2 символа, а 3. Чтобы исправить этот дефект, мы вводим безпрефиксную сложность Колмогорова. [5]
Код без префиксов — это подмножество, такое, что если взять любые два разных слова в наборе, ни одно из них не является префиксом другого. Преимущество кода без префиксов в том, что мы можем построить машину, которая читает слова из кода вперед в одном направлении, и как только она считывает последний символ слова, она знает , что слово закончено, и ей не нужно возвращаться назад или использовать символ завершения.
Определим машину Тьюринга без префиксов как машину Тьюринга, которая поставляется с кодом без префиксов, таким образом, что машина Тьюринга может считывать любую строку из кода в одном направлении и останавливать чтение, как только она считывает последний символ. После этого она может вычислять на рабочей ленте и записывать на ленту записи, но она больше не может перемещать свою считывающую головку.
Это дает нам следующий формальный способ описания K. [6 ]
Обратите внимание, что некоторые универсальные машины Тьюринга могут не быть запрограммированы с помощью префиксных кодов. Мы должны выбрать только универсальную машину Тьюринга без префиксов.
Сложность строки без префикса — это самый короткий префиксный код, который выводит машина :
Существуют некоторые языки описания, которые являются оптимальными в следующем смысле: если дано любое описание объекта на языке описания, это описание может быть использовано на оптимальном языке описания с постоянными накладными расходами. Константа зависит только от задействованных языков, а не от описания объекта или описываемого объекта.
Вот пример оптимального языка описания. Описание будет состоять из двух частей:
Говоря более техническим языком, первая часть описания представляет собой компьютерную программу (а именно: компилятор для языка объекта, написанный на языке описания), а вторая часть является входными данными для этой компьютерной программы, которая выдает объект в качестве выходных данных.
Теорема об инвариантности выглядит следующим образом: для любого языка описания L оптимальный язык описания по крайней мере столь же эффективен, как L , с некоторыми постоянными накладными расходами.
Доказательство: Любое описание D в L можно преобразовать в описание на оптимальном языке, сначала описав L как компьютерную программу P (часть 1), а затем используя исходное описание D в качестве входных данных для этой программы (часть 2). Общая длина этого нового описания D′ составляет (приблизительно):
Длина P — константа, не зависящая от D. Таким образом, существует максимум константа накладных расходов, независимо от описываемого объекта. Следовательно, оптимальный язык универсален с точностью до этой аддитивной константы.
Теорема : Если K 1 и K 2 являются функциями сложности относительно языков с полным по Тьюрингу описанием L 1 и L 2 , то существует константа c – которая зависит только от выбранных языков L 1 и L 2 – такая, что
Доказательство : По симметрии достаточно доказать, что существует некоторая константа c такая, что для всех строк s
Теперь предположим, что есть программа на языке L 1 , которая действует как интерпретатор для L 2 :
функция InterpretLanguage( строка p )
где p — программа на языке L 2. Интерпретатор характеризуется следующим свойством:
InterpretLanguage
на входе p возвращает результат выполнения p .Таким образом, если P — это программа на языке L 2 , которая является минимальным описанием s , то InterpretLanguage
( P ) возвращает строку s . Длина этого описания s равна сумме
InterpretLanguage
, которую мы можем принять за константу c .Это доказывает искомую верхнюю границу.
Алгоритмическая теория информации — это область компьютерной науки, изучающая сложность Колмогорова и другие меры сложности строк (или других структур данных ).
Концепция и теория сложности Колмогорова основана на важнейшей теореме, впервые открытой Рэем Соломоновым , который опубликовал ее в 1960 году, описав ее в "Предварительном отчете об общей теории индуктивного вывода" [7] как часть своего изобретения алгоритмической вероятности . Он дал более полное описание в своих публикациях 1964 года "Формальная теория индуктивного вывода", часть 1 и часть 2 в Information and Control . [8] [9]
Андрей Колмогоров позже независимо опубликовал эту теорему в Problems Inform. Transmission [10] в 1965 году. Грегори Чайтин также представляет эту теорему в J. ACM – статья Чайтина была представлена в октябре 1966 года и пересмотрена в декабре 1968 года, и цитирует как статьи Соломонова, так и Колмогорова. [11]
Теорема гласит, что среди алгоритмов, которые декодируют строки из их описаний (кодов), существует оптимальный. Этот алгоритм для всех строк допускает коды такой же короткой длины, какую допускает любой другой алгоритм, вплоть до аддитивной константы, зависящей от алгоритмов, но не от самих строк. Соломонов использовал этот алгоритм и длины кодов, которые он допускает, чтобы определить «универсальную вероятность» строки, на которой может быть основан индуктивный вывод последующих цифр строки. Колмогоров использовал эту теорему для определения нескольких функций строк, включая сложность, случайность и информацию.
Когда Колмогоров узнал о работе Соломонова, он признал приоритет Соломонова. [12] В течение нескольких лет работа Соломонова была более известна в Советском Союзе, чем в Западном мире. Однако общее мнение в научном сообществе состояло в том, чтобы ассоциировать этот тип сложности с Колмогоровым, который был озабочен случайностью последовательности, в то время как алгоритмическая вероятность стала ассоциироваться с Соломоновым, который сосредоточился на прогнозировании, используя свое изобретение универсального априорного распределения вероятностей. Более широкую область, охватывающую описательную сложность и вероятность, часто называют сложностью Колмогорова. Ученый-компьютерщик Мин Ли считает это примером эффекта Матфея : «...каждому, кто имеет, будет дано больше...» [13]
Существует несколько других вариантов сложности Колмогорова или алгоритмической информации. Наиболее широко используемый вариант основан на самоограничивающих программах и в основном принадлежит Леониду Левину (1974).
Аксиоматический подход к колмогоровской сложности, основанный на аксиомах Блюма (Blum 1967), был представлен Марком Бургиным в статье, представленной для публикации Андреем Колмогоровым. [14]
Мы пишем be , где означает некоторый фиксированный способ кодирования кортежа строк x и y.
Мы опускаем аддитивные факторы . Этот раздел основан на. [6]
Теорема.
Доказательство. Возьмите любую программу для универсальной машины Тьюринга, используемую для определения простой сложности, и преобразуйте ее в программу без префиксов, сначала закодировав длину программы в двоичном виде, а затем преобразуйте длину в кодировку без префиксов. Например, предположим, что длина программы равна 9, тогда мы можем преобразовать ее следующим образом: где мы удваиваем каждую цифру, затем добавляем код завершения. Затем универсальная машина Тьюринга без префиксов может считывать любую программу для другой машины следующим образом: Первая часть программирует машину для имитации другой машины и является постоянным накладным расходом . Вторая часть имеет длину . Третья часть имеет длину .
Теорема : Существует такое, что . Более кратко, . Аналогично, , и . [ необходимо разъяснение ]
Доказательство. Для простой сложности просто напишите программу, которая просто копирует входные данные в выходные. Для префиксной сложности нам нужно сначала описать длину строки, прежде чем выписывать саму строку.
Теорема. (дополнительные информационные границы, субаддитивность)
Обратите внимание, что нет способа сравнить and или or или . Существуют строки, которые легко описать целиком , но очень сложно описать ее подстроки.
Теорема. (симметрия информации) .
Доказательство. Одна сторона простая. Для другой стороны с нам нужно использовать подсчетный аргумент (стр. 38 [15] ).
Теорема. (информация не увеличивается) Для любой вычислимой функции имеем .
Доказательство. Запрограммируйте машину Тьюринга на чтение двух последовательных программ, одна из которых описывает функцию, а другая — строку. Затем запустите обе программы на рабочей ленте, чтобы получить , и запишите ее.
На первый взгляд может показаться тривиальной задачей написать программу, которая может вычислить K ( s ) для любого s , например, следующую:
функция KolmogorovComplexity( string s) для i = 1 до бесконечности: для каждой строки p длины ровно i, если isValidProgram(p) и estimate(p) == s возвращает i
Эта программа перебирает все возможные программы (перебирая все возможные строки и рассматривая только те, которые являются допустимыми программами), начиная с самой короткой. Каждая программа выполняется для поиска результата, полученного этой программой, сравнивая его с входными данными s . Если результат совпадает, то возвращается длина программы.
Однако это не сработает, поскольку некоторые из протестированных программ p не завершатся, например, если они содержат бесконечные циклы. Нет способа избежать всех этих программ, протестировав их каким-либо образом перед выполнением из-за невычислимости проблемы остановки .
Более того, ни одна программа, какой бы сложной она ни была, не может вычислить функцию K. Это доказывается ниже.
Теорема : Существуют строки произвольно большой сложности Колмогорова. Формально: для каждого натурального числа n существует строка s с K ( s ) ≥ n . [примечание 1]
Доказательство: В противном случае все бесконечное множество возможных конечных строк можно было бы сгенерировать конечным множеством [примечание 2] программ со сложностью ниже n бит.
Теорема : K не является вычислимой функцией . Другими словами, не существует программы, которая принимает любую строку s в качестве входных данных и выдает целое число K ( s ) в качестве выходных данных.
Следующее доказательство от противного использует простой язык, подобный Паскалю, для обозначения программ; для простоты доказательства предположим, что его описание (т.е. интерпретатор ) имеет длину1 400 000 бит. Предположим для отступления, что есть программа
функция KolmogorovComplexity( строка s)
которая принимает в качестве входных данных строку s и возвращает K ( s ). Все программы имеют конечную длину, поэтому для простоты доказательства предположим, что это7 000 000 000 бит. Теперь рассмотрим следующую программу длиной1288 бит:
функция GenerateComplexString() для i = 1 до бесконечности: для каждой строки s длины ровно i, если KolmogorovComplexity(s) ≥ 8000000000 возвращает s
Используя KolmogorovComplexity
в качестве подпрограммы, программа пробует каждую строку, начиная с самой короткой, пока не вернет строку с колмогоровской сложностью не менее8 000 000 000 бит, [примечание 3] т.е. строка, которая не может быть создана никакой программой короче, чем8 000 000 000 бит. Однако общая длина приведенной выше программы, которая выдала s, составляет всего7 001 401 288 бит, [примечание 4] что является противоречием. (Если код KolmogorovComplexity
короче, противоречие остается. Если он длиннее, константу, используемую в, GenerateComplexString
всегда можно изменить соответствующим образом.) [примечание 5]
Приведенное выше доказательство использует противоречие, похожее на противоречие парадокса Берри : " 1 Наименьшее 2 положительное 3 целое число 4 такое 5 , что 6 не может быть 7 определено 9 за 10 меньше 11 чем 12 двадцать 13 английских 14 слов". Также возможно показать невычислимость K с помощью редукции из невычислимости проблемы остановки H , поскольку K и H эквивалентны по Тьюрингу . [16]
Существует следствие, шутливо называемое в сообществе специалистов по языкам программирования « теоремой полной занятости », утверждающее, что не существует идеального компилятора, оптимизирующего размер.
Цепное правило [17] для сложности Колмогорова гласит, что существует константа c такая, что для всех X и Y :
В нем говорится, что кратчайшая программа, воспроизводящая X и Y , не более чем на логарифмический член больше, чем программа для воспроизведения X и программа для воспроизведения Y при заданном X. Используя это утверждение, можно определить аналог взаимной информации для колмогоровской сложности .
Вычислить верхние границы для K ( s ) просто — просто сжимаем строку s каким-либо методом, реализуем соответствующий декомпрессор на выбранном языке, объединяем декомпрессор со сжатой строкой и измеряем длину полученной строки, а точнее, размер самораспаковывающегося архива на заданном языке.
Строка s сжимаема числом c, если ее описание не превышает | s | − c бит. Это эквивалентно утверждению, что K ( s ) ≤ | s | − c . В противном случае s несжимаема числом c . Строка, несжимаемая числом 1, называется просто несжимаемой — по принципу ящика , который применяется, поскольку каждая сжатая строка отображается только на одну несжатую строку, несжимаемые строки должны существовать, поскольку существует 2 n битовых строк длины n , но только 2 n − 1 более коротких строк, то есть строк длиной меньше n , (т. е. длиной 0, 1, ..., n − 1). [примечание 6]
По той же причине большинство строк являются сложными в том смысле, что их нельзя существенно сжать – их K ( s ) не намного меньше, чем | s |, длина s в битах. Чтобы сделать это точным, зафиксируем значение n . Имеется 2 n битовых строк длины n . Равномерное распределение вероятностей в пространстве этих битовых строк присваивает каждой строке длины n точно равный вес 2 − n .
Теорема : При равномерном распределении вероятностей в пространстве битовых строк длины n вероятность того, что строка несжимаема с помощью c, составляет по крайней мере 1 − 2 − c +1 + 2 − n .
Для доказательства теоремы заметим, что число описаний длины, не превышающей n − c, задается геометрической прогрессией:
Осталось по крайней мере
битовые строки длины n , которые несжимаемы с помощью c . Чтобы определить вероятность, разделите на 2 n .
Согласно приведенной выше теореме (§ Сжатие), большинство строк являются сложными в том смысле, что их нельзя описать каким-либо существенно «сжатым» способом. Однако оказывается, что тот факт, что конкретная строка является сложной, не может быть формально доказан, если сложность строки превышает определенный порог. Точная формализация такова. Во-первых, зафиксируем конкретную аксиоматическую систему S для натуральных чисел . Аксиоматическая система должна быть достаточно мощной, чтобы с определенными утверждениями A о сложности строк можно было связать формулу F A в S. Эта ассоциация должна обладать следующим свойством:
Если F A доказуемо из аксиом S , то соответствующее утверждение A должно быть истинным. Эта «формализация» может быть достигнута на основе нумерации Гёделя .
Теорема : Существует константа L (которая зависит только от S и от выбора языка описания) такая, что не существует строки s , для которой утверждение
может быть доказано в S. [18] [ 19]
Идея доказательства : Доказательство этого результата смоделировано на основе самореферентной конструкции, используемой в парадоксе Берри . Сначала мы получаем программу, которая перечисляет доказательства в пределах S , и мы указываем процедуру P , которая принимает в качестве входных данных целое число L и печатает строки x , которые находятся в доказательствах в пределах S оператора K ( x ) ≥ L . Затем, устанавливая L больше длины этой процедуры P , мы получаем, что требуемая длина программы для печати x, как указано в K ( x ) ≥ L как не менее L , тогда меньше величины L , поскольку строка x была напечатана процедурой P . Это противоречие. Таким образом, система доказательств S не может доказать K ( x ) ≥ L для произвольно большого L , в частности, для L, большего длины процедуры P , (которая конечна).
Доказательство :
Мы можем найти эффективное перечисление всех формальных доказательств в S с помощью некоторой процедуры
функция NthProof( int n )
которая принимает на вход n и выводит некоторое доказательство. Эта функция перечисляет все доказательства. Некоторые из них являются доказательствами для формул, которые нас здесь не интересуют, поскольку каждое возможное доказательство на языке S производится для некоторого n . Некоторые из них являются формулами сложности вида K ( s ) ≥ n , где s и n являются константами на языке S . Существует процедура
функция NthProofProvesComplexityFormula( int n )
который определяет, доказывает ли n -е доказательство на самом деле формулу сложности K ( s ) ≥ L. Строки s и целое число L в свою очередь вычисляются с помощью процедуры:
функция StringNthProof( int n )
функция ComplexityLowerBoundNthProof( int n )
Рассмотрим следующую процедуру:
функция GenerateProvablyComplexString( int n ) для i от 1 до бесконечности: если NthProofProvesComplexityFormula(i) и ComplexityLowerBoundNthProof(i) ≥ n возвращает StringNthProof( i )
При наличии n эта процедура перебирает все доказательства, пока не найдет строку и доказательство в формальной системе S формулы K ( s ) ≥ L для некоторого L ≥ n ; если такого доказательства не существует, она зацикливается навсегда.
Наконец, рассмотрим программу, состоящую из всех этих определений процедур и основного вызова:
СгенерироватьДоказуемоСложнуюСтроку( n 0 )
где константа n 0 будет определена позже. Общая длина программы может быть выражена как U +log 2 ( n 0 ), где U — некоторая константа, а log 2 ( n 0 ) представляет собой длину целочисленного значения n 0 , при разумном предположении, что оно закодировано в двоичных цифрах. Мы выберем n 0 больше длины программы, то есть так, чтобы n 0 > U +log 2 ( n 0 ). Это, очевидно, верно для достаточно большого n 0 , поскольку левая часть растет линейно по n 0 , в то время как правая часть растет логарифмически по n 0 вплоть до фиксированной константы U .
Тогда в S не может быть получено доказательство формы « K ( s )≥ L » с L ≥ n 0 , как можно видеть из косвенного аргумента : если бы можно было вернуть значение ≥ n 0 , то цикл внутри в конечном итоге завершился бы, и эта процедура вернула бы строку s, такую чтоComplexityLowerBoundNthProof(i)
GenerateProvablyComplexString
Это противоречие, QED.
В результате вышеприведенная программа с выбранным значением n 0 должна выполняться бесконечно.
Аналогичные идеи используются для доказательства свойств постоянной Хайтина .
Принцип минимальной длины сообщения статистического и индуктивного вывода и машинного обучения был разработан CS Wallace и DM Boulton в 1968 году. MML является байесовским (т. е. он включает в себя предшествующие убеждения) и информационно-теоретическим. Он обладает желаемыми свойствами статистической инвариантности (т. е. вывод преобразуется с повторной параметризацией, например, из полярных координат в декартовы координаты), статистической согласованности (т. е. даже для очень сложных проблем MML будет сходиться к любой базовой модели) и эффективности (т. е. модель MML будет сходиться к любой истинной базовой модели настолько быстро, насколько это возможно). CS Wallace и DL Dowe (1999) показали формальную связь между MML и алгоритмической теорией информации (или сложностью Колмогорова). [20]
Случайность Колмогорова определяет строку (обычно битовую ) как случайную тогда и только тогда, когда каждая компьютерная программа , которая может создать эту строку, по крайней мере такой же длины, как сама строка. Чтобы сделать это точным, необходимо указать универсальный компьютер (или универсальную машину Тьюринга ), так что «программа» означает программу для этой универсальной машины. Случайная строка в этом смысле «несжимаема», поскольку невозможно «сжать» строку в программу, которая короче самой строки. Для каждого универсального компьютера существует по крайней мере одна алгоритмически случайная строка каждой длины. [21] Однако является ли конкретная строка случайной, зависит от конкретного выбранного универсального компьютера. Это происходит потому, что универсальный компьютер может иметь конкретную строку, жестко закодированную в себе, и программа, работающая на этом универсальном компьютере, может затем просто ссылаться на эту жестко закодированную строку, используя короткую последовательность битов (т. е. намного короче самой строки).
Это определение можно расширить, чтобы определить понятие случайности для бесконечных последовательностей из конечного алфавита. Эти алгоритмически случайные последовательности можно определить тремя эквивалентными способами. Один способ использует эффективный аналог теории меры ; другой использует эффективные мартингалы . Третий способ определяет бесконечную последовательность как случайную, если префиксная колмогоровская сложность ее начальных сегментов растет достаточно быстро — должна быть константа c такая, что сложность начального сегмента длины n всегда равна по крайней мере n − c . Это определение, в отличие от определения случайности для конечной строки, не зависит от того, какая универсальная машина используется для определения префиксной колмогоровской сложности. [22]
Для динамических систем скорость энтропии и алгоритмическая сложность траекторий связаны теоремой Брудно, согласно которой равенство выполняется почти для всех . [23]
Можно показать [24] , что для выходных данных источников информации Маркова сложность Колмогорова связана с энтропией источника информации. Точнее, сложность Колмогорова выхода источника информации Маркова, нормализованная по длине выхода, сходится почти наверняка (по мере того, как длина выхода стремится к бесконечности) к энтропии источника .
Теорема. (Теорема 14.2.5 [25] ) Условная сложность Колмогорова двоичной строки удовлетворяет условию , где — функция двоичной энтропии (не путать со скоростью энтропии).
Функция сложности Колмогорова эквивалентна решению проблемы остановки.
Если у нас есть останавливающийся оракул, то колмогоровскую сложность строки можно вычислить, просто перебирая каждую останавливающуюся программу в лексикографическом порядке, пока одна из них не выведет строку.
Другое направление гораздо сложнее. [26] [27] Оно показывает, что при заданной функции сложности Колмогорова мы можем построить функцию , такую, что для всех больших , где — функция сдвига Busy Beaver (также обозначается как ). Изменяя функцию при меньших значениях , мы получаем верхнюю границу для , что решает проблему остановки.
Рассмотрим эту программу , которая принимает входные данные в виде и использует .
Докажем от противного, что для всех больших .
Пусть будет Busy Beaver длины . Рассмотрим эту (безпрефиксную) программу, которая не принимает никаких входных данных:
Пусть строка, выведенная программой, будет .
Программа имеет длину , где происходит от длины Busy Beaver , происходит от использования (без префикса) дельта-кода Элиаса для числа , и происходит от остальной части программы. Следовательно, для всех больших . Далее, поскольку существует только определенное количество возможных программ с длиной , мы имеем по принципу ящика . По предположению, , поэтому каждая строка длины имеет минимальную программу со временем выполнения . Таким образом, строка имеет минимальную программу со временем выполнения . Далее, эта программа имеет длину . Это противоречит тому, как было построено.
Исправьте универсальную машину Тьюринга , ту же, что использовалась для определения (безпрефиксной) сложности Колмогорова. Определите (безпрефиксную) универсальную вероятность строки, которая будет Другими словами, это вероятность того, что при наличии равномерно случайного двоичного потока на входе универсальная машина Тьюринга остановится после считывания определенного префикса потока и выведет .
Примечание. не означает, что входной поток равен , а означает, что универсальная машина Тьюринга остановится в какой-то момент после чтения начального сегмента , не считывая никаких дальнейших входных данных, и что, когда она остановится, она запишет данные на выходную ленту.
Теорема. (Теорема 14.11.1 [25] )
Условная сложность Колмогорова двух строк , грубо говоря, определяется как сложность Колмогорова x при условии, что y является вспомогательным входом процедуры. [28] [29]
Существует также сложность , зависящая от длины, которая является сложностью x при известной/входной длине x . [30] [31]
for
цикл в конечном итоге завершится.KolmogorovComplexity
KolmogorovComplexity
длина n бит, то константу m, используемую в, GenerateComplexString
необходимо адаптировать для удовлетворения n +1 400 000 +1218 + 7·log 10 ( m ) < m , что всегда возможно, поскольку m растет быстрее, чем log 10 ( m ).{{cite book}}
: |journal=
проигнорировано ( помощь )