Какие различия и отношения существуют между рандомизированными алгоритмами и недетерминированными алгоритмами?
Из Википедии
Рандомизированное алгоритм представляет собой алгоритм , который использует степень случайности как часть своей логики. Алгоритм обычно использует равномерно случайные биты в качестве вспомогательного входа для управления его поведением в надежде на достижение хорошей производительности в «среднем случае» по всем возможным вариантам выбора случайных битов. Формально производительность алгоритма будет случайной величиной, определяемой случайными битами; таким образом, либо время выполнения, либо выход (или оба) являются случайными величинами.
Недетерминирован алгоритм представляет собой алгоритм , который может иметь различные модели поведения на различных трассах, в отличии от детерминированного алгоритма. Есть несколько способов, которыми алгоритм может вести себя по-разному от запуска к запуску. Параллельный алгоритм может выполняться по- разному на разных трассы из - за состояние гонки. Вероятностный алгоритм «S поведение зависит от генератора случайных чисел. Алгоритм, который решает проблему за недетерминированное полиномиальное время, может работать за полиномиальное или экспоненциальное время в зависимости от выбора, который он делает во время выполнения.
Являются ли рандомизированные алгоритмы и вероятностные алгоритмы одним и тем же понятием?
Если да, являются ли рандомизированные алгоритмы просто недетерминированными алгоритмами?
Ответы:
Недетерминированные алгоритмы очень отличаются от вероятностных алгоритмов.
Вероятностные алгоритмы, использующие броски монет и работающие «большую часть времени». Например, рандомизированные варианты быстрой сортировки работают во времени в ожидании (и с высокой вероятностью), но если вам не повезло, это может занять целых Θ ( n 2 ) . Вероятностные алгоритмы практичны и используются, например, вашим компьютером при генерации ключей RSA (чтобы проверить, что два фактора вашего секретного ключа просты). Вероятностный алгоритм, который не использует броски монет, иногда называют «детерминированным».Θ(nlogn) Θ(n2)
Недетерминированные алгоритмы - это те, которые «нуждаются в подсказке», но всегда верны: их нельзя обмануть, если дать неверный совет. В качестве примера приведем недетерминированный алгоритм, который вычисляет целое число : угадать факторизацию n и убедиться, что все факторы простые (для этого есть «быстрый в теории» детерминированный алгоритм). Этот алгоритм очень быстрый и отклоняет ложные подсказки. Большинство людей считают, что рандомизированные алгоритмы не могут быстро вычислять целые числа. Очевидно, что эта модель вычислений не является реалистичной.N N
Почему мы заботимся о недетерминированных алгоритмах? Существует класс задач, известный как NP, который состоит из задач решения, которые имеют эффективные недетерминированные алгоритмы. Большинство людей думают, что самые сложные проблемы в этом классе, так называемые NP-полные задачи, не имеют эффективных детерминированных (или даже рандомизированных) алгоритмов; это известно как вопрос P против NP. Поскольку многие естественные проблемы являются NP-полными, интересно знать, не являются ли они фактически разрешимыми эффективно, в худшем случае (на практике часто возникающие на практике случаи фактически разрешимы в разумные сроки).
источник
Алгоритм определяет метод для получения от данного входа к желаемому результату, который имеет определенную связь с входом. Мы говорим, что этот алгоритм является детерминированным, если в любой точке точно и однозначно указано, каким будет следующий шаг в алгоритме, который должен быть выполнен как часть этого метода, потенциально зависящий от входных данных или частичных данных, вычисленных до сих пор, но всегда однозначно идентифицируется.
Недетерминизм означает, что некоторая часть алгоритма оставлена или даже не указана. Например, «int i = четное число от 0 до n» не указано. Это означает, что не существует уникального поведения, указанного на этом этапе.
Чтобы это различие было полезным, вам нужна (обычная) концепция «правильности» для (детерминированных) алгоритмов, которая неофициально заключается в том, что «алгоритм всегда вычисляет то, что я хочу, чтобы он вычислял». Тогда становится интересно подумать о том, что будет означать корректность для недетерминированных алгоритмов, которые должны учитывать варианты, возможные в недостаточно определенных инструкциях.
Существует два способа определения правильности недетерминизма. Первый довольно прост и менее интересен, для чего правильность означает «алгоритм всегда вычисляет то, что я хочу, чтобы он вычислял, для всех последовательностей выборов, которые мне разрешено делать». Это иногда происходит, если автор части псевдокода слишком ленив, чтобы выбрать число, и говорит «выберите любое четное число от 0 до n», когда «выбор 0» сделал бы алгоритм детерминированным. По сути, заменяя весь недетерминизм результатом какого-либо выбора, вы можете сделать алгоритм детерминированным.
Это также «недетерминизм», упомянутый во втором абзаце. Это также недетерминизм в параллельных алгоритмах: в этих алгоритмах вы не совсем уверены, как точно выглядит выполнение, но вы знаете, что оно всегда будет работать, независимо от того, что происходит точно (в противном случае ваш параллельный алгоритм был бы неверным).
Интересное определение корректности для недетерминированного алгоритма - «алгоритм всегда вычисляет то, что я хочу, чтобы он вычислял, для некоторой последовательности выборов, которые мне разрешено делать». Это означает, что могут быть неправильные варианты в том смысле, что они заставляют алгоритм давать неправильный ответ или даже идти бесконечным циклом. В примере «выберите любое четное число от 0 до n», возможно, 4 и 16 - правильный выбор, но все другие числа неправильные, и эти числа могут варьироваться в зависимости от ввода, частичных результатов и сделанных на данный момент выборов.
При использовании в компьютерных науках недетерминизм обычно ограничивается недетерминированным выбором либо 0, либо 1. Однако, если вы выбираете много таких битов недетерминированным образом, вы можете генерировать длинные недетерминированные числа или другие объекты, а также делать недетерминированные выборы, так что это вряд ли (если когда-либо) ограничивает его применимость - если применимость ограничена, недетерминизм был слишком силен в первую очередь.
Недетерминизм - это такой же мощный инструмент, как и детерминированный алгоритм на основе сертификатов, то есть алгоритм, который проверяет свойство, данное экземпляру, и сертификат для этого свойства. Вы можете просто недетерминированно угадать сертификат для одного направления, и вы можете дать сертификат, который содержит все «правильные» ответы для недетерминированных догадок 0 и 1 вашей программы для другого направления.
Если мы добавим время бега в микс, то все станет еще интереснее. Время выполнения недетерминированного алгоритма обычно принимается за минимальное значение для всех (правильных) выборов. Тем не менее, другие варианты могут привести к значительно худшему времени выполнения (которое может быть асимптотически хуже или даже произвольно хуже, чем минимум), или даже к бесконечному циклу. Вот почему мы берем минимум: нас не волнуют эти странные случаи.
Теперь перейдем к рандомизированным алгоритмам. Рандомизированные алгоритмы похожи на недетерминированные алгоритмы, но вместо того, чтобы «разрешать» выбор между 0 и 1 в определенных точках, этот выбор определяется случайным броском монеты в тот момент, когда выбор должен быть сделан (который может отличаться от запуска к бегу или когда тот же выбор должен быть сделан снова позже во время выполнения алгоритма). Это означает, что результат равен 0 или 1 с равной вероятностью. Корректность теперь становится либо «алгоритм почти всегда вычисляет то, что я хочу вычислить», либо «алгоритм всегда вычисляет то, что я хочу вычислить» (только детерминированная версия). Во втором случае время, необходимое алгоритму для вычисления своего ответа, обычно «почти всегда быстрое», в отличие от детерминированного «всегда быстрого».
источник
Вкратце: недетерминизм означает иметь несколько одинаково допустимых вариантов продолжения вычислений. Рандомизация означает использование внешнего источника (случайных) битов для управления вычислениями.
Чтобы понять недетерминизм, я предлагаю вам взглянуть на конечные автоматы (ФА). Для детерминированного FA (DFA), функция перехода, ну, в общем, функция. Учитывая текущее состояние и следующий входной символ, следующее состояние определяется однозначно.
[ источник ]
Ключевым моментом здесь является то, что принятие определяется как «принять, если есть прогон принятия» для NFA. Этот критерий существования можно интерпретировать как «всегда правильно угадывать», хотя в действительности угадывания нет.
Обратите внимание, что здесь нет нигде вероятностей. Если бы вы переводили недетерминизм в языки программирования, у вас были бы операторы, которые могут вызывать переходы к другим другим операторам при одном и том же состоянии . Такого не существует, разве что в эзотерических языках программирования, предназначенных для того, чтобы поразить вас.
Рандомизация совсем другая. Если мы разобьем его, у автомата / программы не будет нескольких вариантов продолжения выполнения. Как только случайные биты получены, следующий оператор определен однозначно:
В терминах конечных автоматов рассмотрим это:
[ источник ]
И последнее замечание: мы видим, что недетерминизм - это чисто теоретическая концепция, она не может быть реализована! Так почему мы используем это?
Это часто позволяет меньшие представления. Возможно, вы знаете, что существуют NFA, для которых наименьший DFA экспоненциально велик¹. Использование меньших - это просто вопрос упрощения дизайна автоматов и технических доказательств.
Перевод между моделями часто более прост, если в целевой модели допускается недетерминизм. Рассмотрим, например, преобразование регулярных выражений в DFA: обычный (и простой) способ - перевести его в NFA и определить это. Я не знаю о прямой конструкции.
Это может быть академической проблемой, но интересно, что недетерминизм может увеличить мощность устройства. Это не относится к конечным автоматам и машинам Тьюринга, которые, вероятно, являются наиболее популярными моделями устройств, но, например, детерминированные pushdown-автоматы, автоматы Büchi и нисходящие древовидные автоматы могут принимать строго меньше языков, чем их недетерминированные братья и сестры2.
источник
Вы должны знать, что здесь есть два разных определения недетерминизма.
Как определяет это википедия, в значительной степени «не детерминизм», то есть любой алгоритм, который не всегда имеет одинаковое поведение на одних и тех же входах. Рандомизированные алгоритмы являются частным случаем «недетерминированных» алгоритмов, потому что они соответствуют определению, которое я только что дал.
Недетерминированные модели вычислений (например, недетерминированные машины Тьюринга) являются теоретическими моделями вычислений. У них может быть несколько возможных путей выполнения, и они «принимают», если любой из этих путей принимает. Вы должны отметить, что они не настоящие. Невозможно физически запустить алгоритм, который является недетерминированным в этом смысле, хотя вы можете смоделировать его с помощью рандомизированного или детерминированного.
В CS недетерминизм обычно означает (2), поэтому приведенное вами определение Википедии (а именно (1)) вводит в заблуждение. Большинство ответов, приведенных до сих пор, объясняют (2), а не (1).
источник
Пересматривая это из-за некоторых связанных с этим исследований, разногласия между мной и некоторыми другими, которые ответили, могут быть ассимилированы в целостное понимание, в котором мы все были правы. Но ИМО, принятая в компьютерной науке терминология «ограниченный недетерминизм», является неправильным оксюмороном (о чем я говорил раньше).
Их ключевой момент заключается в различении ограниченного и неограниченного недетерминизма. [1]
Недетерминированные машины Тьюринга (иначе говоря, «NTM») имеют ограниченный недетерминизм в том, что каждый переход состояния имеет ограниченное количество возможностей, то есть число программ (или «конфигураций») конечно. Лента остается неограниченной, поэтому доказательство прекращения остается неразрешимым. Но для любого заданного ввода, который останавливается, вывод является детерминированным и ограниченным во времени, то есть для любого ввода результат является детерминированным или не завершается. Кроме того, NTM выполняют все возможные конфигурации параллельно, поэтому они выполняются экспоненциально быстрее, чем эмуляция NTM на детерминированных машинах Тьюринга (или «DTM»). [2]
На самом деле нет никаких недетерминированных отношений между входами и результатами в NTM, потому что результат всегда одинаков для любого входа или исходного состояния, что очевидно, потому что они могут быть эмулированы DTM без какой-либо дополнительной случайности. Неразрешимый не является противоположностью детерминистическому, потому что не остановка - также детерминированный результат. Детерминированные машины всегда имеют один и тот же результат для данного ввода, даже когда этот результат не останавливается. Локализованный недетерминизм NTM находится в каждом переходе состояния алгоритма выполнения. Априори неразрешимо, какой путь дерева может закончиться, предоставляя выходное состояние. Но неразрешимость - это не недетерминизм. Таким образом, термин «ограниченный недетерминизм» предназначен для описания локализованной неопределенности внутри конечного автомата, но не отношения входов к результатам, отсюда и понятие «ограниченный». Я все еще думаю, что термин «ограниченный недетерминизм» является оксюмороном, и его можно было бы более точно описать как машину Тьюринга с «параллельным переходом между состояниями».
Принимая во внимание, что для любого данного входного или начального состояния неограниченный недетерминизм (он же «индетерминизм») имеет неограниченное число возможных состояний. Неограниченный недетерминизм включает в себя не только количество возможных конфигураций программ, но и некоторое неограниченное внешнее состояние, которое не является частью входного или начального состояния, например неограниченные задержки. И, таким образом, результаты могут отличаться при повторных выполнениях для одного и того же ввода или начального условия; таким образом, не является детерминированной взаимосвязью между входами и результатами. [3]
Рандомизированные и вероятностные алгоритмы используют некоторый недетерминизм, то есть случайный выбор возможных конфигураций, возможно ограниченных по количеству конфигураций, но они не выполняют все возможные конфигурации, как это делают NTM. Таким образом, они не являются детерминированными, если случайность не является детерминированной (например, PRNG), а начальное состояние энтропии для случайности считается частью входных данных.
[1] https://en.wikipedia.org/w/index.php?title=Unbounded_nondeterminism&oldid=710628370#Nondeterministic_automata
[2] https://en.wikipedia.org/w/index.php?title=Non-deterministic_Turing_machine&oldid=754212081#Equivalence_with_DTMs
[3] Хьюитт, Мейер и Шиперски: модель актера (все, что вы хотели знать ...) . Перейти к отметке в 17:44.
источник
Помимо всех ответов, объясняющих разницу, у меня есть пример, который может помочь вам получить то, что они хотят сказать.
Рассмотрим бросок монеты, вы получите либо H, либо Т . Если жеребьевка является случайной, то весьма вероятно , что из 1000 бросков монеты, 500 будет H , и это весьма маловероятно , что 999 из них будет H . Но если бросок монеты недетерминирован, мы не можем сказать, что получение 999 Н было бы крайне маловероятным.
источник
Рандомизированные (полиномиальное время, логический результат) алгоритмы находятся в классе вычислительной сложности RP, который является подмножеством NP, где находятся недетерминированные (полиномиальное время, логический результат) алгоритмы, и надмножеством P, где детерминирован (полиномиальное время, логический результат) алгоритмы проживают.
Подменю сложность о сокращении проблем в одном наборе к другому набору. Таким образом, RP ⊆ NP исключает возможность рандомизированных алгоритмов, которые также являются недетерминированными, поскольку определенно надмножество содержит подмножество. Подмножество означает, что каждый алгоритм RP (или любой RP-полный алгоритм) может быть уменьшен до некоторого NP-алгоритма (или любого NP-полного алгоритма). P является подмножеством RP, потому что каждая проблема в P может быть сведена к проблеме в RP, где количество неконтролируемой энтропии равно 0.
Тангенциально, это аналогично тому, как каждая задача в NC (параллельные вычисления) может быть сведена к проблеме в P путем симуляции параллельных вычислений в редукции к последовательной задаче в P, но еще не доказано, что обратное утверждение верно, т.е. что каждая проблема в P сводима к задаче в NC, а также не доказана, что она не верна, то есть неправдоподобное доказательство того, что P-полная задача не сводима к проблеме в NC. Возможно, что существуют проблемы, которые по своей природе последовательны и не могут быть вычислены параллельно, но доказать, что доказать P ≠ NC, кажется неправдоподобным (по причинам, слишком касательным, чтобы обсуждать в этом ответе).
В более общем смысле (т. Е. Не ограничиваясь булевыми типами результатов) рандомизированные алгоритмы отличаются от детерминированных алгоритмов тем, что некоторая энтропия извлекается из внешних источников . Рандомизированные алгоритмы отличаются от недетерминированных алгоритмов, потому что что энтропия ограничена , и, таким образом, можно доказать, что рандомизированные (а не недетерминированные) алгоритмы всегда заканчиваются.
Непредсказуемость недетерминированных алгоритмов связана с невозможностью перечисления все возможные перестановки входной энтропии (что приводит к непредсказуемости завершения). Непредсказуемость рандомизированного алгоритма обусловлена неспособностью контролироватьвся входная энтропия (которая приводит к непредсказуемости неопределенного результата, хотя степень непредсказуемости может быть предсказана). Ни одно из них не является утверждением о непредсказуемости правильного ответа на проблему, но скорее непредсказуемость проявляется в боковом канале завершения и неопределенного результата соответственно. Похоже, многие читатели связывают непредсказуемость в одной области с непредсказуемостью правильного результата, что я никогда не писал (см. Историю изменений).
Ключевым является понимание того, что недетерминизм - это всегда (в любой науке или использовании этого термина) неспособность перечислить универсальную (т.е. неограниченную) энтропию. Принимая во внимание, что рандомизация относится к доступу к другому источнику энтропии (в программах энтропии, отличных от контролируемых входных переменных и, таким образом, не зависящих от них), которые могут быть или не быть неограниченными.
Я добавил следующий комментарий ниже самого популярного в настоящее время ответа в другой ветке, которая задает аналогичный вопрос.
Добавление некоторых из лучших комментариев, чтобы добавить разъяснение моей точки зрения на единственное существенное различие между рандомизированным и недетерминированным.
Это действительно довольно элегантно и легко увидеть различие, как только вы все перестанете запутывать его, пытаясь описать его с оперативной точки зрения, а не с явной энтропийной точки зрения.
,
,
,
Словари являются инструментами. Научитесь использовать их.
Таким образом, рандомизация требует только того, чтобы некоторая часть входной энтропии была равновероятной, что согласуется с моим определением, что часть входной энтропии не контролируется вызывающей функцией. Обратите внимание, что рандомизация не требует, чтобы входная энтропия была неразрешимой по отношению к завершению.
Таким образом, это говорит нам о том, что детерминированные алгоритмы должны быть полностью определены состоянием ввода функции, то есть мы должны быть в состоянии доказать, что функция будет завершена (или не завершена), и что она не может быть неразрешимой. Несмотря на запутанную попытку Википедии описать недетерминированный, единственная противоположность детерминированному, как определено выше в Википедии, - это алгоритмы, чье входное состояние (энтропия) плохо определено. И единственный способ, которым входное состояние может быть плохо определено, - это когда оно не ограничено (таким образом, не может быть детерминировано предварительно проанализировано). Именно это отличает недетерминированную машину Тьюринга (и многие реальные программы, написанные на общих языках Тьюринга, таких как C, Java, Javascript, ML и т. Д.) От детерминированных ТМ и языков программирования, таких как HTML, формулы электронных таблиц, Кок, Эпиграмма,
Википедия и другие пытаются отождествить рандомизацию с недетерминизмом, но какой смысл иметь эти два понятия, если вы не собираетесь их красноречиво различать?
Ясно, детерминизм о способности определять. Ясно, что рандомизация заключается в том, чтобы сделать некоторую энтропию равновероятной.
Включение случайной энтропии в состояние алгоритма не обязательно делает его неопределимым. Например, PRNG может иметь требуемое равновероятное статистическое распределение, но также быть полностью детерминированным.
Смешение ортогональных понятий - это то, что люди с низким IQ Я ожидаю лучшего, чем это от этого сообщества!
источник