Как алгоритмы и структуры данных связаны с машинами Тьюринга?

Моя копия Дизайн и анализ компьютерных алгоритмов прибыл сегодня. В первой главе автор представил машины Тьюринга. У меня есть еще два учебника по алгоритмам: Введение в алгоритмы и Руководство по разработке алгоритмов, но ни один из них говорит о машинах Тьюринга, хотя они известны своими алгоритмами и структурами данных.

Я хотел бы понять, какова связь между машиной Тьюринга и алгоритмом / структурой данных. Неужели действительно важно понимать машины Тьюринга, чтобы стать экспертом в алгоритмах?


person Avinash    schedule 20.08.2011    source источник
comment
Машина Тьюринга - это теоретическая конструкция, которая описывает, что можно и что нельзя вычислить.   -  person Matt Ball    schedule 20.08.2011
comment
принадлежит programmers.stackexchange.com Вопросы и ответы для опытных программистов, заинтересованных в профессиональных обсуждениях по разработке программного обеспечения   -  person Mchl    schedule 21.08.2011
comment
@ Mchl - не согласен; это не имеет почти ничего общего с разработкой программного обеспечения.   -  person templatetypedef    schedule 21.08.2011


Ответы (2)


Причина, по которой машины Тьюринга важны при описании структур данных и алгоритмов, заключается в том, что они предоставляют математическую модель, в которой мы можем описать, что такое алгоритм. В большинстве случаев алгоритмы описываются с использованием языка высокого уровня или псевдокода. Например, я мог бы описать алгоритм поиска максимального значения в массиве следующим образом:

Set max = -infinity
For each element in the array:
    If that element is greater than max:
        Set max equal to that element.

Из этого описания легко увидеть, как работает алгоритм, и легко перевести его в исходный код. Однако предположим, что я написал это описание:

Guess the index at which the maximum element occurs.
Output the element at that position.

Это действующий алгоритм? То есть можем ли мы сказать «угадать индекс» и точно определить, что он означает? Если мы допустим это, сколько времени это займет? Если мы этого не допустим, то почему? Чем отличается первое описание от второго?

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

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

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

Есть еще одна причина подумать о базовой модели вычислений - обсудить ее ограничения. Каждая модель вычислений имеет свои пределы, и в некоторых случаях вы можете доказать, что определенные алгоритмы не могут существовать для определенных проблем или что любой алгоритм, который решал бы некоторую проблему, обязательно должен использовать некоторое количество данного ресурса. Самый распространенный пример, когда это возникает при разработке алгоритмов с понятием NP-жесткости. Некоторые проблемы считаются чрезвычайно "трудными" для решения, но формальные определения того, что это за трудность, основаны на знании машин Тьюринга и недетерминированных машин Тьюринга. Понимание модели полезно в этом случае, потому что это позволяет вам рассуждать о вычислительной выполнимости определенных проблем.

Надеюсь это поможет!

person templatetypedef    schedule 20.08.2011

Машины Тьюринга - это просто теоретические инструменты для анализа вычислений, т. Е. мы можем указать алгоритм, создав машину Тьюринга, которая его вычисляет. Они очень полезны при изучении вычислимости, то есть, если вообще возможно вычислить функцию. Машины Тьюринга и несколько других формальных языковых конструкций обсуждаются в классической книге Хопкрофта и Ульмана. Машины Тьюринга также появляются при обсуждении NP-полноты, например, в this

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

person Community    schedule 20.08.2011
comment
Еще одна замечательная книга, которая дала мне много информации по этому вопросу, - «Сила компьютера и человеческий разум», написанная Джозефом Вайценбаумом! Мой дедушка дал мне его, когда я учился в университете, и даже через 30 лет после того, как он был написан (1976 г.), он дал мне огромную фору. Хотя, по общему признанию, было немного трудно следовать за первой книгой по этой теме, я думаю, что в конечном итоге мне пришлось вернуться к ней позже. Тем не менее, это изменило мою жизнь и то, как я смотрю на компьютеры, и прекрасно объясняет машины Тьюринга. - person gnomed; 21.08.2011