Мощность множества алгоритмов


15

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

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

Какова мощность множества алгоритмов?


1
Как упомянул Юваль Фильмус, существует много машин Тьюринга. Но существует континуум многих неоднородных семейств булевых схем, поскольку они могут вычислять любую булевозначную функцию. Но это, вероятно, не то, что вы имели в виду под «алгоритмом».
Восстановить Монику

Ответы:


28

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

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

Для полного доверия вам следует опасаться, что некоторые натуральные числа могут не кодировать действительные программы, поэтому алгоритмов может быть меньше, чем натуральных чисел. (Для получения бонуса кредита, вы можете также быть интересно , если это возможно , что две различные натуральные числа , представляют один и тот же алгоритм.) Однако print 1, print 2, print 3и так далее, все алгоритмы и все разные, так что, по крайней мере счетно бесконечно много алгоритмов.

Таким образом, мы заключаем, что множество алгоритмов счетно бесконечно.


Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Жиль "ТАК - перестань быть злым"

10

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

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


7

по крайней мере, непрерывное количество стратегий для решения конкретной проблемы

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

Итак, давайте выбросим это из окна. Понять, с какой бесконечностью мы имеем дело, очень просто (и интуитивно понятно, даже если ваш друг никогда не слышал о какой-либо теоретической информатике):

  • Любой алгоритм может быть реализован с использованием любого языка, полного тьюринга; выберите свой любимый яд из реальных языков (Java, C, ...), чтобы немного мистифицировать это. Все это эквивалентно теоретическому набору алгоритмов, которые кто-либо когда-либо мог придумать. Обратите внимание, что каждый алгоритм сам по себе конечен, т. Е. Не существует алгоритмов, которые бы записывали бесконечно много символов.
  • Не думайте о сложных машинах Тьюринга. Ваш язык выбора использует простые файлы для хранения своего исходного кода. Каждый файл представляет собой набор маленьких чисел (или байтов). Важно то, что эти числа являются определенно целыми, а не непрерывными. (Если вы пурист и хотите остаться в теоретическом режиме, замените слово «байт» на «символ», это ничего не изменит.) Если вы боитесь больших программ, которые распределены по нескольким файлам (и библиотекам и прочее), а затем просто заархивируйте их в один сжатый архив (т. е. в один файл).
  • Теперь вы можете назначить одно целое число каждому файлу там, биективно. Мы просто записываем весь беспорядок в битах / байтах файла один за другим, и в итоге получаем очень большое число, выраженное в двоичном виде. В далеком прошлом люди действительно делали это: они печатали скомпилированные двоичные программы в виде длинных списков шестнадцатеричных чисел в журналах; вы бы вводили их, но никогда не видели их как числа (часто удобно сгруппированные в наборы из 8 или 16 цифр, чтобы облегчить набор).
  • Итак: каждая программа может быть представлена ​​целым числом, хотя и сколь угодно большим. Работает и другой способ - каждое целое число можно сразу и тривиально перенести в файл и сгенерировать в компиляторе (очевидно, только небольшая часть из них будет действительными программами, но сейчас это не имеет значения для нас).
  • В конце программы и, следовательно, алгоритмы являются подмножеством целых чисел; следовательно, может существовать только исчисляемое количество.
  • NB, тот факт, что существует много разных реализаций одного алгоритма, в нашу пользу, то есть многие из этих целых чисел сгущаются в (разные представления) одного и того же алгоритма. Таким образом, если бы счетная бесконечность уже не была наименьшей бесконечностью, нам пришлось бы беспокоиться о том, чтобы число алгоритмов было еще меньше, но, конечно, не больше (то есть неисчислимо).

Конкретной проблемой были торговые стратегии (не алгоритмы, а стратегии)

Я не знаю, что твой друг имеет в виду под «стратегией»; Я предполагаю, что он имеет в виду что-то вроде алгоритма, но недостаточно детально сформулированный, чтобы взломать его на компьютер? Или что как-то зависит от "интуиции" человека во время казни? Если так, то это просто несущественные детали. Человечество еще не нашло какого-либо описания процессов, которое было бы более мощным или большим, чем «алгоритмы» в том смысле, в котором мы используем CS.


3
Re: «« Континуум », вероятно, должен означать действительные числа ... использование« по крайней мере »вместе с этим словом абсурдно сверх»: в этом нет ничего «сверх», не говоря уже о «нелепости», поэтому , Существует больше наборов действительных чисел, чем реальных чисел, поэтому вполне нормально говорить о наборах, которые больше, чем континуум.
Руах

6

Посмотрите нумерацию Гёделя , это основной факт в информатике, что алгоритмы счетны, как и путем расширения рекурсивно перечислимых множеств.

Поскольку алгоритмы исчисляются, легко показать, что не существует алгоритма для проверки каждого набора в формальной системе (назначить значение истинности для задачи). Это было бы эквивалентно назначению алгоритма для каждой функции, отображающей набор проблем в логические значения. Однако набор этих функций неисчислим (тривиально той же мощности, что и набор мощностей множества задач, поэтому неисчислим).

Я надеюсь, что это дает некоторую интуицию относительно того, почему алгоритмы должны быть «менее мощными», чем просто любая функция, и поэтому может быть исчисляемым (давайте проигнорируем гипотезу континуума здесь).


2

Если не начинать с требования, что стратегию необходимо реализовать с помощью алгоритма, и игнорировать реальные эффекты дискретизации, можно, например, принять следующее в качестве параметризованной торговой стратегии:

abab

ab


0

Если мы понимаем алгоритмы как компьютерные программы, написанные в двоичном формате *, то число алгоритмов - это число (целых) двоичных чисел. Таким образом, количество алгоритмов - это число целых чисел.

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


1
Что это добавляет к существующим ответам?
Дэвид Ричерби

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

@DavidRicherby Это добавляет краткости.
user558317

1
@JohnColeman Утверждение невозможности доказательства без доказательства? Я имел в виду, что а) ОП, вероятно, не волнует, так как б) это вопрос определения. Кажется, в этом вопросе содержится предположение: «поскольку машины Тьюринга работают с конечным набором алфавита и лента должна быть индексируемой, то есть счетной, невозможно иметь бесчисленное количество алгоритмов».
user558317

0

Другие ответы уже объясняли, что в стандартной модели вычислений (машины Тьюринга, лямбда-исчисление и т. Д.) Набор алгоритмов счетно бесконечен.

Однако существуют и другие теоретические модели вычислений, в которых набор алгоритмов бесконечно бесконечен. Например, машины Блюма – Шуба – Смейла имеют бесконечно бесконечный набор команд 1 , поэтому их набор алгоритмов также неисчислимо бесконечен.


1 Чтобы быть точным, сам набор команд конечен, но он параметризован с использованием бесконечно бесконечного множества (рациональных функций).


Разве рациональные функции не исчисляются?
Бен Милвуд,

@BenMillwood Можете ли вы кратко набросать доказательство того, почему это может иметь место?
Марк С

x0Rf:xx0

О, я предполагал, что константы тоже должны быть рациональными. Не беспокойся в таком случае.
Бен Милвуд

-1

поскольку машины Тьюринга работают с конечным набором алфавита, а лента должна быть индексируемой, то есть счетной

Учитывая определенный размер, существует конечное число машин Тьюринга, а их количество исчисляется многими. Счетное множество чисел, если они конечны, является счетным. Размер алфавита является фактором, определяющим число машин Тьюринга, но размер ленты - нет. Если бы алфавиту было позволено иметь счетное количество символов, то было бы неисчислимо много машин (каждое действительное число могло бы быть закодировано как последовательность символов).

.5.5


n

И что бы это значило иметь бесчисленно много алгоритмов? Вы можете записать только много. В каком смысле вы не можете записать алгоритм?
Дэвид Ричерби

@DavidRicherby Да, я кое-что перепутал. Но можно использовать «алгоритм» в общем смысле для обозначения последовательности выборов. И в этом смысле выбор цифры на основе ввода является «алгоритмом», хотя и не вычисляемым.
накопление

В информатике «алгоритм» и «вычислимый» - это одно и то же. Алгоритм - это машина Тьюринга.
Дэвид Ричерби
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.