Кто-то в дискуссии поднял вопрос о том, что (он считает) может быть по крайней мере непрерывное количество стратегий для решения конкретной проблемы. Конкретной проблемой были торговые стратегии (не алгоритмы, а стратегии), но я думаю, что это не относится к моему вопросу.
Это заставило меня задуматься о мощности множества алгоритмов. Я немного искал, но ничего не нашел. Я думал, что, поскольку машины Тьюринга работают с конечным набором алфавита, и лента должна быть индексируемой, то есть счетной, невозможно иметь бесчисленное количество алгоритмов. Моя теория множеств, по общему признанию, ржавая, поэтому я совсем не уверен, что мои рассуждения верны, и я, вероятно, не смогу доказать это, но это интересная мысль.
Какова мощность множества алгоритмов?
Ответы:
Алгоритм неформально описывается как конечная последовательность письменных инструкций для выполнения некоторой задачи. Более формально, они идентифицированы как машины Тьюринга, хотя вы могли бы также описать их как компьютерные программы.
Точный формализм, который вы используете, не имеет большого значения, но фундаментальный момент заключается в том, что каждый алгоритм может быть записан в виде конечной последовательности символов, где символы выбираются из некоторого конечного набора, например, римских букв, ASCII или нулей и единиц. Для простоты, допустим, нули и единицы. Любая последовательность нулей и единиц - это просто натуральное число, записанное в двоичном виде. Это означает, что существует не более чем счетная бесконечность алгоритмов, поскольку каждый алгоритм может быть представлен как натуральное число.
Для полного доверия вам следует опасаться, что некоторые натуральные числа могут не кодировать действительные программы, поэтому алгоритмов может быть меньше, чем натуральных чисел. (Для получения бонуса кредита, вы можете также быть интересно , если это возможно , что две различные натуральные числа , представляют один и тот же алгоритм.) Однако
print 1
,print 2
,print 3
и так далее, все алгоритмы и все разные, так что, по крайней мере счетно бесконечно много алгоритмов.Таким образом, мы заключаем, что множество алгоритмов счетно бесконечно.
источник
Множество алгоритмов счетно бесконечно. Это потому, что каждый алгоритм имеет конечное описание, скажем, как машина Тьюринга.
Тот факт, что алгоритм имеет конечное описание, позволяет нам вводить один алгоритм в другой, и это является основой теории вычислимости. Это позволяет нам, например, сформулировать проблему остановки.
источник
«Континуум», вероятно, должен означать действительные числа ... использование «по крайней мере» вместе с этим словом абсурдно. Чтобы быть немного языком в рот: счетное бесконечное довольно большое, но неисчислимое бесконечное ... больше, чем большое. Значительно больше. Непостижимо.
Итак, давайте выбросим это из окна. Понять, с какой бесконечностью мы имеем дело, очень просто (и интуитивно понятно, даже если ваш друг никогда не слышал о какой-либо теоретической информатике):
Я не знаю, что твой друг имеет в виду под «стратегией»; Я предполагаю, что он имеет в виду что-то вроде алгоритма, но недостаточно детально сформулированный, чтобы взломать его на компьютер? Или что как-то зависит от "интуиции" человека во время казни? Если так, то это просто несущественные детали. Человечество еще не нашло какого-либо описания процессов, которое было бы более мощным или большим, чем «алгоритмы» в том смысле, в котором мы используем CS.
источник
Посмотрите нумерацию Гёделя , это основной факт в информатике, что алгоритмы счетны, как и путем расширения рекурсивно перечислимых множеств.
Поскольку алгоритмы исчисляются, легко показать, что не существует алгоритма для проверки каждого набора в формальной системе (назначить значение истинности для задачи). Это было бы эквивалентно назначению алгоритма для каждой функции, отображающей набор проблем в логические значения. Однако набор этих функций неисчислим (тривиально той же мощности, что и набор мощностей множества задач, поэтому неисчислим).
Я надеюсь, что это дает некоторую интуицию относительно того, почему алгоритмы должны быть «менее мощными», чем просто любая функция, и поэтому может быть исчисляемым (давайте проигнорируем гипотезу континуума здесь).
источник
Если не начинать с требования, что стратегию необходимо реализовать с помощью алгоритма, и игнорировать реальные эффекты дискретизации, можно, например, принять следующее в качестве параметризованной торговой стратегии:
источник
Если мы понимаем алгоритмы как компьютерные программы, написанные в двоичном формате *, то число алгоритмов - это число (целых) двоичных чисел. Таким образом, количество алгоритмов - это число целых чисел.
* Доказательство того, что машины Тьюринга могут выполнять все алгоритмы и что компьютеры могут запускать любые машины программ Тьюринга, сделает этот ответ излишне долгим. Первое может зависеть от определения алгоритма, но я не думаю, что вы используете неисчислимые торговые стратегии.
источник
Другие ответы уже объясняли, что в стандартной модели вычислений (машины Тьюринга, лямбда-исчисление и т. Д.) Набор алгоритмов счетно бесконечен.
Однако существуют и другие теоретические модели вычислений, в которых набор алгоритмов бесконечно бесконечен. Например, машины Блюма – Шуба – Смейла имеют бесконечно бесконечный набор команд 1 , поэтому их набор алгоритмов также неисчислимо бесконечен.
1 Чтобы быть точным, сам набор команд конечен, но он параметризован с использованием бесконечно бесконечного множества (рациональных функций).
источник
Учитывая определенный размер, существует конечное число машин Тьюринга, а их количество исчисляется многими. Счетное множество чисел, если они конечны, является счетным. Размер алфавита является фактором, определяющим число машин Тьюринга, но размер ленты - нет. Если бы алфавиту было позволено иметь счетное количество символов, то было бы неисчислимо много машин (каждое действительное число могло бы быть закодировано как последовательность символов).
источник