Теорема Сэвича. Совпадение классов NPS и PS — различия между версиями
Kirelagin (обсуждение | вклад)  | 
				Leugenea (обсуждение | вклад)  м (→Теорема Сэвича)  | 
				||
| Строка 39: | Строка 39: | ||
Рассмотрим вспомогательную функцию <tex>Reach(I, J, k)</tex>, вычисляющую возможность перехода из конфигурации <tex>I</tex> в конфигурацию <tex>J</tex> за не более, чем <tex>2^k</tex> переходов:  | Рассмотрим вспомогательную функцию <tex>Reach(I, J, k)</tex>, вычисляющую возможность перехода из конфигурации <tex>I</tex> в конфигурацию <tex>J</tex> за не более, чем <tex>2^k</tex> переходов:  | ||
| − |    '''Reach''' (I, J, k)  | + |    '''Reach'''(I, J, k):  | 
     '''if''' (k = 0)  |      '''if''' (k = 0)  | ||
| − |        '''return''' (I <tex>\vdash</tex> J) or (I = J)  | + |        '''return''' (I <tex>\vdash</tex> J) or (I = J)  | 
| + |     // запись (I <tex>\vdash</tex> J) означает возможность перехода МТ из конфигурации I в конфигурацию J за один шаг  | ||
     '''else'''  |      '''else'''  | ||
       '''for''' (Y) // перебор промежуточных конфигураций  |        '''for''' (Y) // перебор промежуточных конфигураций  | ||
         '''if''' Reach(I, Y, k-1) and Reach(Y, J, k-1)  |          '''if''' Reach(I, Y, k-1) and Reach(Y, J, k-1)  | ||
| − |            '''return''' true  | + |            '''return''' true  | 
| − |      '''return''' false  | + |      '''return''' false  | 
Эта функция имеет глубину рекурсии <tex>O(k)</tex>, на каждом уровне рекурсии использует <tex>O(f(n))</tex> памяти для хранения текущих конфигураций.  | Эта функция имеет глубину рекурсии <tex>O(k)</tex>, на каждом уровне рекурсии использует <tex>O(f(n))</tex> памяти для хранения текущих конфигураций.  | ||
| Строка 54: | Строка 55: | ||
Рассмотрим функцию, которая по заданному слову <tex>x</tex> проверяет его принадлежность к языку <tex>L</tex>:  | Рассмотрим функцию, которая по заданному слову <tex>x</tex> проверяет его принадлежность к языку <tex>L</tex>:  | ||
| − |    '''Check''' (x, L)  | + |    '''Check'''(x, L):  | 
     '''for''' (T) // перебор конфигураций, которые содержат допускающие состояния  |      '''for''' (T) // перебор конфигураций, которые содержат допускающие состояния  | ||
       '''if''' Reach(S, T, <tex>\log \left(2^{df(n)}\right)</tex>)  |        '''if''' Reach(S, T, <tex>\log \left(2^{df(n)}\right)</tex>)  | ||
| − |          '''return''' true  | + |          '''return''' true  | 
| − |      '''return''' false  | + |      '''return''' false  | 
Если слово принадлежит языку, то оно будет допущено, так как будут рассмотрены все возможные пути допуска. Это обеспечивается указанной нам глубиной рекурсии для функции <tex>Reach</tex>. И если слово не допускается за <tex>2^{df(n)}</tex> шагов (количество всех возможных конфигураций), то оно уже гарантированно не может быть допущено.    | Если слово принадлежит языку, то оно будет допущено, так как будут рассмотрены все возможные пути допуска. Это обеспечивается указанной нам глубиной рекурсии для функции <tex>Reach</tex>. И если слово не допускается за <tex>2^{df(n)}</tex> шагов (количество всех возможных конфигураций), то оно уже гарантированно не может быть допущено.    | ||
Версия 12:36, 3 июня 2012
Содержание
Класс PS
Определение
| Определение: | 
|   — класс языков, разрешимых на детерминированной машине Тьюринга с использованием памяти полиномиального размера.  .  | 
| Определение: | 
|   — класс языков, разрешимых на недетерминированной машине Тьюринга с использованием памяти полиномиального размера.  .  | 
Связь класса PS с другими классами теории сложности
| Теорема: | 
.  | 
| Доказательство: | 
| Рассмотрим любой язык из . Так как , то существует машина Тьюринга , распознающая за полиномиальное время. Это значит, что не сможет использовать более, чем полиномиальное количество памяти, следовательно . | 
| Теорема: | 
.  | 
| Доказательство: | 
| Рассмотрим любой язык из . Так как , то существует программа-верификатор , что для каждого слова из (и только для них) существует такой сертификат полиномиальной длины, что допускает слово и сертификат. Тогда, чтобы проверить принадлежность слова языку, мы можем перебрать все сертификаты полиномиальной длины. Для этого необходим полиномиальный размер памяти. Из этого следует, что . | 
Теорема Сэвича
| Теорема: | 
Для любой  справедливо: .  То есть, если недетерминированная машина Тьюринга может решить проблему, используя памяти, то существует детерминированная машина Тьюринга, которая решает эту же проблему, используя не больше, чем памяти.  | 
| Доказательство: | 
| 
 Рассмотрим машину Тьюринга с входной и рабочей лентой. Ее конфигурацию можно закодировать так: закодировать позицию и содержание рабочей ленты (займет памяти), позицию входной ленты (займет памяти). Так как , то размер конфигурации составит . Пусть . Тогда существует недетерминированная машина Тьюринга, распознающая этот язык.  Reach(I, J, k):
   if (k = 0)
     return (I  J) or (I = J)
   // запись (I  J) означает возможность перехода МТ из конфигурации I в конфигурацию J за один шаг
   else
     for (Y) // перебор промежуточных конфигураций
       if Reach(I, Y, k-1) and Reach(Y, J, k-1)
         return true
   return false
Эта функция имеет глубину рекурсии , на каждом уровне рекурсии использует памяти для хранения текущих конфигураций. Рассмотрим машину Тьюринга , распознающую язык . Эта машина может иметь конфигураций. Объясняется это следующим образом. Пусть имеет состояний и символов ленточного алфавита. Количество различных строчек, которые могут появиться на рабочей ленте . Головка на входной ленте может быть в одной из позиций и в одной из на рабочей ленте. Таким образом, общее количество всех возможных конфигураций не превышает . Рассмотрим функцию, которая по заданному слову проверяет его принадлежность к языку :  Check(x, L):
   for (T) // перебор конфигураций, которые содержат допускающие состояния
     if Reach(S, T, )
       return true
   return false
Если слово принадлежит языку, то оно будет допущено, так как будут рассмотрены все возможные пути допуска. Это обеспечивается указанной нам глубиной рекурсии для функции . И если слово не допускается за шагов (количество всех возможных конфигураций), то оно уже гарантированно не может быть допущено. В итоге функция имеет глубину рекурсии , на каждом уровне рекурсии используется памяти. Тогда всего эта функция использует памяти. | 
Следствие
Вывод
.
Известно, что . Так что хотя бы одно из рассмотренных включений — строгое, но неизвестно, какое. Принято считать, что все приведенные выше включения — строгие.
Источники
- Michael Sipser. Introduction to the theory of computation.