точек необходимы для однозначного определения многочлена степени ; например, две точки на плоскости определяют ровно одну линию.
Сколько точек требуется для однозначного определения вычислимой функции , учитывая длину программы, которая вычисляет на фиксированном языке? (т.е. оценка колмогоровской сложности ).f f
Идея состоит в том, что, по крайней мере теоретически, можно доказать правильность программы, выполнив достаточное количество тестов.
Если есть программа длины , которая вычисляет , существует ограничение на число функций , которые могут быть вычислены с длиной источника не более .L f L
Следовательно, нужно «только» доказать, что:
- может быть вычислено с длиной источника
- L не вычисляет никакую другую функцию, вычисляемую в байтах или меньше (путем тестирования)
Эта идея, вероятно, не имеет практических последствий (границы обязательно должны быть экспоненциальными).
Ответы:
(Это подразумевалось как комментарий, но продолжалось долго). Очень интересный вопрос Если вы готовы подумать о других мерах сложности, кроме Колмогорова, то в теории обучения есть некоторые ответы, которые могут вас удовлетворить. Я оставляю это для экспертов в области.
Например, если я не ошибаюсь, в «Теории обучаемого» Валиант доказал, что булева функция может быть реконструирована по полиномиальному числу «положительных точек» по размеру ее формулы k-CNF (для любого фиксированного k и я имею в виду с «положительными точками» те формы ).( х1, … , ХN, 1 )
В TAOCP 7.2.1.6 Кнута удивительным образом показано (с использованием шаблона рождественской елки), что для восстановления монотонной булевой функции (т. Е. Неубывания по каждой переменной) вам нужно точно баллов.( n+1⌊ n / 2 ⌋ + 1)
источник
Чтобы продолжить в соответствии с ответом Дейго, стандартные границы сложности выборки из теории обучения говорят вам, что если вы удовлетворены тем, что нашли программу, которая «приблизительно верна», вам не нужно пытаться использовать очень много пунктов вообще. Допустим , мы кодирующая программы в двоичном виде , так что есть только программы длины д. Давайте предположим также , что существует некоторое распределение по входных примеров D . Возможно, ваша цель состоит в том, чтобы найти программу, в которой вы почти уверены, что она почти правильная («Вероятно, приблизительно правильная», то есть, как в модели обучения PAC Valiants). То есть вы хотите запустить алгоритм, который будет принимать небольшое количество выборок x ∼ D вместе с f ( x )2d D x∼D f(x) И будет с вероятностью , по меньшей мере выходной какая - то программа P , которая совпадает с F , по меньшей мере, ( 1 - е ) доли входов , взятых из D . (1−δ) P f (1−ϵ) D
Мы просто нарисуем примеров x ∼ D и выведем любую программу P длины ≤ d, которая согласуется с f на всех примерах. (Одно гарантированно существует, так как мы предполагаем, что f имеет колмогоровскую сложность не более d ) ...m x∼D P ≤d f f d
Какова вероятность того, что конкретная программа которая не согласна с f на более чем 1/3 части примеров, согласуется с m выбранными нами примерами? Это самое большее ( 1 - ϵ ) м . Мы бы хотели, чтобы эта вероятность была не более δ / 2 d, чтобы мы могли взять объединение, связанное со всеми 2 d программами, и сказать, что с вероятностью не менее 1 - δ ни одна «плохая» программа не согласуется с нашими нарисованными примерами. , Решая, мы видим, что достаточно взять только m ≥ 1P f ϵ m (1−ϵ)m δ/2d 2d 1−δ
примеры. (то есть только линейно много в колмогоровской сложностиf...)
Кстати, подобные аргументы можно использовать для оправдания «бритвы Оккама»: учитывая фиксированное количество наблюдений, среди всех теорий, которые их объясняют, вы должны выбрать ту, которая имеет наименьшую колмогоровскую сложность, поскольку вероятность переобучения минимальна.
Конечно, если вы хотите проверить только одну фиксированную программу таким образом, вам нужны только примеры ...O(log(1/δ)/ϵ)
источник
Вот тривиальный ответ: предполагая, что , тогда вам нужно знать значение f вообще | N | указывает однозначно определить ф . Поэтому подход, который вы набросали, вам совсем не поможет, если только вы не знаете, что длина L программы очень мала: намного короче, чем lg | N | биты.L≥lg|N| f |N| f L lg|N|
Рассмотрим семейство функций , где f i определяется как функция f i ( x ) = 1, если i = x, и f i ( x ) = 0, если i ≠ x . Обратите внимание, что колмогоровская сложность вычислений f i составляет около lg | N | биты, так как вы можете жестко закодировать значение IF={fi:i∈N} fi fi(x)=1 i=x fi(x)=0 i≠x fi lg|N| i в исходном коде, а затем все, что вам нужно, это простой условный оператор ( дополнительно).O(1)
Однако вы не сможете отличить функцию от функции «все нули», если не протестируете ее на входе i . Вы не можете отличить f i от f j, если вы не проверите на входе i или j . Таким образом, вам нужно оценить F на всех | N | входы, чтобы однозначно определить, с каким f i мы имеем дело. (Хорошо, технически, вам нужно оценить это при | N | - 1 входах, но неважно.)fi i fi fj i j f |N| fi |N|−1
источник
Вы можете сделать программу произвольно долго. Таким образом, для любой программы вы можете решить, является ли ее язык эквивалентным языку этой программы. Вы не можете сделать это по теореме Райс.
источник