В 1937 году Тьюринг описал машину Тьюринга. С тех пор многие модели вычислений были описаны в попытке найти модель, которая похожа на настоящий компьютер, но все же достаточно проста для разработки и анализа алгоритмов.
В результате мы имеем дюжину алгоритмов для, например, SORT-задачи для разных моделей вычислений. К сожалению, мы даже не можем быть уверены, что реализация алгоритма со временем выполнения O (n) в слове RAM с разрешенными битовыми векторами операциями будет выполняться быстрее, чем реализация алгоритма со временем выполнения O (n⋅logn) в слово RAM (я говорю только о «хороших» реализациях, конечно).
Итак, я хочу понять, какая из существующих моделей является «лучшей» для разработки алгоритмов, и я ищу актуальный и подробный обзор моделей вычислений, который дает плюсы и минусы моделей и их близость к реальности.
источник
Ответы:
Я всегда считал стандартную модель Word RAM «лучшей» в вашем смысле. Каждый, кто научился программировать на языке, подобном C (или любым свободным эквивалентам, таким как Java и т. Д.), Имеет в виду именно эту модель, когда думает о компьютере.
Конечно, иногда вам нужны обобщения в зависимости от режимов, в которых вы работаете. Модель внешней памяти является важной, чтобы иметь в виду. Это относится не только к работе с дисками, но и к пониманию (заставляет вас заботиться) о кеше. Конечно, слишком серьезное отношение к нему может также привести к бессмысленным результатам, поскольку модель чистой внешней памяти не учитывает вычисления. Еще одно обобщение Word RAM - это параллелизм, но сейчас мы все немного запутались :)
Последнее замечание об алгоритмах и «реальности»: всегда имейте в виду, чего вы пытаетесь достичь. Когда мы работаем в алгоритмах, мы пытаемся решить самые сложные проблемы (например, SAT на 50 переменных или сортировка миллиардов чисел). Если вы пытаетесь отсортировать 200 чисел или решить SAT по 20 переменным, вам не нужен какой-либо сложный алгоритм. Вот почему большинство алгоритмов на самом деле являются тривиальными. Это не говорит ничего плохого об алгоритмических исследованиях - нас просто интересует та необычная 1/1000 реальных проблем, которые оказываются сложными ...
источник
Не существует ни одной полностью удовлетворительной вычислительной модели, в которой, к сожалению, можно было бы анализировать алгоритмы, даже в том, что можно рассматривать как традиционные условия. Это означает, что все данные легко доступны, а рабочее пространство практически не ограничено.
Многоленточная машина Тьюринга, безусловно, теоретически хорошо определена, и многие алгоритмы были разработаны и проанализированы в этой модели на протяжении многих лет. Однако для некоторых это недостаточно тесно связано с тем, как работают настоящие компьютеры, чтобы быть действительно хорошей моделью для использования в 21 веке. С другой стороны, модель word-RAM стала популярной и, похоже, более точно отражает работу современных компьютеров (операции со словами, а не битами, постоянный доступ к ячейкам памяти). Однако есть аспекты, которые не идеальны. Например, нет модели с одним словом RAM. Сначала нужно указать, какие операции со словами должны быть разрешены в постоянное время. Есть много вариантов для этого без единого принятого ответа. Во-вторых, размер слова w обычно устанавливается с ростом входного размера (который, по крайней мере, так же быстр, как log (n)), чтобы можно было адресовать любой элемент в памяти, используя постоянное количество слов. Это означает, что нужно представить себе бесконечный класс машин, на которых работает ваш алгоритм или, что еще хуже, что машина меняется по мере того, как вы передаете ей больше данных. По крайней мере, эта мысль сбивает с толку самых чистых среди моих учеников. Наконец, вы получаете несколько неожиданные результаты сложности с моделью «слово-память», которая может не совпадать с теми, которые изучаются студентом. Например, умножение двух n-битных чисел в этой модели на O (n) время, а простое чтение в n-битной строке является внезапно сублинейной временной операцией. Это означает, что нужно представить себе бесконечный класс машин, на которых работает ваш алгоритм или, что еще хуже, что машина меняется по мере того, как вы передаете ей больше данных. По крайней мере, эта мысль сбивает с толку самых чистых среди моих учеников. Наконец, вы получаете несколько неожиданные результаты сложности с моделью «слово-память», которая может не совпадать с теми, которые изучаются студентом. Например, умножение двух n-битных чисел в этой модели на O (n) время, а простое чтение в n-битной строке является внезапно сублинейной временной операцией. Это означает, что нужно представить себе бесконечный класс машин, на которых работает ваш алгоритм или, что еще хуже, что машина меняется по мере того, как вы передаете ей больше данных. По крайней мере, эта мысль сбивает с толку самых чистых среди моих учеников. Наконец, вы получаете несколько неожиданные результаты сложности с моделью «слово-память», которая может не совпадать с теми, которые изучаются студентом. Например, умножение двух n-битных чисел в этой модели на O (n) время, а простое чтение в n-битной строке является внезапно сублинейной временной операцией.
Сказав все это, если вы просто хотите знать, будет ли ваш алгоритм работать быстро, то, скорее всего, это будет делать :-)
источник
Модели просто модели. Я бы не стал слишком далеко продвигаться; они говорят что-то о некоторых аспектах ваших алгоритмов, но не всю правду.
Я хотел бы предложить , что вы просто использовать стандартную модель слова RAM в вашем анализе и реализации алгоритма и посмотреть , насколько хорошо он выполняет на практике.
(На самом деле, просто реализация вашего алгоритма без его запуска уже говорит вам об этом ... Во-первых, он реализуемо доказуемо.)
источник
Если ваша вычислительная задача больше связана с перемещением данных, чем с выполнением (арифметических) операций (наборы данных огромны, так что они даже не помещаются в основную память), то модель ввода / вывода (введена Аггарвалем и Виттером в 1988 году ) может быть очень точным. Для таких задач, как перестановка большого массива элементов в оперативной памяти, может помочь использование алгоритмов, оптимальных для ввода-вывода (в тщательной реализации).
Для современных многоядерных компьютеров параллельный вариант, представленный Arge, Goodrich, Nelson и Sitchinava в 2008 году, может быть точной моделью.
источник
Если вы имеете в виду «лучшую» вычислительную модель, которая сделает вашу жизнь более сложной, то вы можете использовать универсальную машину Тьюринга с 2 состояниями и 3 символами Wolfram.
ПРОФИ : нет, кроме ощущения ходьбы по тонкой грани между разумом и сумасшествием;
Минусы : тонн ...
:-D (только шутка, я в принципе согласен с предыдущими ответами ...)
источник
На более теоретическом примечании: в статье Ultimate теоретические модели нанокомпьютеров утверждается, что обратимая трехмерная сетчатая модель является оптимальной физической моделью вычислений, в том смысле, что никакая другая физическая модель не может быть асимптотически быстрее. Обсуждаются физические соображения, такие как скорость света, принцип Ландауэра и граница Бекенштейна .
Цитировать из резюме:
источник