универсальность по-прежнему оставалась бы глубоким свойством реальности? Вероятно, нет. Говоря в общем, можно критиковать это узкое понятие универсальности, потому что оно относит любую задачу к разряду находящихся в репертуаре компьютера, не принимая во внимание физические ресурсы, которые придется израсходовать компьютеру на выполнение этой задачи. Так, например, мы рассмотрели пользователя виртуальной реальности, который готов отправиться в виртуальную реальность с остановкой мозга на миллиарды лет и повторным его запуском: в течение этого времени компьютер вычислит, что показывать дальше. Такое отношение вполне уместно при обсуждении верхних пределов виртуальной реальности. Но при рассмотрении ее
Таким образом, факт
Итак, законы физики не только позволяют (или, как я доказал,
Насколько эффективно можно передать данные аспекты реальности? Другими словами, какие вычисления можно практически выполнить за данное время и при данных финансовых возможностях? Это основной вопрос теории вычислительной сложности, которая, как я уже сказал, занимается изучением ресурсов, необходимых для выполнения данных вычислительных задач. Теория сложности все еще в достаточной степени не объединена с физикой и потому не дает много количественных ответов. Однако она достигла успеха в определении полезного приближенного различия между
В соответствии со стандартным определением для «легкости обработки» важно не действительное время, затрачиваемое на умножение конкретной пары чисел, а важен факт, что при применении того же самого метода даже к большим числам, время увеличивается не слишком резко. Возможно это удивит вас, но этот весьма косвенный метод определения легкости обработки очень хорошо работает на практике для многих (хотя и не всех) важных классов вычислительных задач. Например, при умножении нетрудно увидеть, что стандартный метод можно использовать для умножения чисел, скажем, в десять раз больших, Приложив совсем незначительные дополнительные усилия. Ради доказательства предположим, что каждое элементарное умножение одной цифры на другую занимает у определенного компьютера одну микросекунду (включая время, необходимое для сложения, переходов и других операций, сопровождающих каждое элементарное умножение). При умножении семизначных чисел 4220851 и 2594209 каждую из семи цифр первого числа нужно умножить на каждую из семи цифр второго числа. Таким образом, общее время, необходимое для умножения (если операции выполняются последовательно), будет равно семи, умноженному на семь, или 49 микросекундам. При введении чисел, примерно в десять раз больших, содержащих по восемь цифр, время, необходимое для их умножения, будет равно 64 микросекундам: увеличение составляет всего 31%.
Ясно, что числа из огромного диапазона — безусловно содержащего любые числа, которые когда-либо были измерены как численные значения физических переменных — можно перемножить за крошечную долю секунды. Таким образом, умножение действительно легко поддается обработке для любых целей в пределах физики (или, по крайней мере, в пределах существующей физики). Вероятно, за пределами физики могут появиться практические причины умножения гораздо больших чисел. Например, для шифровальщиков огромный интерес представляют произведения простых чисел, состоящих примерно из 125 цифр. Наша гипотетическая машина могла бы умножить два таких простых числа, получив произведение, состоящее из 250 цифр, примерно за одну сотую секунды. За одну секунду она могла бы перемножить два тысячезначных числа, а современные компьютеры легко могут осуществить более точный расчет этого времени. Только некоторые исследователи эзотерических областей чистой математики заинтересованы в выполнении таких непостижимо огромных умножений, однако, мы видим, что даже у них нет причины считать умножение трудно обрабатываемым.
Напротив,
Самый очевидный метод разложения на множители — делить вводимое число на все возможные множители, начиная с 2 и продолжая каждым нечетным числом, до тех пор, пока введенное число не разделится без остатка. По крайней мере, один из множителей (принимая, что введенное число не является простым) не может быть больше квадратного корня введенного числа, что позволяет оценить, сколько времени может занять этот метод. В рассматриваемом нами случае наш компьютер найдет меньший из двух множителей, 2 594 209, примерно за одну секунду. Однако, если вводимое число будет в десять раз больше, а его квадратный корень примерно в три раза больше, то разложение его на множители по этому методу займет в три раза больше времени. Другими словами, увеличение вводимого числа на один разряд уже